使用代理的 NodeJS 简单 UDP 客户端服务器应用程序
NodeJS simple UDP client server application using broker
我正在使用 UDP 协议编写一个简单的客户端服务器 NodeJS 应用程序。这个应用程序的要点是它需要使用代理,在给定的情况下,代理的功能是 link 发送方与接收方。需求告诉我发送方不需要知道接收方的IP地址和端口号——它只需要知道broker对应的IP和PORT。之后,broker会根据服务器的IP和PORT,将客户端的消息发送到服务器。
为了澄清前面的(?令人困惑的)段落,您将在下面找到我到目前为止所做的说明:
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,但我想详细说明所有细节以消除(希望)任何歧义。现在,关于这件事,
这是我的问题
为了解决以下问题,我应该对代理进行哪些更改:
在多个发送者和接收者的情况下,代理应该管理端口到link发送者到接收者(使用任何指定的标准)。
提前致谢!
看看这本书 "Node.js Design Patterns,Publisher:Packt Publishing By: Mario Casciaro ISBN: 978-1-78328-731-4 Year: 2014" 第 361 页。有很好的解释,正是您想要做的事情。
希望它会有所帮助!
我正在使用 UDP 协议编写一个简单的客户端服务器 NodeJS 应用程序。这个应用程序的要点是它需要使用代理,在给定的情况下,代理的功能是 link 发送方与接收方。需求告诉我发送方不需要知道接收方的IP地址和端口号——它只需要知道broker对应的IP和PORT。之后,broker会根据服务器的IP和PORT,将客户端的消息发送到服务器。
为了澄清前面的(?令人困惑的)段落,您将在下面找到我到目前为止所做的说明:
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,但我想详细说明所有细节以消除(希望)任何歧义。现在,关于这件事,
这是我的问题
为了解决以下问题,我应该对代理进行哪些更改:
在多个发送者和接收者的情况下,代理应该管理端口到link发送者到接收者(使用任何指定的标准)。
提前致谢!
看看这本书 "Node.js Design Patterns,Publisher:Packt Publishing By: Mario Casciaro ISBN: 978-1-78328-731-4 Year: 2014" 第 361 页。有很好的解释,正是您想要做的事情。 希望它会有所帮助!