在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密集型任务,而多进程方法更适用于计算密集型任务。在选择合适的方法时,请根据您的应用场景进行权衡。