Nodeのwsパッケージは、接続オプションでHTTPエージェントを受け付けます。フォワードプロキシには、ESモジュールの断片でHttpsProxyAgentを使えます。

import WebSocket from 'ws';
import { HttpsProxyAgent } from 'https-proxy-agent';

const agent = new HttpsProxyAgent('http://proxy.example.net:8080');
const socket = new WebSocket('wss://socket.example.net/events', {
  agent,
});

socket.on('error', error => {
  console.error(error.message);
});

これは両方のパッケージがすでにアプリケーションの一部であることを前提とします。WebSocketのURLはサービスを選び、エージェントのURLはプロキシを選びます。HTTPプロキシ一覧のHTTPアドレスは、プロキシの認証情報なしで許可された公開WSSテストに使うエージェントURLを埋められます。実際のサービスエンドポイントへの到達を確認してください。

HttpsProxyAgentはHTTP CONNECTトンネルを確立し、接続済みのトランスポートをクライアントに渡します。WebSocket接続とHTTPSリクエストの両方に対応するため、アプリケーションがCONNECTのやり取りを自前で組み立てる必要はありません。

アプリケーション通常のopen、message、closeの処理をそのまま続けます。openイベントは選択した経路でWebSocketハンドシェイクが完了したことを示します。JavaScriptオブジェクトを作っただけでは完了していません。

関連記事