マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

HTTPを用いて、双方向通信を実現するための技術規格

  • APIはHTML仕様の中に含まれている
    HTML Standard 9.3 Web sockets
  • 通信プロトコル標準仕様
    • RFC 6455
    • Fetch Standard 6. WebSocket protocol alterations

仕様

あまり詳しく読んでいないが、ざっくり、HTTP的に接続して、以降TCP/IP的に振舞う。

問題点

  • あまり流行っていない体感もあるので調査をしてみた。

と言う事で、WebSocketが新規採用される可能性は低いということらしい。

現行の問題

  • とびきり不安定なスペックでの波乱の経緯(RFC6455でようやく安定した)
  • 多くのライブラリ(欠陥があるにも関わらず、複数の実装が付随するモノもある)
  • 古いブラウザではサポートされない。

技術的な問題

信頼性が高くない。

  • WebSocketは、信頼性(TCP/IP)という錯覚を与えた。
  • しかし、欠損やサーバで処理される順序の入れ替わりなどが
    起こり得る単なるHTTP呼び出しであるかのように扱う必要がある。

ブラウザでTCP/IPコネクションが制限されない。

ブラウザのWebSocket(TCP/IPコネクション)が、
HTTP/HTTPSコネクションのように制限されない。

プロキシや負荷分散の問題

  • HTTPプロキシサーバ経由の問題
    HTTPSでないHTTPプロキシサーバ経由でWebSocketを実行すると、
    WebSocketが閉じてしまったにも関わらず、オープンであるように見える問題に対処できない。
  • TCPプロキシの問題
    • TCPプロキシを起動することが余儀なくされるが、問題もある。
    • HTTPプロキシによって緩和されるDoS攻撃は、TCPプロキシでは対処できない。
    • TCPプロキシはヘッダを入れたり、URLを書き直したりできない。
      また、従来、HTTPプロキシが処理する様々な役割も実行できない。
  • 負荷分散の問題
    • 既存のトラフィックを再度バランシングする方法が無い。
    • オーバーロードしたサーバを終了する以外に無い。

サーバーに、I/O完了ポートなどが必要

HTTP/2と統合されていない

  • WebSocketの実装を洗練していくと、結局HTTPの再発明になる。
  • 両プロトコルを統一するための(有効期限切れの)ドラフトを後押しする活動はない。
  • HTTP/3が統合するかもしれない。

エンドユーザの視点

必要な状況が殆ど無い。

  • ミリ秒未満のHTTPヘッダのパースの最適化が必要な状況が殆ど無い。
  • 例えば、ポーリングを使って、30秒の遅れにも問題を感じずに満足する。

メッセージングの信頼性の方が重要

  • (上限はあるものの)古いメッセージを”取り戻す”ことが必要。
  • 信頼性のあるメッセージングが実装できれば、複数のトランスポート機構を簡単に実装できる。

代替

各種の双方向通信がある。

ポーリング

  • 通常のポーリング
    ポーリングによる疑似プッシュ方式
  • Ajax polling
    • ボディがJSON化されたもの。
    • ポーリングと同じ疑似プッシュ方式

Comet

  • 複数の手法をまとめた概念
  • Ajax と Long-polling を使用
    • Ajax
      JSON化されたボディ。
    • Long-polling
      プッシュ時まで、レスポンスを返さない。

Server Sent Events

  • Chunked Transfer Codingを使用して、
    分割(chunked)データ扱いで、継続的にレスポンス可能。
  • Chunked Transfer Codingとは、
    • 大容量のファイルなど、Content-Length を明示しないでレスポンスする方法。
    • データを細かく分けて、分割された個々のデータをサイズとセットで送信する。

Frame

  • HTML の framesetやiframeタグを使って常時接続を実現する方法
  • Forever Frame

HTTP/2

ポーリングのトランスポートとして使用すると性能が上がる(Twitter)。

参考

参考

問題点

リアルタイム・ウェブ

インターネット上の情報を、即時かつ大規模に他のユーザと共有する仕組みの総称。


Tags: :通信技術, :IIS, :.NET開発, :.NET Core, :ASP.NET, :ASP.NET SignalR


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-07-18 (水) 20:12:48 (64d)