Сокет gRPC закрыт сторонним сервером

Я пытаюсь связать свой код Erlang и код Go с gRPC, во время которого я обнаружил, что, если я подключаюсь к gRPC слишком много раз одновременно, мой сокет будет закрыт сервером Go, что еще больше остановит мой клиент Erlang (gen_server) . Мне не было предоставлено никакой информации об ошибке, только простой код в Erlang, показывающий, что http2_client socket closed by peer #Port<some port info>.

Я уверен, что предел количества одновременных потоков, разрешенный gRPC, не достигнут (поскольку мой журнал отладки не показал, что мы достигли этого места), и после внимательного просмотра я обнаружил, что проблема возникла в google.golang.org \ grpc \ server.go serveStreams (line 830), и мои журналы показали, что все потоки успешно достиг var wg sync.WaitGroup, но не смог закончить оставшиеся части, чтобы вернуться к defer st.Close().

Может ли кто-нибудь помочь мне с этой странной ошибкой или, по крайней мере, дать мне несколько советов, в которых я должен разобраться?


person Chien    schedule 01.09.2020    source источник
comment
Вы про эту функцию говорите? github.com/grpc/grpc-go/blob/master/ server.go # L838 На первый взгляд мне кажется, что Go не закрывает поток - если ваша информация верна, он не возвращается на st.Close()   -  person TehSphinX    schedule 01.09.2020
comment
Очень жаль, что не предоставил исходный код, это очень глупая ошибка. Я застрял в этом примерно два дня, и на мой взгляд ... так ... В любом случае, я обновил вопрос. @TehSphinX   -  person Chien    schedule 01.09.2020


Ответы (1)


Мне удалось решить эту проблему сейчас, и, таким образом, я пришел к ответу на нее.

Оказалось, что я использовал другую систему журналов для отладки, поэтому сообщения об ошибках Golang по умолчанию не собираются и не предоставляются мне ... Golang продолжает кричать и кричать на меня, но я сижу в другой комнате и не слышу этого.

Что касается проблемы с сокетом, это связано с тем, что все соединение закрыто из-за отсутствия поддержки длинных соединений в моей сторонней библиотеке http2_client.erl. После ручного добавления контрольного сигнала к каждому соединению все проблемы решаются, и gRPC работает нормально.

person Chien    schedule 04.09.2020