为什么HTML WebSocket访问Socket.IO web套接字服务器失败



作为套接字。io说,它支持WebSocket,所以,我使用HTML5标准的web socket api来访问socket。但是我总是得到以下错误:

WebSocket连接到'ws://localhost:8080/'失败:连接失败在收到握手响应前关闭

然后,我尝试使用socket。IO客户端在js中访问套接字。IO服务器,它的工作原理,并通过chrome网络监控,我发现它正确使用web套接字协议。

有人尝试过W3C Websocket api访问socket吗?IO服务器和遇到类似的问题?或者对我的问题有什么想法或线索吗?欣赏!

测试代码在这里:https://github.com/piginzoo/socketiotest

注意:插座。IO不是WebSocket实现。尽管插座。在可能的情况下,IO确实使用WebSocket作为传输,它为每个数据包添加一些元数据:数据包类型、名称空间和需要消息确认时的ack id。这就是WebSocket客户端不能成功连接到Socket的原因。IO服务器和套接字。IO客户端将无法连接到WebSocket服务器(如ws://echo.websocket.org)。
我在socketio github问题中发现了这一点:
插座。IO不是WebSocket服务器。https://github.com/socketio/socket.io/issues/3022

您得到的错误消息是因为您使用了错误的url。错误信息"Connection closed before received a handshake response"实际上告诉你这个(未收到响应)

应该是'ws://localhost:8080/socket.io/?EIO=3&transport=websocket'点击这里https://socket.io/docs/client-api/#With-custom-path &https://socket.io/docs/internals/查看详细信息

"EIO=3"               # the current version of the Engine.IO protocol

BUT就像其他答案所说的那样,实际上这就是socket。IO自述说

虽然插座。在可能的情况下,IO确实使用WebSocket作为传输,它为每个数据包添加一些元数据:数据包类型、名称空间和需要消息确认时的ack id。这就是WebSocket客户端不能成功连接到Socket的原因。IO服务器和套接字。IO客户端无法连接到WebSocket服务器。

我已经测试了这两个ws &浏览器原生Websocket不能不连接到Socket。IO服务器。它们都立即与Socket断开连接。IO服务器连接后,使用Socket。IO服务器发送错误消息socket id xxx has disconnected with reason parse error

ws作者在这里也提到https://github.com/websockets/ws/issues/1390

使用普通WebSocket与Socket通信。IO服务器无法无缝工作。

如果你想使用浏览器自带的Websocket,你可以使用ws can server.

我们遇到了完全相同的问题。以ws websockets结束。也许有更好的办法

相关内容

  • 没有找到相关文章

最新更新