v3 の時点で、socket.io のデフォルトのメッセージ制限は 1 MB です。メッセージがそれよりも大きい場合、接続は強制終了されます。
maxHttpBufferSize
オプションを指定することでこのデフォルトを変更できますが、次のことを考慮してください (最初に書かれたのは 10 年以上前ですが、まだ関連があります)。
Nodeと socket.ioには組み込みの制限はありません。心配しなければならないのは、メッセージのサイズ、1 秒あたりに送信されるメッセージの数、接続されているクライアントの数、およびサーバーが利用できる帯域幅の間の関係です。つまり、簡単な答えはありません。
10 kB のメッセージを考えてみましょう。10 台のクライアントが接続されている場合、サーバーがプッシュしなければならないデータは 100 kB になり、これは完全に合理的です。クライアントを追加すると、要求が急速に厳しくなります: 10 kB * 5,000 クライアント = 50 MB。
もちろん、プロトコル オーバーヘッドの量も考慮する必要があります。パケットごとに、TCP は最大 20 バイト、IP は 20 バイト、イーサネットは 14 バイトを追加し、合計 54 バイトになります。MTU が 1500 バイトであると仮定すると、クライアントごとに 8 パケットが表示されます (再送信は無視されます)。これは、8*54=432 バイトのオーバーヘッド + 10 kB ペイロード = 1 クライアントあたり 10,672 バイトをネットワーク経由で送信することを意味します。
10.4 KB * 5000 クライアント = 50.8 MB。
100 Mbps のリンクでは、リンクを飽和させることができる場合、10 kB のメッセージを 5,000 のクライアントに配信するのに理論上の最小時間は 4.3 秒です。もちろん、ドロップされたパケットや破損したデータが再送信を必要とする現実の世界では、さらに時間がかかります。
10 kB を 5,000 クライアントに送信するのに 8 秒という非常に控えめな見積もりでも、メッセージが 10 ~ 20 秒ごとに届くチャット ルームではおそらく問題ありません。
実際には、重要性の順にいくつかの質問に行き着きます。
- サーバーで使用できる帯域幅はどれくらいですか?
- 何人のユーザーが同時に接続されますか?
- 1 分間に送信されるメッセージの数は?
これらの質問に答えると、インフラストラクチャがサポートするメッセージの最大サイズを判断できます。