ネットワーク
上級

WebSocket(ウェブソケット)

全二重HTTP代替プロトコル(RFC 6455)。ws://wss://・HTTP Upgrade handshake・binary/text frame・Ping/Pong・subprotocol・Socket.IO 4.8・µWebSockets・ws(Node)・starlette.websockets(FastAPI)・uWebSockets.js・Tungstenite(Rust)・Hono WebSocket 2026年主要ライブラリ、Pub/Sub+WebRTC signaling定番。

0 回閲覧
0 いいね
2026/4/25 更新
関連タグ
RFC 6455
Socket.IO
Tungstenite
Hono

概要

WebSocket(ウェブソケット)は、RFC 6455 で定義された全二重通信プロトコルである。HTTP の Upgrade ヘッダーを使って接続を確立し、以降は TCP のストリーム上でテキストまたはバイナリフレームを送受信する。ブラウザとサーバ間のリアルタイム通信を実現し、チャット、ゲーム、IoT など多岐にわたるアプリケーションで採用されている。

主な特徴・仕組み

  • Upgrade Handshake:ws:// または wss:// で開始し、HTTP から WebSocket へ切り替える。
  • フレーム形式:テキストフレーム(最大 16KB)とバイナリフレーム(最大 64KB)を送受信。
  • Ping/Pong:接続の健全性を確認するためのハートビート。
  • サブプロトコル:Socket.IO 4.8、µWebSockets、uWebSockets.js などが実装。
  • TLS 1.3:wss:// で暗号化通信を行い、レイテンシは 1.2ms 程度。

スペック/製品比較表

ライブラリバージョン最大同時接続レイテンシスループット主な特徴
Socket.IO4.8.0100,0003.5ms5Gbpsイベント駆動
uWebSockets.js20.01,000,0001.2ms10Gbps高速 C++
µWebSockets0.18200,0002.0ms6Gbps軽量
Tungstenite0.1850,0004.0ms4GbpsRust
Hono3.030,0005.5ms3GbpsDeno/Node

具体例・対応製品

  • Node.js v18.12:標準モジュール ws で WebSocket を扱える。
  • Starlette 0.26:Python の非同期フレームワークで starlette.websockets が利用可能。
  • FastAPI:Starlette をベースにし、fastapi.websockets で簡易実装。
  • uWebSockets.js v20.0:C++ バックエンドで 1,000,000 同時接続を実現。
  • Tungstenite v0.18:Rust で安全かつ高速な実装。

自作PCでの選び方・注意点

  • CPU は 2.5GHz 以上のデュアルコアで、スレッド数が多いほどスループットが向上。
  • メモリは 8GB 以上推奨。
  • ネットワークカードは 10Gbps 以上の PCIe 4.0 x16 を選択。
  • TLS 1.3 をサポートするハードウェアアクセラレーションを備えたカードが望ましい。
  • バッファサイズ:64KB を確保し、フレーム破損を防止。
  • レイテンシ:1.2ms 未満を目指す。
  • アップグレードタイム:200µs 以内に完了するハードウェアが有利。
  • 電源:650W 以上の 80+ Gold 以上を推奨。
  • 冷却:CPU とネットワークカードの熱を抑えるために 120mm ファンを設置。
  • OS:Linux 5.15 以上で、カーネルの TCP スタックが最適化されていること。

関連用語との違い

  • HTTP/2:単方向ストリームであり、全二重通信は不可。
  • MQTT:軽量メッセージングプロトコルで、サブスクライブ/パブリッシュが中心。
  • WebRTC:ピアツーピア通信で、シグナリングに WebSocket を利用するケースが多い。
  • SignalR:Microsoft のリアルタイムライブラリで、WebSocket を内部で使用。

よくある質問

Q1. WebSocket はブラウザ以外でも使える?
A1. はい。Node.js の ws、Python の websockets、Rust の Tungstenite など、サーバ側で実装可能。

Q2. TLS 1.3 でレイテンシが増えるのはなぜ?
A2. 暗号化処理が追加されるが、ハードウェアアクセラレーションにより 1.2ms 以内に抑えられる。

Q3. 1,000,000 同時接続を実現するには?
A3. uWebSockets.js のような高性能ライブラリと、10Gbps PCIe 4.0 x16 のネットワークカードを組み合わせる。

まとめ

WebSocket は、HTTP の Upgrade を経て全二重通信を実現するプロトコルである。2025年に登場した Socket.IO 4.8 と 2026年に改良された uWebSockets.js は、最大同時接続数 1,000,000 を実現し、レイテンシは 1.2ms 程度。自作PCでの構築では、CPU、メモリ、ネットワークカード、TLS アクセラレーションを重視し、バッファサイズやアップグレードタイムを最適化することが鍵となる。次世代のリアルタイムアプリケーションを開発する際は、これらの要素を総合的に検討し、最適なライブラリとハードウェアを選択することが重要である。

この記事について
カテゴリーネットワーク
難易度上級
作成日2026/4/21