6

我有这个使用 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 实例?

4

4 回答 4

4

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

  1. 您正在使用部分支持或不支持 websockets 的浏览器。您可以在此处检查您的浏览器是否支持 websockets 。
  2. 使用不支持 websocket 的代理。如果您的客户端和您的节点服务器之间有一些不支持 websocket 的服务器(负载均衡器)。
  3. 您使用的是 socket.io 版本 0.9.1/0.9.1-1。此行为是此版本报告的错误。所以升级到最新的 socket.io 版本是 0.9.14。
  4. 浏览器连接被防火墙/阻止。
  5. 代码相关问题。
于 2013-04-29T04:45:47.193 回答
2

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

于 2013-04-28T18:11:21.423 回答
1

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

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

于 2013-04-29T00:15:12.553 回答
1

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

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

如果您还没有使用 socket.io heartbeats,请进一步了解它们: 使用 socketio heartbeats 的优点/缺点

于 2013-04-29T17:12:32.037 回答