第32章: WebTransport & TCP/UDP ソケット通信
従来のサーバーレス環境では「HTTP以外の通信(Raw TCP/UDP)」ができないという大きな制約がありました。
Cloudflare Workersは cloudflare:sockets を標準サポートしており、エッジから直接外部のTCPサーバー(IRC、SMTP、カスタムDBプロトコル等)へ双方向ソケット接続を開くことができます。
本チュートリアルのゴール
cloudflare:socketsのconnect()API を使った生TCP通信の実装- WebTransport によるHTTP/3ベースの超低遅延ストリーミング
Step 1: 生TCPソケット接続の実装例
import { connect } from 'cloudflare:sockets';
export default { async fetch(req: Request, env: Env): Promise<Response> { // 外部のTCPサーバー(例: データベースやカスタムソケット)へ直接接続 const socket = connect('tcp-echo.example.com:9000');
const writer = socket.writable.getWriter(); const reader = socket.readable.getReader();
// データの送信 await writer.write(new TextEncoder().encode('PING\n'));
// データの受信 const { value, done } = await reader.read(); const text = new TextDecoder().decode(value);
// ソケットのクローズ await writer.close();
return new Response(`TCPサーバーからの応答: ${text}`); }};Step 2: WebTransport(次世代リアルタイム通信)
HTTP/3(QUIC)プロトコル上で動作する WebTransport は、WebSocketよりもさらに低遅延でパケット損失に強い双方向ストリーム通信を提供します。ゲーム、音声・動画のメタデータ同期、IoTセンサーデータのリアルタイム収集に最適な通信手段です。
💡 用語解説コラム
[!NOTE] 生ソケット (Raw TCP/UDP Socket)
HTTPという上位ルールに縛られず、ネットワークの基本プロトコルであるTCPやUDPで自由なバイト列を送受信する低レイヤー通信。
[!NOTE] WebTransport / QUIC
HTTP/3の基盤であるUDPベースの高速プロトコル「QUIC」を利用した次世代リアルタイム双方向通信規格。WebSocketよりもパケット詰まり(ヘッドオブラインブロッキング)が起きない利点があります。