2015-10-08 4 views
1

Я пишу простое приложение 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 

Прошу прощения за длинный пост, но я хочу указать все детали, чтобы устранить (надеюсь) любые двусмысленности. Теперь к вопросу,

вот мой вопрос

Какие изменения я должен сделать для брокера, чтобы решить следующую задачу:

В случае нескольких отправителей и получателей, то брокер должен управлять портами, чтобы связать отправителя с получателем (с любыми указанными критериями).

Заранее спасибо!

ответ

1

Взгляните в этой книге «Шаблоны дизайна Node.js, Издатель: Издатель Packt Автор: Mario Casciaro ISBN: 978-1-78328-731-4 Год: 2014» на странице 361. Есть точная вещь, которую вы хочу сделать очень хорошее объяснение. Надеюсь, это поможет!

 Смежные вопросы

  • Нет связанных вопросов^_^