2015-12-01 25 views
6

HTTP/2では、パイプライン化、多重化、サーバープッシュプロビジョニングなどの非常に興味深い機能が導入されています。それは自分自身で素晴らしいです。 代わりに、私たちはWebSocketsを犠牲にしました。双方向(対称)通信に単一のHTTP/2接続を使用する

理論的にHTTP/2は、プッシュプロミスの形でサーバーとクライアント間の双方向通信を可能にします。サーバーは、依頼される前にクライアントに応答を送信することができます。再び;驚くばかり。 これらのリクエストは、クライアントのリクエストとは異なります。

ので、手での質問は:
をすることなく、サーバーとクライアントの両方が相互に任意のメッセージ(2進数の1のための余分なポイント)を送信することができます単一 HTTP/2接続を持ってする方法はありますクライアントが別のプロトコルを定義しましたサーバーからメッセージが送信されましたか?

WebSocketは、2つの当事者のいずれかが接続を開始し、両方ともメッセージを送信できるので、私が探しているものの素晴らしい例です。

HTTP/2を壊さないソリューションは理想的ですが、プロトコルの不正使用も歓迎します。
ありがとうございます。

ps。この演習の目的は、GRPC、Thriftなどのトランスポートプロトコルがサーバー/クライアントアーキテクチャなしでHTTP/2の上に設計できるかどうかを判断することですが、両者がメッセージを送受信できるため、req/resp、pub/sub、rpcなどをビルドすることができます。

+0

grpcはデフォルトでhttp2を使用します。 http://www.grpc.io/docs/guides/wire.html – nibin012

答えて

5

現在、サーバー送信イベントは、サーバー送信イベントに最も近いものです。それはHTTP/2でうまく動作し、習慣的なIEを除くすべてのブラウザでサポートされていますが、利用可能なpolyfillがあります(RAMを食べるでしょう)。改行はメッセージ部分とメッセージ自体を分離するために使用されるので、何らかのエスケープを伴わないバイナリサポートはありません。より

いくつかの注意事項(訂正が歓迎):

  • WebSocketを良くし、蹴りです。近い将来、HTTP/2 Connectがすぐに使用できない場合は、そのサービスを提供する必要があります。
  • しかし、サーバーはクライアントに対してWebソケットを開始できません。
  • プッシュプロビジョニングは非常に異なる目的を果たします。いいえ、ウェブソケットの代わりに使用することはできません。

HTTP/2プッシュはプッシュと呼ばれますが、サーバーからプッシュされた通知とは関係ありません。往復を節約することで、アプリケーションの読み込み時間を短縮することができます。

+0

サーバー側のイベントが実際に私の質問に最も適切な答えと思われます。非常に興味深いゴランの例がここにありますhttps://www.new-bamboo.co.uk/blog/2014/05/13/writing-a-server-sent-events-server-in-go/ –

+0

ありがとう優れた情報を共有するためのものです。私はHTTP2プッシュと同じ混乱を覚えました。 – lithiumlab

+0

WebSocketをシミュレートするには、HTTP/2全二重に関するフレームワークを構築する必要がありますか? – FrickeFresh

関連する問題