import { io } from 'socket.io-client';
import { SocksProxyAgent } from 'socks-proxy-agent';

const agent = new SocksProxyAgent('socks5h://proxy.example:1080');
const socket = io('https://events.example', {
  agent,
  transports: ['polling', 'websocket'],
});

実際の Socket.IO サービスを使ってください。Node エージェントが SOCKS をネゴシエートし、socks5h が宛先の DNS をそのプロキシに委ねます。公開された仲介者を通じた公開サービスへの試験が許される場合は、SOCKS5 プロキシ一覧から対応するエンドポイントを選びます。

polling が成功しても、その後の WebSocket アップグレードが失敗することがあります。両方の経路と、最上位のエージェントを上書きする transportOptions を確認してください。

この例はあえてこの 2 つのトランスポートを使っています。WebTransport は別の実装を使い、ブラウザに同梱された JavaScript はブラウザの設定に従います。素の WebSocket エンドポイントも Socket.IO サーバーではありません。

既存のイベントと再接続のロジックはそのまま残し、接続が終わったらクライアントを切断してエージェントを解放してください。

関連記事