Если вы хотите отправлять сообщения с одного компьютера на другой и не беспокоиться о обратных вызовах, тогда Redis pub / sub - лучшее решение.Его очень легко реализовать, а Redis действительно быстр.
Сначала вам нужно установить Redis на одну из ваших машин.
Его действительно легко подключить к Redis:
var client = require('redis').createClient(redis_port, redis_host);
Но не забывайте об открытии порта Redis в брандмауэре!
Затем вам нужно подписать каждую машину на какой-то канал:
client.on('ready', function() {
return client.subscribe('your_namespace:machine_name');
});
client.on('message', function(channel, json_message) {
var message;
message = JSON.parse(message);
// do whatever you vant with the message
});
Вы можете пропустить your_namespace
и использовать глобальное пространство имен, но вы будете сожалеть об этом рано или поздно.
Также очень легко отправлять сообщения:
var send_message = function(machine_name, message) {
return client.publish("your_namespace:" + machine_name, JSON.stringify(message));
};
Если вы хотите отправлять различные виды сообщений, вы можете использовать pmessages вместосообщения:
client.on('ready', function() {
return client.psubscribe('your_namespace:machine_name:*');
});
client.on('pmessage', function(pattern, channel, json_message) {
// pattern === 'your_namespace:machine_name:*'
// channel === 'your_namespace:machine_name:'+message_type
var message = JSON.parse(message);
var message_type = channel.split(':')[2];
// do whatever you want with the message and message_type
});
send_message = function(machine_name, message_type, message) {
return client.publish([
'your_namespace',
machine_name,
message_type
].join(':'), JSON.stringify(message));
};
Рекомендуется называть ваши процессы (или машины) по их функциональности (например, 'send_email'
).В этом случае процесс (или машина) может быть подписан более чем на один канал, если он реализует более одной функциональности.
На самом деле, возможно создать двунаправленную связь с использованием Redis.Но это более сложно, так как для каждого обратного вызова необходимо добавить уникальное имя канала обратного вызова для получения обратного вызова без потери контекста.
Итак, мой вывод такой: Используйте Redis, если вам нужно "отправить изабудьте "общение", найдите другие решения, если вам нужна полноценная двусторонняя связь .