2013-05-09 15 views
10

ノードアプリケーションを最適化しようとしていて、アプリケーションがHTTP要求とHTTPS要求をしています。ノードを作るためのLinkedInから、この記事から Nodejs最大ソケットプール設定

が速く、それは5つのソケットの限界削除するためにソケットプールを無効にすることを示唆している:GitHubの上Mikeal(リクエストの開発者)から今

// Disable socket pooling 
var http = require('http'); 
var options = {.....}; 
options.agent = false; 
var req = http.request(options) 

を、彼は示唆:

require('http').globalAgent.maxSockets = Infinity 

公正であるために、彼は無限を提案していませんが、そこには妥当な価値を置くことができます。

さて、私のアプリは、HTTPとHTTPSを使用していますので、私はこのコードを使用:

var http = require('http'); 
http.globalAgent.maxSockets = 30; 
var https = require('https'); 
https.globalAgent.maxSockets = 30; 

私はこれを行うと、私はこのエラーを取得:

最後に

TypeError: Cannot set property 'maxSockets' of undefined

、HTTPを見にドキュメントには「globalAgent」は表示されず、代わりにagent.maxSocketsが表示されます。

まず、このパラメータを上書きするための最適な構文は何ですか?

次に、最適値は何ですか?サーバーのメモリ容量に基づいていますか?その帯域幅?

+2

Node.js v0.10.24にアップグレードすると、エラーが表示されなくなりました。TypeError:未定義のプロパティ 'maxSockets'を設定できません –

+1

ノード0.12がデフォルトの 'maxSockets'値を' Infinity'に変更したことに注意してください:http://stackoverflow.com/a/12061013/504930 – devius

答えて

14

http.globalAgent.maxSocketsまたはhttps.globalAgent.maxSocketsのいずれかを設定してもエラーは発生しません。TypeErrorについては、エラーは発生しません。あなたのアプリには何か他のことが起こっています。

質問の最初の部分については、グローバルエージェントの使用に限定されているわけではありません。あなたはあなた自身のAgentインスタンスを作成し、要求を行うためにそれを使用することができます

var http = require('http'); 
var myAgent = new http.Agent(); 

http.request({ ... , agent: myAgent }, ...); 

の要求は、すべてのグローバルエージェントと相互作用しないカスタムエージェントを使用して作られました。グローバルエージェントは、エージェントを明示的に指定していないか、またはエージェントをすべて一緒に使用しないようにする場合(要求オプションのagent値としてfalseを渡すことによって)使用されるデフォルトのエージェントです。

したがって、ドキュメントが​​と表示されている場合、実際にはAgentという一般的なクラスを参照しています。すべてのインスタンスには、グローバル(デフォルト)エージェント–を含むそのプロパティがあります。http.globalAgentを介してアクセスする必要があります。

質問の2番目の部分(最適maxSockets)は答えが難しいです。多くのサーバーでは、特定のIPからの同時接続数が制限され、多数の同時要求があるサーバーを圧倒しないようにする必要があります。

+0

だから、私はチェックした。私のローカルマシン(ノードv0.10.3とv0.8.7)では正常に動作しますが、Joyent SmartOSマシン(ノードv0.8も稼働しています)ではクラッシュします。7)メッセージ "TypeError:未定義の 'maxSockets'プロパティを設定できませんなぜそれは異なるでしょうか? –

+0

Joyent PaaSのアーキテクチャ上の制限があります。サポートにご協力ください。 – matanster

+0

maxSocketがhttpsで動作するかどうかを確認しましたか? –

関連する問題