Cloud 运行 是否支持服务器发送的事件 (SSE)?

Does Cloud Run support server sent events (SSE)?

我们无法让 SSE 从 Google 云 运行 上的容器发送。我试过用一个简单的 SSE 示例 (https://github.com/kljensen/node-sse-example) 托管一个容器,看看它是否在我们的库中——不。

我从服务器上看到客户端已连接(就像最初的 GET 一样),但没有从服务器发送任何事件。客户端上的 EventSource 永远不会从 CONNECTING 更改为 CONNECTED

来自 Cloud 运行 文档,是否支持它有点模棱两可(强调我的):

Cloud Run (fully managed) currently does not support HTTP streaming. Therefore, inbound requests with protocols like WebSockets and gRPC (streaming RPCs) are not supported.

As an exception, Cloud Run (fully managed) services support unary gRPC for inbound requests.

For outbound requests, both WebSockets and gRPC are supported on Cloud Run (fully managed).

SSE不会算作出站请求,还是我理解错了?

如果我参考Cloud运行的设计,只有在处理完一个请求的时候才会进行容器处理,其他时间CPU接近空闲。这就是为什么只有在处理请求时才向您收费的原因。

如果我走的是SSE流程,服务器向客户端发起连接。您需要处理时间(和资源)来建立和维护此连接。由于没有任何请求,您的 CPU 处于空闲状态,无法执行此操作。

因此,对于您的实施问题,我没有明确的答案,但是,根据设计,我很确定 Cloud 运行 无法与 SSE 一起使用。至少,现在。

实际上,出站请求是指您的容器在 Cloud 运行 其他一些服务上发出的请求。 正如 Guillaume 所提到的,目前无法流式传输响应,我想这也与 Cloud 运行 将缓冲每个响应这一事实有关。

我自己正在寻找解决方法,如果我找到任何合适的解决方案,我会及时通知您

更新(2020 年 10 月 8 日): 现在支持服务器流式传输 https://cloud.google.com/blog/products/serverless/cloud-run-now-supports-http-grpc-server-streaming

目前没有。但是,此功能(gRPC 服务器端流式传输和 SSE)将很快推出。我们正在积极努力中,敬请期待

好吧,当前的临时解决方法是切换到 Google App Engine Flexible 并使用 X-Accel-Buffering: no 响应 header 禁用响应缓冲。