2

我按照此链接中的说明进行操作: 如何使 Amazon 的 ELB 与 HTTPS/SSL 一起使用 Web 套接字?设置 ELB 以使用 Websocket(在 TCP 模式下将 ELB 转发 443 到 8443)。现在我看到 wss 的这个问题:服务器发送 message1,客户端没有收到它;几秒钟后,服务器发送消息 2,客户端收到两条消息(两条消息大约 30 个字节)。我可以很容易地重现这个问题。如果我在服务器上使用 iptable 设置端口转发并让客户端直接连接到服务器(端口 443),我就没有问题 此外,这个问题似乎只发生在 wss 上。ws 工作正常。

服务器正在运行 jetty8。

我检查了 EC2 论坛并没有真正找到任何东西。我想知道是否有人见过同样的问题。

谢谢

4

2 回答 2

2

根据您的描述,这很可能是 ELB 的缓冲问题。快速研究表明这实际上是问题所在。

来自ELB 文档

当您对前端和后端连接都使用 TCP 时,您的负载均衡器会将请求转发到后端实例,而不修改标头。此配置也不会为会话粘性或 X-Forwarded-* 标头插入 cookie。

当您对前端和后端连接都使用 HTTP(第 7 层)时,负载均衡器会解析请求中的标头并终止连接,然后再将请求重新发送到已注册的实例。这是 Elastic Load Balancing 提供的默认配置。

来自AWS 论坛

我相信这是 HTTP/HTTPS 特定的,但不可配置,但不能说我确定。您可能想尝试在端口 80 上以纯 TCP 模式使用 ELB,我相信这只会将流量传递给客户端,反之亦然,无需缓冲。

您能否尝试进行更多测量并查看此延迟如何取决于消息大小?

现在,我不完全确定你已经做了什么,什么失败了,什么没有失败。然而,从文档和论坛帖子来看,该解决方案似乎对前端和后端都使用 TCP/SSL(第 4 层)ELB 类型。

于 2013-03-07T13:54:22.167 回答
0

这与“Nagle 算法”产生了共鸣...... TCP 堆栈可以配置为在通过网络发送请求之前捆绑请求以减少流量。这可以解释症状,但值得一试

于 2016-02-04T00:58:19.903 回答