Open whiskeycola opened 1 year ago
I've managed to get around the hanging connection issue by setting the net.ipv4.tcp_retries2
Linux parameter to a lower value. This makes undeliverable packets fail the established stream earlier.
+1 for this. The grpc-go library NewClient
does not perform any I/O. The connection is established lazily and reconnections are automatically handled. Something like this is extremely convenient to have implemented within the library, otherwise I have to re-implement that behavior everywhere where I'm using a Rust gRPC client.
Bug Report
The connection does not know how to recover on its own in the event of a break. (Sometimes it can, most often the connection freezes after disconnecting)
Version 0.8.3
Platform
Linux Home-PC 5.15.0-58-generic #64-Ubuntu SMP Thu Jan 5 11:43:13 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Crates
Description
If the connection between the client and the server is lost. He can no longer restore it and the program that uses the client no longer works. For example, when you sleep for a long time or physically disconnect from the server. Further use of the grpc service is impossible, just a timeout error or a broken connection.
or this
I encountered this problem on the working program in the finished product. To study it I created a simple server-client on from the tonic examples And I get the same errors. I run the server on a remote machine, that it would be possible to physically break the connection between the client and the server.
Server
Client
I have tried several settings. For example, if use .http2_keep_alive_interval(Duration::from_secs(5)) then the connection does not break during idle time. But if you physically break the connection, then it can no longer be restored (Sometimes the tonic reconnects itself, but most often the connection just hangs). Perhaps I need to specify some other settings so that a new connection is established when it breaks?