PHP中的慢速套接字接受
我试图实现一个简单的套接字服务器,它接受TCP连接并根据输入返回响应。 整个程序在循环中运行,因此它始终处于打开状态,但在PHP中的慢速套接字接受,php,sockets,tcp,Php,Sockets,Tcp,我试图实现一个简单的套接字服务器,它接受TCP连接并根据输入返回响应。 整个程序在循环中运行,因此它始终处于打开状态,但在socket\u accept函数调用之前有一个明显的延迟 当我执行程序时,执行第一个回显“服务器就绪”命令大约需要10-15秒 我正在使用PHPVRedhatEnterpriseLinuxServer5.5(Tikanga)运行这个程序。5.1.6 有什么建议吗 代码段: $host = "SERVER_IP"; $port = 80; set_time_limit(100
socket\u accept
函数调用之前有一个明显的延迟
当我执行程序时,执行第一个回显“服务器就绪”命令大约需要10-15秒
我正在使用PHPVRedhatEnterpriseLinuxServer5.5(Tikanga)运行这个程序。5.1.6
有什么建议吗
代码段:
$host = "SERVER_IP";
$port = 80;
set_time_limit(100);
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
if (!socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1)) {
echo socket_strerror(socket_last_error($socket));
exit;
}
$result = socket_bind($socket, $host, $port) or die("Could not create socket\n");
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");
while(true)
{
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
echo "\nThe server is ready\n";
$input = socket_read($spawn, 1024) or die("Could not read input\n");
$output = processInput($input);
socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");
socket_close($spawn);
}
socket_close($socket);
echo "\nTerminating\n";
socket_accept是一种阻塞方法,它不会返回,除非它接受新的套接字连接。因此,除非客户端调用套接字连接函数并成功连接到套接字服务器,否则代码不会打印“服务器已准备就绪”。因此,延迟可能在客户端,也可能在10到15秒后运行客户端。使用其他端口。80通常是为HTTP协议保留的,您可能与在该端口侦听的另一个服务发生冲突。我检查过了。我也尝试了不同的端口。同样的事情:(问题是,它太慢了?是的。我觉得我在这里做了一些根本错误的事情。嗯,也许解析您的本地主机名出了问题,需要很多时间?如果它在同一台服务器上…我不认为是这样。因为我只能在显示该消息后才能建立连接。我认为服务器出了问题。我会检查确认。就是这样。请检查文档。socket_accept是一个阻塞函数,在出现错误或成功连接之前不会返回。谢谢。我解决了问题。将spawn命令移到循环之外。这似乎有效。谢谢@Powtac