Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的慢速套接字接受_Php_Sockets_Tcp - Fatal编程技术网

PHP中的慢速套接字接受

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

我试图实现一个简单的套接字服务器,它接受TCP连接并根据输入返回响应。 整个程序在循环中运行,因此它始终处于打开状态,但在
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