コンテンツにスキップ

第32章: WebTransport & TCP/UDP ソケット通信

従来のサーバーレス環境では「HTTP以外の通信(Raw TCP/UDP)」ができないという大きな制約がありました。 Cloudflare Workersは cloudflare:sockets を標準サポートしており、エッジから直接外部のTCPサーバー(IRC、SMTP、カスタムDBプロトコル等)へ双方向ソケット接続を開くことができます。


本チュートリアルのゴール

  • cloudflare:socketsconnect() API を使った生TCP通信の実装
  • WebTransport によるHTTP/3ベースの超低遅延ストリーミング

Step 1: 生TCPソケット接続の実装例

src/index.ts
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よりもパケット詰まり(ヘッドオブラインブロッキング)が起きない利点があります。