我正在尝试做一个真实的应用程序。我使用NodeJS作为服务器和Socket。IO来实现我的实时功能。
问题是我得到的错误为:
WebSocket connection to 'wss://localhost:1234/socket.io/?EIO=3&transport=websocket' failed: Invalid frame header
我尝试了很多方法,比如将https改为http,降低Socket.IO版本等,但都不起作用。请帮助我找出问题的原因,以便我可以确定应用程序中的错误。我不想使用其他COMET协议。
6条答案
按热度按时间rekjcdws1#
在服务器和客户端上使用相同版本的
socket.io
和socket.io-client
。vql8enpb2#
好吧,这是我的错误,只是我用www.example.com初始化服务器socket.io两次,这就导致了这个问题
fjnneemd3#
对我来说,答案是我连接的客户端是版本2,而服务器运行的是版本4。作为per the docs,我必须在服务器上启用
allowEIO3
ippsafx74#
更改套接字io使用它的独立服务器,它为我工作。最初将它添加到由express创建的服务器。此代码修复了问题。
nue99wik5#
我遇到的问题是,当使用create-react-app并使用“npm run start”运行它以获得实时刷新本地版本时,它默认使用带有
/ws
路径的WebSocket。这与我的应用程序也使用此路径冲突。因此,当您使用带有http-proxy-middleware的setupProxy.js
时,它将两者都转发到API服务器,这导致了无效的帧头。解决方案是在Web应用程序中将WebSocket路由更改为
/websocket
之类的其他路由,然后在setupProxy.js
中按如下方式设置:mfuanj7w6#
我目前在使用socket.io-client时遇到了同样的问题。我已经按照下面的说明解决了这个问题。
您可以尝试将opts.transports设置为仅在客户端中的WebSocket:
参考:https://github.com/socketio/socket.io-client/issues/1097#issuecomment-301301030