2012-04-15 7 views
21

私はbroadcast.emitを実装するウェブサイトを持っています。そのサイトのすべてのユーザーにメッセージを送信します。これはsocket.ioの単純な実装ですが、現在問題があります。約100人の同時ユーザーにヒットしました。 nodejsサーバーは、サーバーがハングして私の全ウェブサイトにアクセスできなくなるまで遅れを開始します。私たちがサーバーをチェックしたとき。 nodejsはCPUの100%を使用しています。それは普通ですか?NodejsとSocket.ioでサポートできるユーザー数はいくつですか?

socket.ioにはどのくらいのユーザーが対応できるのでしょうか?そして、このことが起こったとき、nodejsサーバをプログラム的に再起動する方法がありますか?

+1

サーバーの仕様についていくつかお知らせいただけますか? – UpTheCreek

答えて

15

At least 250k同時接続(ほとんどのユースケースのためのボトルネックはメモリです)

+0

ありがとうアンドレイ。実際にはサーバーメモリに問題はありません。これは、サーバーメモリの5%未満を使用します。また、nodejsが私のweb&dbサーバと同じボックスにあることを忘れていました – 3s2ng

+11

上記の250kはHelloWorldタイプのsocket.ioのないベンチマークです。実際には、c10kは実数に近いです(CPUとアプリケーションの複雑さによって異なります)。たとえば、私が走っているカードゲームの場合、私は約c3kで100%のCPU使用率を記録しました。 –

+1

1mの同時接続 - http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/ –

3

が、それは重要なあなたがそれを落とすことなく、すべてのクライアントにメッセージを配信するためですか?いいえ、私はsocket.volatile.emitの呼び出しを使用することを提案したいと思います。リモートクライアントと非安定コネクトンには多くの問題があります。

+0

クライアントに配信されるメッセージは重要です。すべてのユーザーの間でデータを同期させると常に更新されます。私が揮発性を使うつもりなら、ユーザーは接続が失われた場合にメッセージを受け取らないでしょうか?その後、最新のメッセージを受け取る機会はありますか?揮発性の使用の他の欠点? – 3s2ng

+2

送信されている現在のメッセージデータがクライアント上の前のデータを置き換える(つまり、同じ呼び出しを介して送信された前のメッセージを廃止する)場合は、 'socket.volatile.emit'を使用します。 –

18

私はマルチプレイヤーカードゲームを持っています。 Socket.ioは約3000人の同時ユーザーでCPUを最大限に活用します。これはIntel i7 CPU上にあります。このため、負荷を処理するために複数のnode/socket.ioプロセスを実行する必要があります。

同時接続数が100の場合は、問題ありません。おそらくあなたはいくつかのVPSを使用しており、CPUは他のすべてのVMと共有されていますか?専用のサーバーを稼働していますか?

また、コードを確認してください。非同期にする必要があるものを同期して実行している可能性があります。

+0

クラスタモジュールを使用してより多くのコアを使用した場合、その数は増えますか?または、既にクラスタモジュールを使用していますか? –

+8

現在、フロントエンドとしてHAProxyを使用して7つのノードプロセスを実行しています。約9000人の同時ユーザー(ノードあたり〜1300)があり、すべて問題なく動作します。すべてが単一のサーバー上にあります。 –

+0

お返事を頂き、ありがとうございます。 –

関連する問題