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

时间:2018-01-03 10:26:15

标签: node.js express twitter socket.io stream

问题

使用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://109.73.175.183:3003

访问该站点

最初的一些上面的套接字错误,但是然后10-15秒才能开始正常工作

背景

几年前我为大学项目制作了这个Node应用程序。我保持更新。它使用Socket.io和Twitter API来传输实时推文,使用D3直观地计算情绪并显示结果。我使用NGINX进行端口转发。

供参考,这是我的git repo:https://github.com/Lissy93/twitter-sentiment-visualisation

最近我做了一个小的HTML / CSS更改,并更新了几个依赖项,就在这个奇怪的socket.io问题开始的时候

到目前为止我尝试了什么

  • 更改端口 - 没有区别
  • 我使用io.connect();没有参数连接
  • 在本地包含socket.io,而不是从CDN
  • 包含
  • 这可能与我的网站是非SSL有关吗
  • 在本地,它比API版本
  • 完全正常,更快,更少延迟

之前有没有人见过类似的问题? 任何建议,意见或答案将不胜感激 - 非常感谢提前。

1 个答案:

答案 0 :(得分:0)

找到了解决方案,实际上很简单!在这里发布答案,帮助其他人面对类似问题,因为我完全坚持了2天!

我的问题是由dependency update引起的。

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客户端#558)。

以下是完整的V2发行说明:https://github.com/socketio/socket.io/releases/tag/2.0.0

解决方案是使用HTTPS

根据文档制作您的应用https或签署您自己的请求。作为一个快速修复,我只是降级回socket.io V 1.7.0并且它完美地运行