36 lines
1.1 KiB
Plaintext
36 lines
1.1 KiB
Plaintext
|
GO: https://swimlanes.io
|
||
|
|
||
|
Note Client: `send_request` *[auto]*
|
||
|
Client -> Server: `HEADERS` frame
|
||
|
Note Server: request accepted
|
||
|
|
||
|
Note Client: `send_message`
|
||
|
Client -> Server: `DATA` ... `DATA` frames
|
||
|
Note Server:
|
||
|
`recv_message`
|
||
|
|
||
|
Note Client Server:
|
||
|
Now you have to end stream from the client-side, and you can do this in two
|
||
|
ways:
|
||
|
1. `send_message(message, end=True)` - last `DATA` frame will contain
|
||
|
`END_STREAM` flag
|
||
|
2. `end()` - one extra frame will be sent, as shown below. It is better to
|
||
|
avoid this way if possible.
|
||
|
|
||
|
Note Client: `end` *(optional, read note above)*
|
||
|
Client -> Server: `HEADERS[END_STREAM]` frame
|
||
|
|
||
|
Note Server: `send_initial_metadata` *[auto]* You can send initial metadata
|
||
|
even before receiving messages from the client. RPC success or failure in gRPC
|
||
|
protocol is indicated in trailers.
|
||
|
Client <- Server: `HEADERS` frame
|
||
|
Note Client: `recv_initial_metadata` *[auto]*
|
||
|
|
||
|
Note Server: `send_message`
|
||
|
Client <- Server: `DATA` ... `DATA` frames
|
||
|
Note Client: `recv_message`
|
||
|
|
||
|
Note Server: `send_trailing_metadata` *[auto]*
|
||
|
Client <- Server: `HEADERS` frame as trailers
|
||
|
Note Client: `recv_trailing_metadata` *[auto]*
|