2012-01-20 5 views
1

私は、他のノードアプリケーションとやり取りし、他のアプリケーションが正しく動作することを検証するテストハーネスに取り組んでいます。 node.jsの同じプロセスで、2つの異なるポートで2つの異なるプロトコルを聞くことができる必要があります。具体的には、単純な改行テキストプロトコル(acceptorone)とHTTP要求(acceptortwo)をインターセプトしています。私はこれを試してみてください、私はError: listen EADDRINUSEを得るときしかし1つのnode.jsプロセスで2つのnet.createServer()をリッスンすることはできますか?

var acceptorone = net.createServer(); 
acceptorone.listen(portone); 
var acceptortwo = http.createServer(); 
acceptortwo.listen(porttwo); 

は、私は現在、これを持っています。どちらのcodepathも独立して動作しますが、listen()のいずれかがコメントアウトされていれば問題ありません。

ビットを周回すると、いくつかのプロセスをフォークオフするソリューションが生成されます。しかし、これはテストフレームワークで実行されているので、すべて同じプロセス内に保つ必要があります。 statsdのようなアプリケーションでは、同時にTCPとUDPの接続を受け付けるクォームがないので、同時に複数のTCPソケットでリッスンすることに制限があるのはなぜか分かりません。誰もが問題に光を当てることができますか?ありがとう。

答えて

3

私は他の何かがあなたの例で壊れていなければならないと思います。 portoneporttwoの初期化方法を教えてください。

$ cat servers.js 
#!/usr/bin/node 
net = require('net') 
http = require('http') 

portone=10000 
porttwo=10001 

var acceptorone = net.createServer(); 
acceptorone.listen(portone); 
var acceptortwo = http.createServer(); 
acceptortwo.listen(porttwo); 
$ ./servers.js & 
[1] 6894 
$ netstat -anp | grep node 
(Not all processes could be identified, non-owned process info 
will not be shown, you would have to be root to see it all.) 
tcp  0  0 0.0.0.0:10000   0.0.0.0:*    LISTEN  6894/node  
tcp  0  0 0.0.0.0:10001   0.0.0.0:*    LISTEN  6894/node  
$ 
+0

Aha!これがテストフレームワークであったため、サーバーは繰り返し作成され、破棄されていました。私はアクセプタの1つだけをクローズ(閉じ込め)していました。これは私が見ていたEADDRINUSEにつながります。ご協力いただきありがとうございます! – wickedchicken

+0

優秀;私は、あなた自身の答えとしてそれを追加するべきだと思います。将来の訪問者は、より簡単に情報を見つけることができます。 :) – sarnold

関連する問題