10

NodeJSとの使用中に奇妙な問題に直面していSocket.ioます。

経由でデータを受信するサーバーZeroMQ。それは完璧に機能します。からのメッセージごとにZeroMQsockets.volatile.emit接続されているすべてのクライアントに送信していました。この問題は、接続されたアカウントが多数 (100 を超える) 場合にのみ発生します。クライアントへの送信にキューがあるようです (クライアントはメッセージを遅延して受信し、増加し続けます)。

注 : 接続された各クライアントは ZeroMQ から各メッセージを受信したため、基本的にクライアントが増えると、socket.IO を介して送信されるデータが増えます。

ログ/デバッグを介して、受信ZeroMQに遅延がなく、すべてがその部分で機能することを知っています。放出には、増加し続けるキューまたは遅延があるようです。

メッセージ レートは80、各クライアントのメッセージ/秒です。

Note:NodeJS 0.10.20 および Socket.IO 0.9.16。

クライアントが古いメッセージを受信しないようにするにはどうすればよいですか?

4

2 に答える 2

13

この記事をチェックアウトすると、多くの基本的な間違いがわかるはずです。それは、イベント ループのブロックについてです。

DebugBlockedなどのツールを使用すると、問題の解決に役立つと思います。両方とも、パフォーマンスとその他の基本的な問題のボトルネックを作成する場所をデバッグします。

または、ノード プロジェクトをPM2に接続し、それをKeymetrics.IOにバインドします。これにより、サーバーと、実行速度が遅い理由とパフォーマンスのボトルネックを作る理由をよく把握できます。

コード例なしで問題を解決するのは難しいですが、アプリまたはユーザーが (おそらく無意識のうちに) ボトルネックを作成する可能性がある 3 つの理由を次に示します。

  • JSON.parse 関数を使用して大きな json ペイロードを解析します。

  • バックエンドの大きなファイルで構文の強調表示を実行しようとしています (Ace や highlight.js などを使用)。

  • 大きな出力を一度に解析する (子プロセスからの git log コマンドの出力など)。

詳細については、「イベント ループのブロック」というセクション 2の最初の記事を参照してください。

あなたに関連する質問です

イベント ループについて詳しく知りたい場合は、トレッドNode.js でシングル スレッドのノンブロッキング IO モデルがどのように機能するか」をお読みください。

イベント ループとその周辺で何が起こるかを確認するための Node.js 処理モデルのモデルを次に示します。

Node.js 処理モデル

于 2015-04-08T11:25:26.957 に答える
0

ひどい方法でイベント ループをブロックしていないことが判明した場合は、特定のアプリケーションでsocket.ioが処理できる限界に達している可能性があります。その場合は、インスタンスのスケールアップを検討してください。

詳細については、この記事をご覧ください: http://drewww.github.io/socket.io-benchmarking/

于 2015-10-28T18:49:54.940 に答える