【问题标题】:Server Send Events on GAE: ¿is it possible?GAE 上的服务器发送事件:¿可能吗?
【发布时间】:2016-02-14 10:43:01
【问题描述】:

我想启用某种涉及 PHP(后端)和 JS(前端)的实时机制。 SSE 似乎是一个不错的方法,因为我不需要双向连接。

我面临的问题是 Google App Engine 正在缓冲 PHP 响应,破坏了 flush() 的使用,因此阻止了我构建 SSE 服务器。

有谁知道如何让 GAE 不缓冲响应?使用流媒体?套接字?一个被证明可以在 GAE 下工作的替代方案?我尝试过使用通道,但这带来了很大的挑战,因为我的应用程序完全基于 PHP 构建,而我唯一想要的就是添加一些实时通知功能。在同一个项目中同时存在两种语言也有其自身的复杂性。

我们将不胜感激任何答案、建议、意见或反馈。

【问题讨论】:

  • 查看 gcm 以获得免费替代品

标签: php google-app-engine websocket streaming


【解决方案1】:

编辑:

正如@Shrike 在评论中指出的那样,此答案中的信息已过时。使用新的运行时(python3、Java 11、PHP7),自动缩放的请求超时为 10 分钟,基本或手动缩放的请求超时为 24 小时(来源:app engine docs)。

即使这样也不可能使用服务器发送的事件

App Engine 不支持在处理请求时以增量块的形式将数据发送到客户端的流式响应。代码中的所有数据均按上述方式收集,并作为单个 HTTP 响应发送。

(来源:official google appengine docs

旧版答案(适用于 Java 8、PHP 5 和 Python 2):

服务器发送事件和 Web Sockets 等技术在设计上无法在 App Engine 上运行。 App Engine 中的所有前端请求都限制为 60 秒的运行时间,任务限制为 10 分钟。因此,即使您将与客户端的连接保持打开状态(例如服务器发送事件),它也会在 60 秒后关闭。如果您可以打开与任务的 Web 套接字连接(您不能),它将在十分钟后关闭。

替代方案是:

【讨论】:

  • 我已经测量了运行时超时(我已经将 GAE 带到了极限,以了解我可以做什么或不能做什么),到目前为止,我有 60 秒,而不是 30 秒。尽管如此,您的意见非常有见地:我没有尝试过云消息传递或虚拟机。我想我会试试GCM。谢谢!
  • 你说得对。请求期限为 60 秒。我会在我的回答中更正它,感谢您指出。
  • 这不再正确。自动扩展的请求超时 - 10 分钟,基本和手动 - 24 小时,请参阅cloud.google.com/appengine/docs/standard/nodejs/…
  • @Shrike 谢谢。我根据新规范更新了答案。
  • @konqi 很酷,不幸的是,SSE 仍然无法在 GAE 标准上运行(仅在灵活上)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
  • 2015-09-24
  • 2015-06-16
  • 2013-08-20
相关资源
最近更新 更多