服务器发送的事件未在 Google App Engine 上发送,但在本地运行良好。如何从服务器发送多条消息?
Server Sent Events not being sent on Google App Engine but work fine locally. How to send multiple messages from sever?
目标
我需要我的后端向我的客户推送几个答案,我需要人偶来 运行 backend-side。
Puppeteer 需要一些时间来工作,但有定期的中间结果,应该定期向客户端发送更新(总共,一个 request-responses-cycle 需要不到 60 秒,这似乎是 GAE 的上限)。
潜在的 GAE 问题:
- Websockets 不适用于标准环境。
- Puppeteer does not work with the flex environment.
主要问题
因此,我 re-implemented 我的代码使用服务器发送的事件(基于 http)。我希望它能按标准工作。它在本地运行良好。它不适用于生产。
它最终会回答客户端,但只有当我关闭连接服务器端然后一次性发送所有内容时。它不会定期更新客户端。
这只发生在 GAE 上,而不是本地。
我尝试了什么?
我确实刷新了sse-response,否则压缩nodejs库leads to a similar behaviour
我也设置了这些 headers,尤其是。 X-Accel-Buffering,摘自 :
res.setHeader('Access-Control-Allow-Origin', "*");
res.setHeader("X-Accel-Buffering", "no");
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader('Connection', 'keep-alive');
问题
如何使服务器发送的事件与 GAE 上的 nodejs 和 puppeteer 一起工作? 或者,是否有人找到任何回答方式(flex 或标准或任何其他方式) GAE 中的方式)一个 client-request(无论是 http get、sse、websockets)随着时间的推移有几个服务器响应并且有 puppeteer 运行ning?这个 google-groups 聊天既表明 SSE 有效又使用 Pusher。 Pusher 是具有 angular 客户端的 GAE 和 nodejs 的替代品吗?如果我经历了用 docker 图像做 GAE-flex 的“痛苦”(对我来说,我是 low-experience full-stack 开发人员,也不想做操作),那行得通吗?有没有我可以更改的设置,而不是“缓冲”响应服务器端?
您的本地 GAE [标准] 环境不是 GAE 生产的精确复制或模拟。如果您使用的是 GAE Python2 标准,则尤其如此。你应该记住这一点。我知道这一点是因为我也遇到过服务器发送事件的这个问题。这意味着在开发环境中工作的东西可能在生产环境中不起作用,所以首先要非常小心地确认 GAE 文档中的工作和不工作。
GAE 标准不支持 SSE 本质上的流式传输。此外,App Engine 标准对每个请求都有 1 分钟的截止日期,即作为标准应用程序的一部分对 App Engine 的每次调用都必须 return 在一分钟内
我认为 GAE Flexible 没有这些限制,因此您应该尝试一下。请参阅此 link,其中讨论了标准和灵活之间的差异。当我几年前遇到这个问题时(尝试在 Python 上进行 SSE),我最终切换到 Compute Engine 并进行了 PubSub 但还有其他原因选择了这条路线而不是尝试 GAE Flexible
目标
我需要我的后端向我的客户推送几个答案,我需要人偶来 运行 backend-side。 Puppeteer 需要一些时间来工作,但有定期的中间结果,应该定期向客户端发送更新(总共,一个 request-responses-cycle 需要不到 60 秒,这似乎是 GAE 的上限)。
潜在的 GAE 问题:- Websockets 不适用于标准环境。
- Puppeteer does not work with the flex environment.
主要问题
因此,我 re-implemented 我的代码使用服务器发送的事件(基于 http)。我希望它能按标准工作。它在本地运行良好。它不适用于生产。 它最终会回答客户端,但只有当我关闭连接服务器端然后一次性发送所有内容时。它不会定期更新客户端。 这只发生在 GAE 上,而不是本地。
我尝试了什么?
我确实刷新了sse-response,否则压缩nodejs库leads to a similar behaviour
我也设置了这些 headers,尤其是。 X-Accel-Buffering,摘自
res.setHeader('Access-Control-Allow-Origin', "*");
res.setHeader("X-Accel-Buffering", "no");
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader('Connection', 'keep-alive');
问题
如何使服务器发送的事件与 GAE 上的 nodejs 和 puppeteer 一起工作? 或者,是否有人找到任何回答方式(flex 或标准或任何其他方式) GAE 中的方式)一个 client-request(无论是 http get、sse、websockets)随着时间的推移有几个服务器响应并且有 puppeteer 运行ning?这个 google-groups 聊天既表明 SSE 有效又使用 Pusher。 Pusher 是具有 angular 客户端的 GAE 和 nodejs 的替代品吗?如果我经历了用 docker 图像做 GAE-flex 的“痛苦”(对我来说,我是 low-experience full-stack 开发人员,也不想做操作),那行得通吗?有没有我可以更改的设置,而不是“缓冲”响应服务器端?
您的本地 GAE [标准] 环境不是 GAE 生产的精确复制或模拟。如果您使用的是 GAE Python2 标准,则尤其如此。你应该记住这一点。我知道这一点是因为我也遇到过服务器发送事件的这个问题。这意味着在开发环境中工作的东西可能在生产环境中不起作用,所以首先要非常小心地确认 GAE 文档中的工作和不工作。
GAE 标准不支持 SSE 本质上的流式传输。此外,App Engine 标准对每个请求都有 1 分钟的截止日期,即作为标准应用程序的一部分对 App Engine 的每次调用都必须 return 在一分钟内
我认为 GAE Flexible 没有这些限制,因此您应该尝试一下。请参阅此 link,其中讨论了标准和灵活之间的差异。当我几年前遇到这个问题时(尝试在 Python 上进行 SSE),我最终切换到 Compute Engine 并进行了 PubSub 但还有其他原因选择了这条路线而不是尝试 GAE Flexible