Socket.io 客户端无法与 websocket 服务器一起使用

Posted

技术标签:

【中文标题】Socket.io 客户端无法与 websocket 服务器一起使用【英文标题】:Socket.io client not working with websocket server 【发布时间】:2020-02-25 13:05:31 【问题描述】:

我使用https://github.com/gorilla/websocket 在 go 中编写了一个 websocket 服务器。 在客户端,前端团队想要使用 Socket.io,但无法正常工作。 使用普通的 websockets 一切正常。我对 Socket.io 的了解不多,只是我在网上看到的,也没有找到任何决定性的和最近的答案。

有没有可能让 Socket.io 与普通的 websocket 服务器一起工作?

Socket.IO 客户端错误:超时。 Socket.IO 客户端代码:

    var token = "valid_token";

    var socket = io(
        'ws://localhost:6060',
        
            transports: ['websocket'],
            path: '/ws/dispatchers',
            query:  
                token: token
            ,
        
    );

    socket.on('connect_error', (error) => 
        console.log("------connect_error------");
        console.log(error);
    );

    socket.on('connect_timeout', (timeout) => 
        console.log("------timeout-----");
        console.log(timeout);
    );

    socket.on('connect', function()
        console.log("---------connect---------");
    );
    socket.on('event', function(data)
        console.log(data)
    );
    socket.on('disconnect', function()
        console.log("---------disconnect---------")
    );
    socket.on('error', function(err)
        console.log("--------error------------");
        console.log(err)
    );

    socket.on('ping', () => 
        console.log("--------ping------------");

    );

    socket.on('pong', (latency) => 
        console.log("--------pong------------");
    );

后端错误:websocket:关闭 1005(无状态) 后端代码,与以下相同: https://github.com/gorilla/websocket/tree/master/examples/chat

【问题讨论】:

你能粘贴你的代码,以及错误堆栈跟踪 SocketIO 是在包括 WebSockets 在内的其他传输之上的一层。在服务器上使用 SocketIO 包。根据应用程序正在使用的功能,最好放弃 SocketIO 并直接使用 WebSockets。 【参考方案1】:

来自 Socket.io 文档

Socket.IO 不是 Socket.IO 不是 WebSocket 实现。 尽管 Socket.IO 确实尽可能使用 WebSocket 作为传输, 它为每个数据包添加一些元数据:数据包类型、命名空间 以及需要消息确认时的数据包ID。那是 为什么 WebSocket 客户端将无法成功连接到 Socket.IO 服务器和 Socket.IO 客户端将无法连接 到 WebSocket 服务器。请参阅协议规范 在这里。

【讨论】:

以上是关于Socket.io 客户端无法与 websocket 服务器一起使用的主要内容,如果未能解决你的问题,请参考以下文章

websocket 与Socket.IO介绍

socket.io 服务器能否与非 socket.io 客户端通信

反应客户端:websocket.js:83 WebSocket 连接到 'ws://localhost:3009/socket.io/?EIO=4&transport=websocket' 失

Web Socket & Socket.io

Socket.IO与服务器多次连接

回退如何与 socket.io 一起工作?