2012-01-20 2 views
1

Я работаю над тестовым жгутом, который взаимодействует с другим приложением узла и проверяет правильность работы другого приложения. Мне нужно уметь слушать два разных протокола на двух разных портах в том же процессе в node.js. В частности, я перехватываю простой текстовый протокол прерывания строки (acceptorone) и HTTP-запросы (acceptortwo).Можно ли прослушивать два файла net.createServer() в одном процессе node.js?

настоящее время у меня это:

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

Но когда я пытаюсь это я получаю Error: listen EADDRINUSE. Оба кодекса работают нормально независимо, все нормально, если один из прослушиваемых() s закомментирован.

Популяция немного портит решение, которое включает в себя отключение нескольких процессов. Однако это работает в тестовой среде, поэтому мне нужно держать все в одном процессе. Приложения, такие как statsd, не имеют никаких проблем с одновременным подключением TCP и UDP, поэтому я не уверен, почему было бы ограничение на одновременное прослушивание нескольких сокетов TCP. Может ли кто-нибудь пролить свет на этот вопрос? Благодарю.

ответ

3

Я думаю, что что-то еще должно быть разбито вашим примером; вы можете показать, как вы инициализируете portone и porttwo?

$ 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! Поскольку это было в тестовой среде, серверы создавались и уничтожались неоднократно. Я был близок() к одному из акцепторов, а не к тем и другим. Это привело к тому, что я видел. Спасибо за вашу помощь! – wickedchicken

+0

Отлично; Я думаю, вы должны добавить это как ответ самостоятельно, так что будущие посетители будут находить информацию более легко: _погрузите свою тестовую инфраструктуру. :) – sarnold

Смежные вопросы