10

私は、tcp サーバー (tcp.createServer) と http サーバー (http.createServer) で node.js (v0.1.32) を実行しているマシンを持っています。HTTP サーバーは、ポート 80 のコメット ベースのアプリケーションからの長いポーリング要求 (それぞれ 50 秒続く) にヒットします。また、同じ目的で、iphone アプリケーションからポート 8080 に tcp ソケット接続があります。

しばらくの間、サーバーがそれ以上の接続 (特に、http 接続は問題ないように見えたのに tcp 接続!!??) を処理できず、再起動後にのみ正常になることがわかりました。

接続の負荷テストのために、tcp サーバーを作成して 2000 のリクエストを生成し、マシンのファイル記述子の最大制限 (デフォルトは 1024) に達した後、接続が失敗し始めることを確認しました。これは本当に非常に小さな数です。

したがって、ここでの初心者の質問: node.js でより多くの接続を処理するためにアプリケーションをスケーリングする方法と、この問題をどのように処理するかです。

現在アクティブな接続がいくつあるかを調べる方法はありますか?

ありがとうシャリフ

4

3 に答える 3

3

おいジョーイ!私は、自分のマシンでいつでも、特定の瞬間に開いている接続の数を把握するのに役立つ UNIX ソリューションを探していました。その理由は、サーバーが一定数の接続後にリクエストを処理できなかったためです。そして、私のマシンは一度に 1024 の開いている接続しか処理できないと考えました。つまり、デフォルトで 1024 に設定されている ulimit ファイル記述子の値です。私の要件に合うように ulimit -n を設定して、この値を変更しました。

そのため、開いている接続を確認するために、開いているファイルのリストを表示する lsof を使用し、使用していた各ポートを介して開いている接続の数を計算しました。

于 2010-07-15T06:11:25.210 に答える
2

Node とのアクティブな接続の数を取得する組み込みの方法があるかどうかはわかりませんが、何かを設定するのは非常に簡単です。

コメット スタイルの Node アプリでは、プロパティとして接続を追加するオブジェクトを保持します。X秒ごとにそのオブジェクトを反復処理し、閉じる必要がある接続があるかどうかを確認します(あなたの場合、50秒の制限を超えたもの)。

接続を閉じるときは、接続オブジェクトからそのプロパティを削除するだけです。次に、いつでも開いている接続の数を確認できますObject.size(connections)

于 2010-07-14T14:24:02.853 に答える