2011-02-28 66 views
2

我有以下简单的脚本的NodeJS并要稍微修改它....Node.js的TCP代理

var sys = require('sys'), net = require('net'); 

var outputserver = net.createServer(function(stream) { 
    stream.addListener('data', function(data) { 
     sys.puts(data); 
     //Want to output anything from the clientserver data here 
    }); 
}).listen(7001, 'localhost'); 

var clientserver = net.createServer(function(stream) { 
    stream.addListener('data', function(data) { 
     sys.puts(data); 

    }); 
}).listen(7000, 'localhost'); 

我需要什么,从“客户端 - 服务器”进来的是输出到“outputserver”流。将有50-60客户端连接到了“客户端 - 服务器”

+0

更多的深思:从多个客户端的TCP连接可以轻松突破天真管道流。例如,HTTP服务器可能会在单个侦听器回调中收到完整的HTTP请求,但它也可能会在多个回调中接收它。想象一下当这些块混合时输出服务器接收到的内容。您需要添加一些成帧或应用程序智能(例如缓冲区,直到您有完整的请求),以便您可以正确“复用”。 – 2011-02-28 14:34:29

回答

5

这应该工作:

var util = require('util'), net = require('net'); 
var outServer = net.createServer(function(outStream) { 
    outStream.on('data', function(data) { 
    util.puts(data); 
    }); 
    var inServer = net.createServer(function(inStream) { 
    inStream.pipe(outStream, {end: false}); 
    }); 
    inServer.listen(7001, 'localhost'); 
}); 
outServer.listen(7000, 'localhost'); 
+0

我认为这里很重要的一点是,服务器接受输入将不会开始监听,直到连接到输出服务器。这是解决问题的一种方法,当没有什么可输出时该怎么办,或者如果有多个输出,该怎么办。 (同样重要的是,多个输出连接将导致此代码失败!)但这是所有思考的问题,并且它仍然是一个很好的答案。 – 2011-02-28 14:19:35

+0

@Shtééf:感谢您的输入。你说得很对 - 我只是想展示解决问题的最简单方法。 – 2011-02-28 14:43:42