使用代理的NodeJS简单UDP客户端服务器应用程序

我正在使用UDP协议编写一个简单的客户端服务器NodeJS应用程序。 这个应用程序的要点是,它需要使用一个经纪人,其中的function,在给定的情况下,是连接发件人和接收者。 这些要求告诉我,发件人不需要知道接收者的IP地址和端口号 – 只需要知道代理的相应IP和端口。 之后,代理将根据服务器的IP和端口将客户端的消息发送到服务器。

为了澄清以前的(混淆)段落,下面你会发现我迄今为止所做的一个例子:

sender.js

var PORT1 = XXXXX; var HOST = '127.0.0.1'; var fs = require('fs'); var dgram = require('dgram'); var client = dgram.createSocket('udp4'); fs.readFile('Path/to/the/file','utf8', function (err, data) { if (err) throw err; var message = new Buffer(data); client.send(data, 0, message.length, PORT1, HOST, function(err, bytes) { if (err) throw err; console.log('UDP message sent to ' + HOST +':'+ PORT1); client.close(); }); }); 

上面的代码从一个文件读取,将其内容存储在缓冲区中,并将其发送到代理的端口(代理侦听同一端口)和主机(在我的情况下是本地主机)。

broker.js

 var PORT1 = XXXXX; var PORT2 = YYYYY; var HOST = '127.0.0.1'; var dgram = require('dgram'); var server = dgram.createSocket('udp4'); var client = dgram.createSocket('udp4'); server.on('listening', function () { var address = server.address(); console.log('UDP broker listening on ' + address.address + ":" + address.port); }); server.on('message', function (message, remote) { client.send(message, 0, message.length, PORT2, HOST, function(err, bytes) { if (err) throw err; console.log('UDP message sent to ' + HOST +':'+ PORT2); client.close(); }); console.log(remote.address + ':' + remote.port +' - ' + message); }); server.bind(PORT1, HOST); 

这里,PORT1是代理侦听的端口(等待来自发送方的入局消息),PORT2是将消息发送给接收方的端口(相应地,接收方侦听此端口)。

receiver.js

 var PORT2 = YYYYY; var HOST = '127.0.0.1'; var fs = require('fs'); var dgram = require('dgram'); var server = dgram.createSocket('udp4'); var parser = require('xml2json'); server.on('listening', function () { var address = server.address(); console.log('UDP receiver listening on ' + address.address + ":" + address.port); }); server.on('message', function (message, remote) { console.log(remote.address + ':' + remote.port +' - ' + message); var contents = fs.writeFile("/Path/To/Written/File", parser.toJson(message), function(error){ if (error) { console.log("error writing"); } console.log("File was saved"); }); }); server.bind(PORT2, HOST); 

接收器从代理获取消息并将其写入JSON格式的文件。

结果如下:

寄件人

 UserName's-MacBook-Pro:UDP server UserName$ node sender.js UDP message sent to 127.0.0.1:XXXXX 

经纪人

 UserName's-MacBook-Pro:UDP server UserName$ node broker.js UDP broker listening on 127.0.0.1:XXXXX 127.0.0.1:60009 - <?xml version="1.0"?> <Some XML content here> </XML content ends here> UDP message sent to 127.0.0.1:YYYYY 

接收器

 UserName's-MacBook-Pro:UDP server UserName$ node receiver.js UDP receiver listening on 127.0.0.1:YYYYY 127.0.0.1:63407 - <?xml version="1.0"?> <XML contents here> </XML content ends here> File was saved 

我很抱歉,这个post很长,但是我想指定所有的细节来消除(希望)任何含糊之处。 现在,就此事,

这是我的问题

为了解决以下问题,我应该为经纪人做些什么改变:

如果有多个发件人和收件人,代理人应该pipe理端口以将发件人链接到收件人(使用任何指定的标准)。

先谢谢你!

请看本书“Node.jsdevise模式,出版商:Packt出版社:Mario Casciaro ISBN:978-1-78328-731-4年份:2014”,第361页。您要做的确切事情很好的解释。 希望它会帮助!