【问题标题】:PHP: socket_recv() failed; reason: Success?PHP:socket_recv() 失败;理由:成功?
【发布时间】:2017-06-29 06:04:32
【问题描述】:

我在套接字服务器中使用 PHP。我创建套接字并写入套接字但无法读取。我已将所有客户端套接字附加到 clients 数组中。我使用标志 MSG_DONTWAIT 因为如果我使用其他标志,我无法与其他客户端握手。帮助我在这里找到错误或给我在这种情况下工作的代码。

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>');
}   

});

【问题讨论】:

    标签: php websocket


    【解决方案1】:

    函数socket-recv返回读取的字节数false以防出错(this information is in the manual)。

    断开连接 时,您会收到 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);
      }
    }         
    

    但是,这并不能解释您无法读取数据的原因。

    【讨论】:

      猜你喜欢
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      • 2014-07-14
      • 2018-02-22
      • 1970-01-01
      相关资源
      最近更新 更多