尝试让我的socket_read()在之前已经读过数据时阻止。 我需要它等待$ spawn套接字在它再次发送之前有新数据(可能相同,即希望它在接收“FE”时读取它两次)。
如果没有新数据,如何阻止它?
$i=0;
while ($i<10){
//Read and Parse Client input
$input = strtoupper(bin2hex(socket_read($spawn, 1)));
echo $input . "\n";
//Deal with requests
if ($input == "FE"){ //Server Ping
socket_write($spawn, $ping_packet);
echo "Ping Attempt \n";
} elseif ($input == "02"){ //Handshake Request
socket_write($spawn, $handshake_packet);
echo "Handshake Attempt \n";
} elseif($input == "01"){ //Login Request
socket_write($spawn, $kick_packet);
echo "Login Attempt \n";
}
$i++;
}
答案 0 :(得分:1)
您可以使用socket_set_block将套接字设置为阻止。有关如何同时处理大量套接字的信息,请参阅socket_select。
答案 1 :(得分:0)
socket_read将返回一个空字符串。要进行阻塞读取,请使用带有标志MSG_WAITALL的socket_recv。