HTTP とは異なり、websocket は HTTP からアップグレードされた後も長期間接続を維持します。
OS がすべてのポートを使用するように調整されている場合でも、合計で 65536 ポートしかありません。NGINX がこの制限を超える可能性はありますか?
潜在的な解決策は ですがSO_REUSEPORT
、ドキュメントが不足しています -- 少なくとも次の段落以外は見つかりません
NGINX リリース 1.9.1 には、SO_REUSEPORT ソケット オプションの使用を可能にする新しい機能が導入されています。これは、DragonFly BSD および Linux (カーネル バージョン 3.9 以降) を含む多くのオペレーティング システムの新しいバージョンで使用できます。このソケット オプションを使用すると、複数のソケットが同じ IP アドレスとポートの組み合わせでリッスンできます。次に、カーネルはソケット間で着信接続の負荷を分散します。
そのため、NGINX はaccept
インバウンド接続を受け入れるように呼び出します。
accept() システム コールは、接続ベースのソケット タイプ (SOCK_STREAM、SOCK_SEQPACKET) で使用されます。リッスン ソケット sockfd の保留中の接続のキューで最初の接続要求を抽出し、新しい接続済みソケットを作成し、そのソケットを参照する新しいファイル記述子を返します。新しく作成されたソケットはリッスン状態ではありません。元のソケット sockfd は、この呼び出しの影響を受けません。
新しいソケットはポートを消費しますか? はいの場合、65535 接続制限を超えるにはどうすればよいですか?