亚马逊ec2上的Websockets连接失败



我有一个netty服务器,它通过websocket运行实时通知系统的氛围框架。

该系统在我的本地机器上运行得很好,但当我在EC2上部署它时,它似乎不起作用。不过,我可以远程登录到远程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网络套接字。

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

您将从EC2 web套接字得到响应

您正在使用ELB吗?如果是,您需要切换到TPC而不是HTTP,因为HTTP层不支持websocket。当运行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-inhttps://web.archive.org/web/20160328183724/http://johan.heapsource.com/post/31047804966/the-websockets ssl和粘性会话的状态

@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')

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

WebSocket使用与http相同的端口。

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

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

您使用的是什么版本?

这里是2023年的家伙@阿比拉曼的回答帮助了我。

其次,wscat是一个调试websocket连接的优秀工具。

我的情况:

  • 启用websocket的AWS Ec2服务器
  • 正在尝试从DEV LAPTOP应用程序连接到它-不工作(ECONNREFUSED错误)
  • 尝试使用wscat -c ws://ADDRESS:PORT从SERVER命令行本身进行连接
    • Public IP address失败
    • Private address失败
    • localhost127.0.0.1正在传递(在服务器上)

在阅读了Abirahman的回答后,我尝试在我的private IP上停止并重新启动websocket服务——它成功了!

现在的问题是-我很确定这个设置(127.0.0.1上的ws)在突然停止工作之前是工作的。。这是AWS的怪癖吗?这是一个可能再次破裂的脆弱解决方案吗?请在评论中分享任何经验-谢谢。

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

nc -z www.google.com 80

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

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

最新更新