获取“websocket连接无效”;使用套接字出错.ec2实例上的IO

getting "websocket connection invalid" error using socket.io on an ec2 instance?

本文关键字:ec2 出错 套接字 实例 IO websocket 连接 无效 获取      更新时间:2023-09-26

我用express和socket编写了这个web应用程序。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()

我知道问题不是我的代码,因为我在本地主机上完全测试了web应用程序,所以唯一的问题是这段代码在哪里运行,这是我的ec2实例?

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

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

确保您使用的是最新版本的node、express和socket。IO在你的ec2上。另外,提供一些关于本地机器和ec2实例上当前使用的版本的数据。

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

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

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

https://groups.google.com/forum/?fromgroups=见!topic/socket_io/RUv70BguZ-U类似的问题。解决方案是使用heartbeat来保持连接打开。

关于套接字的更多内容。IO心跳,如果你还没有使用它们:使用socket的优点/缺点