GAE 上的服务器发送事件:这可能吗?
Server Send Events on GAE: ¿is it possible?
我想启用某种涉及 PHP(后端)和 JS(前端)的实时机制。 SSE 似乎是一种不错的方法,因为我不需要双向连接。
我面临的问题是 Google App Engine 正在缓冲 PHP 响应,破坏了 flush() 的使用,因此阻止我构建 SSE 服务器。
有谁知道如何让 GAE 不缓冲响应?使用流媒体?套接字?被证明可以在 GAE 下工作的替代方案?我尝试过使用通道,但这带来了巨大的挑战,因为我的应用程序完全基于 PHP 构建,我唯一想要的是添加一些实时通知功能。在同一个项目中共存两种语言也有其自身的复杂性。
任何回答、建议、输入或反馈将不胜感激。
编辑:
正如@Shrike 在评论中指出的那样,此答案中的信息已过时。使用新的运行时(python3、Java 11、PHP7),自动缩放时请求超时为 10 分钟,基本或手动缩放时请求超时为 24 小时(来源:app engine docs ).
即便如此,也无法使用服务器发送的事件
App Engine does not support streaming responses where data is sent in incremental chunks to the client while a request is being processed. All data from your code is collected as described above and sent as a single HTTP response.
(来源:official google appengine docs)
旧版答案(对于 Java 8、PHP 5 和 Python 2):
Server Sent Events 和 Web Sockets 等技术在设计上无法在 App Engine 上运行。 App Engine 中的所有前端请求的运行时间限制为 60 秒,任务限制为 10 分钟。因此,即使您将与客户端的连接保持打开状态(如服务器发送事件),它也会在 60 秒后关闭。如果你可以打开一个任务的网络套接字连接(你不能),它会在十分钟后关闭。
备选方案是:
- 您自己指出的 Channel API。然而频道 API 似乎与 PHP.
整合得不好
- 正如 Zig Mandel 指出的那样 google cloud messaging
- 切换到 Managed VMs
我想启用某种涉及 PHP(后端)和 JS(前端)的实时机制。 SSE 似乎是一种不错的方法,因为我不需要双向连接。
我面临的问题是 Google App Engine 正在缓冲 PHP 响应,破坏了 flush() 的使用,因此阻止我构建 SSE 服务器。
有谁知道如何让 GAE 不缓冲响应?使用流媒体?套接字?被证明可以在 GAE 下工作的替代方案?我尝试过使用通道,但这带来了巨大的挑战,因为我的应用程序完全基于 PHP 构建,我唯一想要的是添加一些实时通知功能。在同一个项目中共存两种语言也有其自身的复杂性。
任何回答、建议、输入或反馈将不胜感激。
编辑:
正如@Shrike 在评论中指出的那样,此答案中的信息已过时。使用新的运行时(python3、Java 11、PHP7),自动缩放时请求超时为 10 分钟,基本或手动缩放时请求超时为 24 小时(来源:app engine docs ).
即便如此,也无法使用服务器发送的事件
App Engine does not support streaming responses where data is sent in incremental chunks to the client while a request is being processed. All data from your code is collected as described above and sent as a single HTTP response.
(来源:official google appengine docs)
旧版答案(对于 Java 8、PHP 5 和 Python 2):
Server Sent Events 和 Web Sockets 等技术在设计上无法在 App Engine 上运行。 App Engine 中的所有前端请求的运行时间限制为 60 秒,任务限制为 10 分钟。因此,即使您将与客户端的连接保持打开状态(如服务器发送事件),它也会在 60 秒后关闭。如果你可以打开一个任务的网络套接字连接(你不能),它会在十分钟后关闭。
备选方案是:
- 您自己指出的 Channel API。然而频道 API 似乎与 PHP. 整合得不好
- 正如 Zig Mandel 指出的那样 google cloud messaging
- 切换到 Managed VMs