2011-10-19 14 views
6
http.createServer(function(request, response) { 
console.log("New request :"+request.url); 
var found = false; 
for(var i= 0; i < requests.length; i++){ 
    match = requests[i]; 
    if(match.method == request.method && request.url.match(match.regexp)) 
    { 
     console.log("Matched request: "+match.url); 
     pg.connect(databaseUrl, function(error, client) { 
      if(error) 
       processError(response, error); 
      else 
       match.action(client, request, response); 
     }); 
     found = true; 
     break; 
    } 
} 
if(!found) 
    processError(response, "Request url does not exist: "+request.url); 
}).listen(3000); 
sys.puts("Server running... waiting for requests"); 

こんにちは。私はこのコードに悩まされています。 11回同じリクエストを呼び出すたびに、nodejsは応答を停止し、 "新しいリクエスト:" + request.urlも記録しません。 誰でも何が起こっているのか考えていますか?NodeJSが11リクエスト後に応答を停止する

ありがとうございます。

+0

コードのこの部分には何も表示されませんが、それは実際には非効率的です。あなたは、アクションが一致するかどうかを決定するために配列を反復するのではなく、ハッシュを使うべきです - O(n)ではなくO(1)! – Stephen

+0

お返事ありがとうございました。確かにそれははるかに効率的である可能性があります。しかし、それは今のところ優先事項ではありません。私はちょうど "安定した"サーバーが必要で、実際にこの動作を理解していません(サーバーからのエラーはありません)。 – Elendir

+0

このコードには何も問題はありません。私はあなたのDBの取り扱いや取り扱いに問題がないかどうかを調べるでしょう。 – Stephen

答えて

2

ごめん、遅くまで来ました。 問題は何かを見つけましたが、完全に理解していません。 connectループでは、実際に値をシミュレートしていた(通常はリクエストによって捕捉された)関数を使用していました。これが問題でした。 pg.connectでデータベースリクエストを発行せずにループすると、接続が正しく終了しないようです。したがって、接続プールは明らかに破損します。 私は十分にはっきりしていることを願っています。

とにかくお世話になりました。

+0

'sys.puts'のメッセージが間違っているかもしれないことに注意してください。サーバーは' listen'のための(オプションの)コールバック関数を一度しかlistenしないことが保証されています。参照してください:http://nodejs.org/docs/latest/api/http.html#server.listen – Gijs

+0

知らなかった.listenは非同期で、チップのおかげです。 – Elendir

0

問題は、forループ内の非同期呼び出し "pg.connect"だと思います。 このjsモジュールを試してくださいasync

関連する問題