是否有可能在一个node.js进程中监听两个net.createServer()?

我正在开发与另一个节点应用程序交互的testing工具,并validation其他应用程序是否正常工作。 我需要能够在两个不同的端口上侦听两个不同的协议,在node.js的同一个进程中。 具体来说,我拦截一个简单的换行符文本协议(acceptorone)和HTTP请求(acceptortwo)。

我目前有这样的:

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

但是当我尝试这个时,我得到Error: listen EADDRINUSE 。 两个代码path都独立工作,如果其中一个listen()被注释掉,一切正常。

谷歌search得到一个解决scheme涉及分叉几个进程。 但是,这是运行在一个testing框架,所以我需要保持在同一过程中的一切。 像statsd这样的应用程序没有任何问题可以同时接受TCP和UDP连接,所以我不确定为什么同时监听多个TCP套接字会受到限制。 任何人都可以阐明这个问题? 谢谢。

我认为还有一些事情必须以你为榜样来打破。 你能告诉你如何初始化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 $