最近WebブラウザからgRPCを呼び出せるようになったようです。
gRPC-Webが正式リリース。WebブラウザからgRPCを直接呼び出し可能に
Unary RPCでの呼び出しはできるようですが、双方向通信は対応してるのか調べてみました。
どうやらgrpc-webというと、2種類あるようで
前者は上記記事で紹介されているもので、後者は名前が同じでやりたいことは同じでも実現方法が異なっているものです。
やりたことはWebブラウザからの双方向通信ができるかなので、どちらも調べてみました。
ちなみにこの2つのプロダクトの違いは下記に記載してあるので、興味がある方は読んでみてください。
https://github.com/improbable-eng/grpc-web/issues/199
自分の解釈により、間違えている可能性もあるのでその場合はご指摘お願いします。
結論
結論から言うと、どちらもgRPCの双方向通信は対応していません。
未対応理由
どちらも同じ理由なのですが、ブラウザネイティブからストリーム通信ができないためです。
https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-WEB.md
Bidi-streaming, with flow-control
・Pending on whatwg fetch/streams to be finalized and implemented in modern browsers
・gRPC-Web client will support the native gRPC protocol with modern browsers
whatwg/streamsというブラウザネイティブのAPIがあるのですが
それがモダンブラウザで実装されない限り双方向通信は出来ないようです。
調査
grpc/grpc-web
このリポジトリでの双方向通信の議論はこちらで行われていました。
https://github.com/grpc/grpc/issues/8682
https://github.com/grpc/grpc-web/issues/24
内容としては上記結論の内容です。
WebSocketで対応する案が出ていたようですが、どうやらやってない様子?
improbable-eng/grpc-web
どうやらWebSocketでは双方向通信をサポートしているようです。
https://github.com/improbable-eng/grpc-web/issues/94
が、純粋な意味でのgRPCでの双方向通信はサポートされていないので、結論としては「対応していない」としました。