59

次のエラーが発生します。

events.js:48
        throw arguments[1]; // Unhandled 'error' event
        ^
Error: socket hang up
    at createHangUpError (http.js:1091:15)
    at Socket.onend (http.js:1154:27)
    at TCP.onread (net.js:363:26)

ノードv0.6.6では、コードに複数のhttp.request呼び出しと.get呼び出しがあります。ソケットがハングアップする原因と、それがどのリクエスト/呼び出しであるかを追跡する方法を提案してください。ありがとうございました

4

5 に答える 5

44

開発のための迅速で汚れたソリューション:

longjohnを使用する と、非同期操作を含む長いスタック トレースが得られます。

クリーンで正しい解決策:技術的には、ノードでは'error'イベントを発行し、誰もそれをリッスンしないと、スローされます。スローしないようにするには、リスナーを配置して自分で処理します。そうすれば、エラーをより多くの情報とともにログに記録できます。

呼び出しのグループに対して 1 つのリスナーを使用するには、ドメイン を使用して、実行時に他のエラーをキャッチすることもできます。http(サーバー/クライアント) に関連する各非同期操作が、コードの他の部分と比較して異なるドメインコンテキストにあることを確認してください。ドメインは自動的にerrorイベントをリッスンし、独自のハンドラーに伝達します。そのため、そのハンドラーをリッスンしてエラー データを取得するだけです。さらに詳しい情報も無料で入手できます。(ドメインは非推奨です)。

Mike提案されているように、 strace を設定または使用することもできNODE_DEBUG=netます。どちらもノードが内部で行っていることを提供します。

于 2012-07-18T13:06:40.847 に答える
0

ほとんどの場合、すべての http.ServerResponse オブジェクトが終了する前に、サーバー ソケット接続が何らかの形で閉じられました。着信接続で何かを行う前に、すべての着信要求を停止したことを確認してください (着信接続は、着信 HTTP 要求とは別のものです)。

于 2013-10-11T08:53:46.110 に答える