php中的异步套接字连接

php中的异步套接字连接,php,sockets,asynchronous,while-loop,Php,Sockets,Asynchronous,While Loop,我正在尝试用php编写异步套接字侦听器代码。但侦听器响应仅对第一个请求进行应答,对于其他请求,它只能接收没有响应的数据包(我正在使用嗅探器进行检查),并且我正在计算循环活动的时间和循环仅对第一个请求活动的时间。。。。。。我将显示我的代码: addr = '192.168.0.117'; $port = 7878; $sock = socket_create(AF_INET, SOCK_STREAM, 0); socket_bind($sock, $addr, $port) or die('Cou

我正在尝试用php编写异步套接字侦听器代码。但侦听器响应仅对第一个请求进行应答,对于其他请求,它只能接收没有响应的数据包(我正在使用嗅探器进行检查),并且我正在计算循环活动的时间和循环仅对第一个请求活动的时间。。。。。。我将显示我的代码:

addr = '192.168.0.117';
$port = 7878;
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($sock, $addr, $port) or die('Could not bind to address');
socket_listen($sock);

$null = NULL;
$clients = Array();
$cc = 0; // loop counter

while(true){

    echo $cc."<br>";
    $cc = $cc +1;

    $read[0] = $sock;

    $ready = socket_select($read,$null,$null,$null);    
    $client = socket_accept($sock);
    $input = socket_read($client, 312); 


    echo $input;

    if($input == "exit"){
        socket_close($client);
        socket_close($sock);
        return false;
    }

    $output = 0x11;
    socket_write($client,$output);
    $input = "";
}
addr='192.168.0.117';
$port=7878;
$sock=socket\u create(AF\u INET,sock\u STREAM,0);
socket_bind($sock,$addr,$port)或die('notbind to address');
socket_listen($sock);
$null=null;
$clients=Array();
$cc=0;//循环计数器
while(true){
echo$cc.“
”; $cc=$cc+1; $read[0]=$sock; $ready=socket\u select($read,$null,$null,$null); $client=socket\u accept($sock); $input=socket\u read($client,312); echo$输入; 如果($input==“exit”){ socket_close($client); 插座关闭($sock); 返回false; } $output=0x11; socket_write($client,$output); $input=“”; }
可能是在第一个客户端发送
exit
命令后,您正在关闭侦听套接字。当客户端发送
exit
命令时,应仅关闭
client
套接字。然后从
while
循环返回false。这显然意味着它将只处理一个客户机

if($input == "exit"){
   socket_close($client);
   socket_close($sock);  // Think about this Line.
   return false; // Think about this Line.
}

仅供参考:这不是异步的谢谢colin提供的信息,但你能帮助我吗?谢谢shazin的回答,这个命令出口适用于所有正确的客户端。。。这里没有问题。。。当第一个请求出现时,问题进入循环,例如“3401000031313639313030303938383334380051”服务器接收到它并打印到屏幕上。。。但在1个数据包之后,只有嗅探器可以看到数据包在同一个本地端口被接收,但我的服务器无法显示在屏幕上,循环计数器再次为0。当我从另一台服务器发送请求“退出”时,它可以接收它,循环号为1。它只循环新的连接,但我需要循环每个新的异步数据包。。。对不起,坏了english@user1360571如果你想要真正的异步通信,你需要选择一种新的语言。目前,这是同步和阻塞的。您的
socket\u read
将挂起,直到它接收到312字节的数据,或者连接关闭(以先到者为准)。在PHP手册中查找
stream\u set\u blocking
,但要明白它不会解决所有问题。PHP不打算像这样是异步的。如果这些是你的需求,考虑使用类似于NoDE.js的项目。