2016-10-09 10 views
0

ファイルclient.jsrequire("child_process").fork()sからsource.jsというファイルがあります。これはすべてをきれいにするためです。しかし、connectを使用してhttpサーバーを作成すると、フォークのどこかで、別のプロセスが実行され、EADDRINUSEエラーが発生します。エラーを発生させずにhttpサーバを作成するには、どうすればこの問題を解決できますか?システムレベル、フォーク(AT別のファイルにフォークするとEADDRINUSEが発生しますか?

app.use(serve(cwd)); 
app.use(function(req, res){ // code }); 

var server = http.createServer(app); 
server.listen(8080); 
server.on("listening", function(){ 
    console.log("server running with: "); 
    console.log(" port: "+process.env.PORT); 
}); 
+0

'EADDRINUSE'が既に特定のTCPポートをリッスンし、何かがあることを意味し、そう短い答えはなり使い、ノード・バージョン)を非同期呼び出し(のいくつかの種類を使用して、またはによってそれを解決することができbe:_ "既に使用されているTCPポートを使用しない" _。長い答えは、あなたの質問が詳しく説明していない、あなたがしようとしていることが何であるかによって異なります。 – robertklep

+0

なぜあなたがフォークしようとしているのかという疑問からは分かりませんが、スケーラビリティの後に進むと仮定すると、 'cluster'モジュールをチェックすると、そのようなことがよりうまく管理されます。 – Paul

+0

@Paulクラスターは私のIDE上で私に大変なことを与えていますが、もっと良い選択肢がありますか? – baranskistad

答えて

1

)ちょっとのようなものです::(やや)これは以下のように

私source.jsは見え

  1. 現在の(親)プロセスのメモリを計算します
  2. 準備このメモリ
  3. コピーを含むプロセス全体でのサイズではなく、あまりにも制限:
    • 状態
    • オープンFDの
    • オープンソケット
    • など
  4. と、上記のステップは、非エラーを返した場合にのみ、この メモリをきれいにし、フォークした子を起動するためにそれを使用し、維持している場合a comm 親との通信チャネル

したがって、ステップ3でフォークはリスニングポートを再度開こうとするため、エラーを得る

伝統的な解決策はおそらくサーバーを実行する前にフォークされますが、ノードの意味では、理論的には、最初にフォークする理由はなく、さらに別の "ノード "プロセス。おそらく

あなたも約束を

+0

私はfork()が呼ばれた後にlistenを呼び出しています。 – baranskistad

+0

そして、フォークの理由は、開発をきれいにすることだと思っていました。私は使用すべき代替手段がありますか? – baranskistad

+0

これは、source.jsがやっていることによって異なります。 – mtsdev

関連する問題