Socket.io failed: WebSocket 在建立连接之前关闭

Ali*_*cia 8 twitter stream node.js express socket.io

问题

我使用 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.
Run Code Online (Sandbox Code Playgroud)

使用 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();没有参数来连接
  • 在本地包含 socket.io,而不是来自 CDN
  • 这可能与我的网站是非 SSL 有关系吗
  • 在本地它工作得很好,比 API 版本更快,延迟更少

有没有人见过类似的问题?任何建议、评论或答案将不胜感激 - 非常感谢。

Ali*_*cia 10

找到了解决方案,其实很简单!在这里发布答案,以帮助面临类似问题的其他人,因为我完全被困在这个问题上 2 天!

我的问题是由依赖项更新引起的。

Socket.io V 2.0.0 不向后兼容。

根据发行说明:

新的 (V 2.0.0) 主要版本带来了多项性能改进,但也隐藏在发行说明底部的是:

此版本不向后兼容,原因如下:

  • 与 engine.io-parser (socketio/engine.io-parser#81) 中的 utf-8 编码相关的重大更改
  • 使客户端上的套接字 id 与服务器端的 id 匹配的更新 (socketio/socket.io-client#1058)

请注意,如果您使用的是自签名证书,rejectUnauthorized 现在默认为 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 并且它运行良好