Я пытаюсь создать распределенную информационную систему, использующую одноранговую архитектуру с многоадресной связью.
В первую очередь я начал реализовывать многоадресную связь. Я никогда этого не делал, поэтому у меня есть некоторые проблемы, которые трудно понять, почему он не работает должным образом.
Вот что мне удалось сделать:
Сервер
var SRC_PORT = 6025;
var PORT = 6024;
var MULTICAST_ADDR = '239.255.255.250';
var dgram = require('dgram');
var server = dgram.createSocket("udp4");
server.bind(SRC_PORT, function () {
setInterval(multicastNew, 4000);
});
function multicastNew() {
var message = new Buffer("Multicast message!");
server.send(message, 0, message.length, PORT , MULTICAST_ADDR, function () {
console.log("Sent '" + message + "'");
});
}
Клиент
var PORT = 6024;
var MULTICAST_ADDR = '239.255.255.250';
var dgram = require('dgram');
var client = dgram.createSocket('udp4');
client.on('listening', function () {
client.setBroadcast(true);
var address = client.address();
console.log('UDP Client listening on ' + address.address + ":" + address.port);
});
client.on('message', function (message, rinfo) {
console.log('Message from: ' + rinfo.address + ':' + rinfo.port + ' - ' + message);
});
client.bind(PORT, function () {
client.addMembership(MULTICAST_ADDR);
});
Когда запускаю сервер и клиент все работает. Сообщение об успешном завершении server.js отправляется на client.js.
Проблема
Проблема возникает, когда я хочу иметь несколько клиентов (узлов). В будущем я хотел бы сделать запрос всем клиентам (узлам), какую ошибку я совершаю, что не позволяет отправлять некоторую информацию от всех из них с помощью многоадресной рассылки.
Используя приведенный выше код, я не могу одновременно открыть 2 клиента для получения сообщения с сервера на обоих из них.
Вот ошибка при попытке подключить более 1 клиента:
events.js:85
throw er; // Unhandled 'error' event
^
Error: bind EADDRINUSE
at exports._errnoException (util.js:746:11)
at dgram.js:224:28
at dns.js:85:18
at process._tickCallback (node.js:355:11)
at Function.Module.runMain (module.js:503:11)
at startup (node.js:129:16)
at node.js:814:3
Я понимаю, что проблема в том, что я дважды использую один и тот же код (client.js) с одинаковыми портами и другими параметрами. Какую ошибку я совершаю, чтобы отправлять (через server.js) и получать успешные сообщения, используя многоадресную рассылку на большем количестве клиентов?