阅读量:0
在PHP中,使用socket_accept()
函数可以处理并发连接。要处理并发连接,您需要创建一个多线程或多进程的服务器。这里有两种方法可以实现:
- 使用多线程(pthreads):
要使用多线程,您需要安装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); ?>
- 使用多进程(pcntl):
以下是一个简单的多进程服务器示例:
<?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密集型任务,而多进程方法更适用于计算密集型任务。在选择合适的方法时,请根据您的应用场景进行权衡。