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

我有这个networking应用程序与express和socket.io使用node.js编写,该应用程序在本地主机上运行良好,但是当我推到我的ec2服务器,它连接像20秒,然后断开连接,然后再次连接等…

给我在节点控制台上的错误

warn - websocket connection invalid info - transport end 

服务器

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

客户

 socket = io.connect() 

我知道问题不在我的代码中,因为我完全testing了本地主机上的Web应用程序,所以唯一的问题是这个代码在哪里运行,这是我的EC2实例?

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

可能有很多可能的原因,你可以得到这个错误:

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

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

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

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

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

如果你还没有使用socket.io heartbeats,请多加一点: 使用socketio心跳的优点/缺点