13

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

该系统在我的本地机器上运行良好,但是当我将它部署在 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 Web 套接字陷阱。

4

5 回答 5

9

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

您将收到来自 EC2 Web 套接字的响应

于 2014-12-18T07:33:23.507 回答
8

你用的是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

于 2012-10-15T07:38:34.797 回答
3

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

于 2017-12-21T06:43:22.443 回答
0

WebSocket 使用与 http 相同的端口。

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

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

你用的是什么版本?

于 2013-07-22T04:54:43.257 回答
-1

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

nc -z www.google.com 80

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

左侧网络和安全:选择安全组 -> 打开默认值 -> 入站。在那里您可以创建新规则。

于 2012-08-21T08:15:31.667 回答