无法通过Mobile 3g网络访问Server-Sent-Events

时间:2015-05-20 00:36:21

标签: nginx https proxy server-sent-events

我遇到Server Sent事件的问题。 移动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

这可以在我的家庭/办公室宽带网络上使用。仅在我的移动3G网络上产生问题。 有什么想法可能会发生什么?

我读到移动网络使用可能导致此问题的破碎的透明代理。但这是通过HTTP。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

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

使用SSE可以解决这些代理问题:

  • 发送消息后关闭服务器上的连接。代理将观察“文件”的结尾并转发他们已缓冲的所有消息。

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

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

  • 使用HTTPS。这会绕过所有第三方代理。如果您可以使用HTTPS,这是最佳解决方案。