http2-spec では、サーバーがストリームを半分閉じた (サーバーが http2.END_STREAM を送信した) シナリオでは、クライアントは引き続きデータを送信できます (半分閉じているため)。
次の gRPC シナリオを検討してください。
- クライアントはサーバーへの双方向ストリームを開き、データの送信を開始します
- サーバーは応答ストリームを閉じ、ステータス トレーラーを送信します (http2.END_STREAM の送信に変換されます)。
- クライアントはデータを送信し続けます
セマンティクスは gRPC で明確に定義されていますか?
可能な方法:
- http2-spec に従います。クライアントは、サーバーによって処理されるデータを送信し続けることができます。
- http2-spec に従わない: サーバーがストリームを閉じると、クライアント接続は暗黙的に終了します。
注: テストしたところ、Java 用の gRPC はバリアント「http2-spec には従わない」に従っているように見えます。つまり、サーバーが下向きストリームを閉じると、上向きストリームも閉じられます。