问题 亚马逊ec2上的Websockets连接失败


我有一个运行大气框架的netty服务器,用于通过websockets实时通知系统。

该系统在我的本地机器上运行完美,但是当我在EC2上部署它时,它似乎无法正常工作。我可以telnet到远程Netty服务器。可以访问服务器并在EC2上打开端口

Firefox抛出以下错误

Using URL: ws://beta.myapp.com:2880/myhandle?id=1&name=Chinese_food_rule_2&    X-Atmosphere-tracking-id=35490c47-59d6-abf6-36fa-431aa340d90a&X-Atmosphere-Framework=0.9&X-Atmosphere-Transport=websocket&X-Cache-Date=0&Content-Type=application/json

Websocket error, reason: undefined

Firefox can't establish a connection to the server at ws://beta.myapp.com:2880/myhandle?id=1&name=Chinese_food_rule_2&X-Atmosphere-tracking-id=35490c47-59d6-abf6-36fa-431aa340d90a&X-Atmosphere-Framework=0.9&X-Atmosphere-Transport=websocket&X-Cache-Date=0&Content-Type=application/json.

Websocket closed, reason: Connection was closed abnormally (that is, with no close frame being sent).

服务器甚至没有得到请求,这让我认为这是一些我不知道的EC2网络套接字问题。


7381
2017-08-06 10:33


起源

您是否设置了防火墙以便2880打开? - Veebs


答案:


你在使用ELB吗?如果是,则需要切换到TPC而不是HTTP,因为HTTP层不支持websockets。在运行TCP时,您将失去粘性和检索客户端IP的可能性,但Websockets将一直工作。 =)

有关EC2 / ELB / Websockets的更多信息:
http://johan.firebase.co/post/31047804966/the-state-of-websockets-ssl-and-sticky-sessions-in
http://johan.heapsource.com/post/31047804966/the-state-of-websockets-ssl-and-sticky-sessions-in https://web.archive.org/web/20160328183724/http://johan.heapsource.com/post/31047804966/the-state-of-websockets-ssl-and-sticky-sessions


6
2017-10-15 07:38



johan.heapsource.com/post/31047804966/... - bendytree
所有链接现在已经死了:( - Ron
整个域似乎离线,但这里是一个返回链接: web.archive.org/web/20160328183724/http://johan.heapsource.com/...  这个信息已经过时了,所以我不知道它会有多大帮助。 - moodh


我在php中遇到了同样的问题。 解决方案是:使用您的创建websocket private ip EC2的地址。并使用您的EC2公共IP地址或带有Web套接字端口的URL连接该websocket

您将收到来自EC2网络套接字的回复


5
2017-12-18 07:33



怎么办呢?我正在使用Python + Tornado。它适用于本地机器,但不适用于EC2 Ubuntu。 - lonelyloner
谢谢@ABIRAMAN。适用于EC2使用中的websocket连接 Public IP 而不是私人 - Amit Thawait


使用nc(命令行linux / OSX),您可以轻松检查端口是否已启动并正在运行。

nc -z www.google.com 80

如果没有,请检查您的安全组。登录EC2:

在NETWORK&SECURITY下面: 选择安全组 - >打开默认 - >入站。在那里你可以创建新规则。


0
2017-08-21 08:15





WebSocket使用与http相同的端口。

但是,低于4.0的Netty Server版本不支持较新版本的WebSocket。

http://netty.io/news/2011/11/17/websockets.html

你用的是什么版本?


0
2017-07-22 04:54





@ABIRAMAN让我最亲近。

我一直用localhost连接到websocket(HapiJS / NES),如下所示:

const client = new Nes.Client('ws://localhost:3000')

更改为公共AWS IP,如下所示:

const client = new Nes.Client('ws://5.5.5.5:3000')

请注意,我还在Amazon的EC2控制面板中允许在127.0.0.1和0.0.0.0/0上使用3000。另外,5.5.5.5不是亚马逊给我的IP;)


0
2017-12-21 06:43