在ec2实例上使用socket.io获取“websocket连接无效”错误?

时间:2013-04-25 07:09:16

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

我有使用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 个答案:

答案 0 :(得分:4)

可能有很多可能的原因导致此错误:

  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. 与代码相关的问题。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

在本地计算机上运行时,您无需处理网络延迟,NAT问题或防火墙。在EC2上运行你就拥有了所有这些。

Web套接字相对较新且不稳定。首先,请确保您运行的是最新版本(并让我们知道它们是什么)。也许本地计算机上安装的socket.io版本与EC2服务器中安装的版本不同。

答案 3 :(得分:1)

如果在失去连接之前的20秒内没有活动,则有一种可能性是保持活动设置得太低。

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

如果你还没有使用它们,请更多关于socket.io心跳: Advantage/disadvantage of using socketio heartbeats