【问题标题】:Not able to access Server-Sent-Events over Mobile 3g Network无法通过移动 3g 网络访问服务器发送事件
【发布时间】:2015-05-20 00:36:20
【问题描述】:

我遇到了服务器发送事件的问题。 我的端点在移动 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 实现的。

任何帮助将不胜感激。

【问题讨论】:

  • 顺便说一句,我在 Vodafone - 德里(印度)圈子里。

标签: nginx https proxy server-sent-events


【解决方案1】:

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

对于 SSE,有一些技巧可以解决此类代理问题:

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

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

  • 在消息之前或之后在 SSE cmets 中发送 4 到 16KB 的数据。一些代理的缓冲区大小有限,这将导致缓冲区溢出,从而将消息输出。

  • 使用 HTTPS。这绕过了所有 3rd 方代理。如果可以使用 HTTPS,这是最好的解决方案。

【讨论】:

  • 不幸的是,我不能在我的用例中使用 HTTPS。将尝试您的建议并尽快提供更新。谢谢。
  • 答案显然是正确的,我会接受它......但看起来我必须做一些解决方法。我实际上是在 nginx 后面使用来自 firebase.com 的 SSE .. 因此无法在服务器中进行这些修改(我没有 firebase)......但我想我会继续在我的自己的...感谢您的帮助...
  • 谢谢,我也遇到了这个问题:stackoverflow.com/questions/19817999/… 希望有一个基于标头的解决方案,但 SSE cmets 变通方法会很有趣。
猜你喜欢
  • 2015-02-14
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2017-04-19
  • 2013-02-14
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多