|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- # Keepalive
-
- gRPC sends http2 pings on the transport to detect if the connection is down. If
- the ping is not acknowledged by the other side within a certain period, the
- connection will be close. Note that pings are only necessary when there's no
- activity on the connection.
-
- For how to configure keepalive, see
- https://godoc.org/google.golang.org/grpc/keepalive for the options.
-
- ## What should I set?
-
- It should be sufficient for most users to set [client
- parameters](https://godoc.org/google.golang.org/grpc/keepalive) as a [dial
- option](https://godoc.org/google.golang.org/grpc#WithKeepaliveParams).
-
- ## What will happen?
-
- (The behavior described here is specific for gRPC-go, it might be slightly
- different in other languages.)
-
- When there's no activity on a connection (note that an ongoing stream results in
- __no activity__ when there's no message being sent), after `Time`, a ping will
- be sent by the client and the server will send a ping ack when it gets the ping.
- Client will wait for `Timeout`, and check if there's any activity on the
- connection during this period (a ping ack is an activity).
-
- ## What about server side?
-
- Server has similar `Time` and `Timeout` settings as client. Server can also
- configure connection max-age. See [server
- parameters](https://godoc.org/google.golang.org/grpc/keepalive#ServerParameters)
- for details.
-
- ### Enforcement policy
-
- [Enforcement
- policy](https://godoc.org/google.golang.org/grpc/keepalive#ServerParameters) is
- a special setting on server side to protect server from malicious or misbehaving
- clients.
-
- Server sends GOAWAY with ENHANCE_YOUR_CALM and close the connection when bad
- behaviors are detected:
- - Client sends too frequent pings
- - Client sends pings when there's no stream and this is disallowed by server
- config
|