Hello,
I intend to use grpc between two fixed endpoints (client and server) where the client receives multiple requests (the client serves as a proxy) which in turn sends a grpc request to the server. I wanted to know of the following would be considered good practice:
a) For every request that comes in at the client, do the following in the http handler:
a) conn := grpc.Dial(...) // establish a grpc connection
b) client := NewClient(conn) // instantiate a new client
c) client.Something(..) // invoke the grpc method on the client
i.e Establish a new connection and client in handling every request
b) Establish a single grpc connection between client and server at init() time and then inside the handler, instantiate a new client and invoke the grpc method
a) client := NewClient(conn) // instantiate a new client
b) client.Something(..) // invoke the grpc method on the client
c) Establish a connection and instantiate a client at init() and then in every handler, just invoke the grpc method.
a) client.Something(..)
The emphasis here is on performance as I expect the the client to process a large volume of requests coming in. I do know that grpc underneath creates streams but at the end of the day a single
logical grpc connection runs on a single TCP connection (multiplexing the streams) on it and having just one connection for all clients might not cut it. Thoughts and ideas appreciated !
Thanks,
Nakul