Ответ gRPC не отправляется клиенту внутри setTimeout при запуске в процессе визуализации в electron

#node.js #electron #grpc #grpc-node

#node.js #электрон #grpc #grpc-узел

Вопрос:

Я использую @grpc/grpc-js модуль и настроил образец сервера gRPC:

Когда я запускаю сервер gRPC в electron, если я отправляю ответ после «тайм-аута», ответ вообще не отправляется клиенту. Он не закрывает поток http2 должным образом. Тот же сервер отлично работает при запуске непосредственно в узле, но выдает эту проблему при запуске через electron.

Проблема не возникает, если я отправляю ответ непосредственно вне функции тайм-аута.

Пример минимального проекта, который демонстрирует проблему: https://github.com/nateshmbhat/grpc-with-electron-sample-project

Ожидаемое поведение

Когда сервер gRPC отправляет ответ с таймаутом или без него, ответ должен дойти до клиента, и связанные потоки должны закрыться должным образом.

Фактическое поведение

Хотя сервер отправляет ответ, ответ не доходит до клиента. Таким образом, соединение и поток не закрываются.

Я также подал вопросы для этого здесь:

https://github.com/electron/electron/issues/26838

https://github.com/grpc/grpc-node/issues/1645

Комментарии:

1. Я думаю, что timeout используется только для установки крайнего срока для открытия соединения. Прочитайте это github.com/carlessistare/grpc-promise

2. согласно doc , если я правильно понимаю, вы уже привязываете сервер в bindAsync , потому что результат будет асинхронным, так что в чем польза settimeout .