PHP 的socket连接 workerman 的websocket 问题!

zjfree
function SendSocketMsg(){
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
    $result = socket_connect($socket,'127.0.0.1', 2346);
    /*
    if ($result == false)
    {
        echo 'connect error!';
        return false;
    }
    */

    $msg = '@hello socket11111';
    if (socket_write($socket, $msg, strlen($msg)) === false)  
    {  
        echo "socket_write() failed: reason: " . socket_strerror(socket_last_error()) ."/n";  
        return false;
    }  

    //$recv_data = socket_read($socket,1024);
    socket_close ($socket);
    //return $recv_data;
}
SendSocketMsg();

workerman中 onConnect 可以触发,但没有收到任何数据,PHP代码也没有错误。
使用HTML5 连接数据正常。

6079 1 0
1个回答

walkor

websocket服务需要用websocket协议连接,才能通讯。
就像http协议,你要用浏览器通过http协议取访问,服务端才能正确收到。
msyql数据库服务,你要用mysql协议才能正确访问。

直接socket连,发的数据不符合websocket通讯协议,服务端自然无法识别你发的是什么,所以收不到。

如果直接socket连,可以直接基于tcp通讯,就不要用websocket协议,
new XXX('websocket://0.0.0.0:2346');
改成
new XXX('tcp://0.0.0.0:2346');
就可以通讯了,但是会有粘包问题。
协议相关请参考workerman手册,或者网上看一些文章

  • 暂无评论
年代过于久远,无法发表回答
🔝