Amazon EC2上的Websockets连接失败

lawou6xi  于 2023-04-12  发布在  其他
关注(0)|答案(6)|浏览(195)

我有一个运行atmosphere框架的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的Web套接字的陷阱,我不知道。

qfe3c7zg

qfe3c7zg1#

我在php中遇到了同样的问题。解决方案是:使用您的EC2的private ip地址创建Web Socket。并使用您的EC2公共ip地址或url与web socket端口连接该websocket
您将从EC2 Web Socket获得响应

h7wcgrx3

h7wcgrx32#

您是否使用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-inhttps://web.archive.org/web/20160328183724/http://johan.heapsource.com/post/31047804966/the-state-of-websockets-ssl-and-sticky-sessions

ttp71kqs

ttp71kqs3#

@ABIRAMAN让我最接近。
我一直在用localhost连接WebSocket(HapiJS/内斯),如下所示:
const client = new Nes.Client('ws://localhost:3000')
更改为公共AWS IP,如下所示,它工作:
const client = new Nes.Client('ws://5.5.5.5:3000')
请注意,我还允许在127.0.0.10.0.0.0/0Amazon的EC2控制面板中的www.example.com和5.5.5.5。)

9lowa7mx

9lowa7mx4#

WebSocket使用与http相同的端口。
但是,低于4.0的Netty Server版本不支持较新版本的WebSocket。
http://netty.io/news/2011/11/17/websockets.html
您使用的是什么版本?

soat7uwm

soat7uwm5#

来自2023年的家伙,@abiraman的回答帮助了我。
其次,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的怪癖吗?这是一个可能再次崩溃的脆弱解决方案吗?请在评论中分享任何经验-谢谢。

j13ufse2

j13ufse26#

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

nc -z www.google.com 80

如果没有,请检查您的安全组。登录EC2:
网络与安全:选择安全组-〉打开默认值-〉入站。在那里您可以创建新规则。

相关问题