无法通过移动 3g 网络访问服务器发送的事件

Not able to access Server-Sent-Events over Mobile 3g Network

我遇到服务器发送事件的问题。 我的端点在移动 3G 网络上不可用。

我观察到的一个 https 端点如下所示,可在我的移动网络上使用。

https://s-dal5-nss-32.firebaseio.com/s1.json?ns=iot-switch&sse=true

但是当代理使用 nginx 传递并通过 http(没有 ssl)访问时,相同的端点在我的移动网络上不可用。

http://aws.arpit.me/live/s1.json?ns=iot-switch&sse=true

虽然我的 home/office 宽带网络可以使用它。只会在我的移动 3g 网络上造成问题。 有什么想法吗?

我了解到移动网络使用损坏的透明代理可能会导致此问题。但这是通过 HTTP 实现的。

如有任何帮助,我们将不胜感激。

我怀疑移动网络强制使用 HTTP 代理,该代理在将文件转发到浏览器之前尝试缓冲文件。缓冲将使 SSE 消息在缓冲区中等待。

使用 SSE 有一些技巧可以绕过此类代理:

  • 发送消息后关闭服务器上的连接。代理将观察 "file" 的结尾并转发它们缓冲的所有消息。

    这相当于长轮询,因此不是最佳选择。为避免降低所有客户端的性能,您只能在检测到有必要时才这样做,例如当客户端连接时,总是发送欢迎消息。客户端应该期待该消息,如果消息没有及时到达,请通过 AJAX 请求向服务器报告问题。

  • 在消息前后的 SSE 评论中发送 4 到 16KB 的数据。一些代理有有限大小的缓冲区,这将溢出缓冲区强制消息。

  • 使用 HTTPS。这会绕过所有第 3 方代理。如果能使用HTTPS是最好的解决方案。