node.js - Socket.io 失败 : WebSocket is closed before the connection is established

标签 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://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 版本更快,延迟更少

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

    最佳答案

    找到了解决方案,其实很简单!在这里发布答案,以帮助面临类似问题的其他人,因为我完全被困在这个问题上 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/

    相关文章:

    node.js - Express session 和 PassportJS 之间的区别

    python - tweepy:找到转推的原作者

    ios - 如何将 AFIncrementalStore 映射到 Twitter API v1.1?

    javascript - 获取 Node js中唯一日期的unix时间戳

    node.js - mongoose populate() 方法有什么相反的吗? ( Mongoose ,node.js, express )

    node.js - 在 ReactJS 上处理 Google 回调响应

    java - 我怎样才能不间断地运行 Spark 流

    node.js - 如何指定 knex 迁移和锁定文件的自定义架构?

    javascript - Express 不断获取 request.body 作为未定义的 JSON 对象

    node.js - 端口转发无法设置本地 Web 服务器