【问题标题】:getting "websocket connection invalid" error using socket.io on an ec2 instance?在 ec2 实例上使用 socket.io 得到“websocket 连接无效”错误?
【发布时间】:2013-04-18 23:28:32
【问题描述】:

我使用 node.js 使用 express 和 socket.io 编写了这个 Web 应用程序,该应用程序在 localhost 上运行良好,但是当我推送到我的 ec2 服务器时,它连接了大约 20 秒然后断开连接,然后再次连接等...

在节点控制台上给我错误

warn  - websocket connection invalid
info  - transport end

服务器

app = express()
server = http.createServer(app)
io = require('socket.io').listen(server)

客户

socket = io.connect()

我知道问题不在于我的代码,因为我在 localhost 上全面测试了 Web 应用程序,所以唯一的问题是这段代码在哪里运行,即我的 ec2 实例?

【问题讨论】:

  • 您是直接连接到实例还是通过 ELB 连接到实例?
  • 我直接连接到实例?
  • 谁能回答这个问题,真的很烦我!
  • 您的问题没有提供足够的细节。请发布相关的服务器代码。部署在 ec2 上时,您的代码可能会中断。
  • 应用程序能否在这 20 秒内进行通信(来回发送消息)?如果不是,这可能是一个简单的防火墙问题。或者可能 socket.io 已经进入轮询模式,因为你前面有一个非 websocket 网络服务器。

标签: javascript node.js sockets websocket socket.io


【解决方案1】:

确保您在您的 ec2 上使用最新版本的 node、express 和 socket.io。此外,请提供有关本地计算机和 ec2 实例上当前使用的版本的一些数据。

【讨论】:

    【解决方案2】:

    在本地计算机上运行,​​您不必处理网络延迟、NAT 问题或防火墙。在 EC2 上运行,您拥有所有这些。

    Web Sockets 相对较新且不稳定。因此,首先要确保您运行的是最新版本(并让我们知道它们是什么)。可能安装在本地机器上的 socket.io 版本与安装在 EC2 服务器上的版本不同。

    【讨论】:

      【解决方案3】:

      出现此错误的原因可能有很多:

      1. 您正在使用部分支持或不支持 websockets 的浏览器。您可以检查您的浏览器是否支持 websockets here
      2. 使用不支持 websocket 的代理。如果您的客户端和节点服务器之间存在不支持 websocket 的服务器(负载均衡器)。
      3. 您使用的是 socket.io 版本 0.9.1/0.9.1-1。 此行为是针对此版本报告的 bug。所以升级到最新的 socket.io 版本,即 0.9.14。
      4. 浏览器连接被防火墙/阻止。
      5. 代码相关问题。

      【讨论】:

        【解决方案4】:

        如果在失去连接之前的 20 秒内没有任何活动,则一种可能是 keep-alive 设置得太低。

        请参阅https://groups.google.com/forum/?fromgroups=#!topic/socket_io/RUv70BguZ-U 了解类似问题。解决方案是使用心跳来保持连接打开。

        如果您还没有使用 socket.io 心跳,请进一步了解它们: Advantage/disadvantage of using socketio heartbeats

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-06-26
          • 2013-08-22
          • 1970-01-01
          • 2018-10-20
          • 2018-05-01
          • 2023-01-24
          • 2019-03-21
          • 1970-01-01
          相关资源
          最近更新 更多