Поддерживает ли Cloud Run отправленные сервером события (SSE)? - PullRequest
1 голос
/ 08 апреля 2020

Мы не можем заставить SSE отправлять из контейнеров в Google Cloud Run. Я попытался разместить контейнер на простом примере SSE (https://github.com/kljensen/node-sse-example), чтобы увидеть, было ли это что-то в нашей библиотеке - нет.

Я вижу на сервере, что клиенты подключиться (как работает начальный GET), но никакие события не отправляются с сервера. Значение EventSource на клиенте никогда не меняется с CONNECTING на CONNECTED.

В документах Cloud Run немного сомнительно, если это будет поддерживаться (выделено мое):

Cloud Run (полностью управляемый) в настоящее время не поддерживает потоковую передачу HTTP. Поэтому входящие запросы с такими протоколами, как WebSockets и gRP C (потоковые RPC), не поддерживаются.

В качестве исключения службы Cloud Run (полностью управляемые) поддерживают унарный gRP C для входящих запросов.

Для исходящих запросов , и WebSockets, и gRP C поддерживаются в Cloud Run (полностью управляемые).

Не будет ли SSE считаться исходящими запросами, или я неправильно понимаю?

Ответы [ 4 ]

4 голосов
/ 09 апреля 2020

В настоящее время нет. Однако эта функция (gRP C на стороне сервера и SSE) будет запущена очень скоро. Мы работаем над этим активно, следите за обновлениями.

1 голос
/ 10 апреля 2020

Хорошо, текущий временный обходной путь переключается на Google App Engine Гибкий и отключает буферизацию ответов с помощью X-Accel-Buffering: no заголовка ответа.

0 голосов
/ 09 апреля 2020

На самом деле под исходящими запросами они подразумевают запросы, сделанные вашим контейнером в Cloud Run к какой-либо другой службе. Как уже упоминал Гийом, в настоящее время невозможно потоковую передачу ответов, и я думаю, это также связано с тем, что Cloud Run будет буферизовать каждый ответ.

Я сам ищу обходной путь и буду держать вас в курсе, если найду любое достойное решение ?

0 голосов
/ 09 апреля 2020

Если я ссылаюсь на дизайн Cloud Run, обработка контейнера выполняется только при обработке запроса, в остальное время процессор находится в режиме ожидания. Вот почему вам выставляется счет только при обработке запроса.

Если я принимаю поток SSE, сервер инициирует соединение с клиентом. Вам необходимо время обработки (и ресурсы) для установления и поддержания этой связи. А поскольку он не соответствует ни одному запросу, ваш процессор не используется и не может работать для этого.

Итак, у меня нет четкого ответа на вашу проблему с реализацией, но я уверен, что Cloud Run не может работать с SSE. По крайней мере, пока.

...