PHP:socket_recv()失败;原因:成功?

PHP:socket_recv()失败;原因:成功?,php,websocket,Php,Websocket,我在socket服务器中使用PHP。我创建套接字并写入套接字,但无法读取。我已将所有客户端套接字连接到clients阵列中。我使用flagMSG_DONTWAIT,因为如果我使用其他flag,我无法与其他客户握手。在这里帮助我找到bug,或者给我一些在这种环境下可以工作的代码 foreach($clients as $client) { if ( socket_recv($client, $buf, 1024, MSG_DONTWAIT) >= 1) { print

我在socket服务器中使用PHP。我创建套接字并写入套接字,但无法读取。我已将所有客户端套接字连接到clients阵列中。我使用flagMSG_DONTWAIT,因为如果我使用其他flag,我无法与其他客户握手。在这里帮助我找到bug,或者给我一些在这种环境下可以工作的代码

foreach($clients as $client) {
    if ( socket_recv($client, $buf, 1024, MSG_DONTWAIT) >= 1) {
        print_r($buff);
    }  else {
       echo "socket_recv() failed; reason: " .                                 
              socket_strerror(socket_last_error($socket)) . "\n";
    }         
}
然而,我得到了下面的信息。请帮助我了解如何接收客户的信息

PHP: socket_recv() failed; reason: Success
Jquery代码:

$(document).ready(function() {

//create a new WebSocket object.
var wsUri = "ws://172.28.21.45:9000";   
var websocket = false;

websocket = new WebSocket(wsUri);

$("#messageform").click( function(ev) {

    ev.preventDefault();

    var message = $("#message").val();
    var packet = {
        message: message
    };

    console.log(packet);
    websocket.send(JSON.stringify(packet));

    $("#message").val('');
});

websocket.onopen = function(ev) {

    //ev.preventDefault();
    $(".notification").html('<a href="messagearchive.php"><img src="images/bell.svg" width="25px;"/><br/><span style="color: green;">Connected</span>    ');
}

websocket.onmessage = function(ev) {

    ev.preventDefault();
}
websocket.onerror = function(ev)  {
    $(".notification").append('<p>Socket has error</p>');
}
websocket.onclose = function (ev) {
    $(".notification").append('<p>Socket is closed</p>');
}   
$(文档).ready(函数(){
//创建新的WebSocket对象。
var wsUri=“ws://172.28.21.45:9000”;
var-websocket=false;
websocket=新的websocket(wsUri);
$(“#消息表单”)。单击(函数(ev){
ev.preventDefault();
var message=$(“#message”).val();
var数据包={
信息:信息
};
控制台日志(数据包);
send(JSON.stringify(packet));
$(“#消息”).val(“”);
});
websocket.onopen=功能(ev){
//ev.preventDefault();
$(“.notification”).html(“
已连接”); } websocket.onmessage=函数(ev){ ev.preventDefault(); } websocket.onerror=功能(ev){ $(“.notification”).append(“套接字有错误”

”); } websocket.onclose=功能(ev){ $(“.notification”).append(“套接字已关闭”

”); }

}))

函数socket recv返回读取的字节数错误时返回

断开连接时,您将收到0个字节,并且您的
if
未检查此情况

我建议您稍微修改一下php阅读代码:

foreach($clients as $client) {
  $bytes = socket_recv($client, $buf, 1024, MSG_DONTWAIT);
  if ($bytes === false) {
    echo "socket_recv() failed; reason: " .                                 
          socket_strerror(socket_last_error($socket)) . "\n";
  } elseif ($bytes === 0) {
    echo "Disconnection\n";
  } else {
    print_r($buff);
  }
}         

然而,这并不能解释为什么您不能读取数据

函数socket recv返回读取的字节数错误时返回

断开连接时,您将收到0个字节,并且您的
if
未检查此情况

我建议您稍微修改一下php阅读代码:

foreach($clients as $client) {
  $bytes = socket_recv($client, $buf, 1024, MSG_DONTWAIT);
  if ($bytes === false) {
    echo "socket_recv() failed; reason: " .                                 
          socket_strerror(socket_last_error($socket)) . "\n";
  } elseif ($bytes === 0) {
    echo "Disconnection\n";
  } else {
    print_r($buff);
  }
}         
然而,这并不能解释为什么您不能读取数据