Я пишу простое приложение NodeJS клиентского сервера с использованием протокола UDP. Основной момент этого приложения заключается в том, что он требует использования брокера, функция которого в данном случае должна связывать отправителя с получателем. Требования говорят мне, что отправителю не нужно знать IP-адрес получателя и номер порта - ему нужно знать только соответствующий IP-адрес и адрес PORT. После этого брокер отправит сообщение клиента на сервер, исходя из IP-адреса сервера и ПОРТА.Приложение NodeJS для простого клиентского сервера UDP с использованием брокера
Для уточнения предыдущего (запутанный?) Абзаца, ниже вы найдете иллюстрации того, что я сделал до сих пор:
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.
Вот результаты:
Sender
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
Прошу прощения за длинный пост, но я хочу указать все детали, чтобы устранить (надеюсь) любые двусмысленности. Теперь к вопросу,
вот мой вопрос
Какие изменения я должен сделать для брокера, чтобы решить следующую задачу:
В случае нескольких отправителей и получателей, то брокер должен управлять портами, чтобы связать отправителя с получателем (с любыми указанными критериями).
Заранее спасибо!