【问题标题】:Socket.io failed: WebSocket is closed before the connection is establishedSocket.io 失败:在建立连接之前关闭 WebSocket
【发布时间】:2018-06-13 00:25:04
【问题描述】:

问题

我使用 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 repo:https://github.com/Lissy93/twitter-sentiment-visualisation

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

到目前为止我已经尝试过什么

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

以前有没有人遇到过类似的问题? 任何建议、cmets 或答案将不胜感激 - 非常感谢提前。

【问题讨论】:

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


    【解决方案1】:

    找到了解决办法,其实很简单!在这里发布答案,以帮助其他面临类似问题的人,因为我完全坚持了 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-client#558)。

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

    解决办法是使用HTTPS

    根据文档,将您的应用设为 https,或签署您自己的请求。不过,作为一个快速修复,我刚刚降级到 socket.io V 1.7.0,它运行良好?

    【讨论】:

    • 我有 https,我想映射到主机(域exampledomain.com:3000) var io = require('socket.io')(3000);如何在其中添加主机并映射到域?你是如何解决这个问题的。帮助将不胜感激。谢谢!
    • @ManjunathBilwar - 您可以创建一个 http 服务器来侦听特定域和端口,然后将其传递给您的函数。这将起作用:const domain = "localhost";const port = 8080;const io = require('socket.io');const server = http.createServer();server.listen(port, domain);const socket = io.listen(server);(cmets 中的代码 sn-ps 显示效果不佳),但希望对您有所帮助:)
    猜你喜欢
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 2021-05-29
    • 2020-02-03
    • 1970-01-01
    • 2020-04-07
    相关资源
    最近更新 更多