在PHP中,使用socket_accept()
函數可以處理并發連接。要處理并發連接,您需要創建一個多線程或多進程的服務器。這里有兩種方法可以實現:
要使用多線程,您需要安裝PHP的pthreads擴展。請注意,pthreads僅適用于CLI(命令行界面)版本的PHP,不適用于Web服務器環境。
以下是一個簡單的多線程服務器示例:
<?php
$host = '127.0.0.1';
$port = 8080;
// 創建套接字
$serverSocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($serverSocket, $host, $port);
socket_listen($serverSocket);
echo "Server listening on $host:$port...\n";
while (true) {
// 接受客戶端連接
$clientSocket = socket_accept($serverSocket);
// 處理客戶端請求
$clientRequest = socket_read($clientSocket, 1024);
$response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>Hello from multi-threaded server!</h1>";
socket_write($clientSocket, $response);
// 關閉套接字
socket_close($clientSocket);
}
// 關閉服務器套接字
socket_close($serverSocket);
?>
以下是一個簡單的多進程服務器示例:
<?php
$host = '127.0.0.1';
$port = 8080;
// 創建套接字
$serverSocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($serverSocket, $host, $port);
socket_listen($serverSocket);
echo "Server listening on $host:$port...\n";
while (true) {
// 接受客戶端連接
$clientSocket = socket_accept($serverSocket);
// 處理客戶端請求
$clientRequest = socket_read($clientSocket, 1024);
$response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>Hello from multi-process server!</h1>";
socket_write($clientSocket, $response);
// 關閉套接字
socket_close($clientSocket);
}
// 關閉服務器套接字
socket_close($serverSocket);
?>
這兩種方法都可以處理并發連接,但多線程方法更適用于I/O密集型任務,而多進程方法更適用于計算密集型任務。在選擇合適的方法時,請根據您的應用場景進行權衡。