问题
我使用 Socket.io 的 Twitter 流媒体应用程序在访问具有 IP 地址和端口的站点时工作正常,但在使用域名访问站点时,实时流媒体会引发错误。 🤔
尝试下面的链接,并打开开发人员工具,查看错误
使用域名 ( http://sentiment-sweep.com ) 访问站点
遵循此格式的数百个套接字错误:
WebSocket connection to
'ws://sentiment-sweep.com/socket.io/?EIO=3&transport=websocket&sid=guBmeCqsOr22CTsWAAC0'
failed: WebSocket is closed before the connection is established.
使用 IP 和端口访问站点 ( http://XXX.XX.XXX.XX:3003 )
最初有一些上述套接字错误,但 10-15 秒后应用程序开始正常工作
背景
几年前,我为一个大学项目制作了这个 Node 应用程序。我保持更新。它使用 Socket.io 和 Twitter API 来流式传输实时推文、计算情绪并使用 D3 直观地显示结果。我使用 NGINX 进行端口转发。
作为引用,这是我的 git 仓库:https://github.com/Lissy93/twitter-sentiment-visualisation
最近我做了一个小的 HTML/CSS 更改,并更新了几个依赖项,这就是这个奇怪的 socket.io 问题开始的时候
到目前为止我尝试过的
io.connect();
没有连接参数 有没有人见过类似的问题?
任何建议、评论或答案将不胜感激 - 非常感谢。
最佳答案
找到了解决方案,其实很简单!在这里发布答案,以帮助面临类似问题的其他人,因为我完全被困在这个问题上 2 天!
我的问题是由 dependency update 引起的.
Socket.io V 2.0.0 不向后兼容。
根据发行说明:
新的 (V 2.0.0) 主要版本带来了多项性能改进,但也隐藏在发行说明底部的是:
This release is not backward-compatible, due to:
- A breaking change related to utf-8 encoding in engine.io-parser (socketio/engine.io-parser#81)
- an update to make the socket id on the client match the id on the server-side (socketio/socket.io-client#1058)
Please note that if you are using a self-signed certificate, rejectUnauthorized now defaults to true (socketio/engine.io-client#558).
这是完整的 V2 发行说明:https://github.com/socketio/socket.io/releases/tag/2.0.0
解决方案是使用HTTPS
根据文档,将您的应用程序设为 https,或签署您自己的请求。不过,作为一个快速修复,我只是降级回 socket.io V 1.7.0 并且它完美运行😏
关于node.js - Socket.io 失败 : WebSocket is closed before the connection is established,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48075509/