но я не понимаю, как использование RedisStore в этом коде будет отличаться от использования MemoryStore.Кто-нибудь может мне это объяснить?
Разница в том, что при использовании значения по умолчанию MemoryStore
любое сообщение, которое вы отправляете в работнике, будет отправляться только клиентам, подключенным к тому же работнику, посколькунет МПК между рабочими.Используя RedisStore
, ваше сообщение будет опубликовано на сервере Redis, на который подписаны все ваши сотрудники.Таким образом, сообщение будет получено и передано всеми работниками и всеми подключенными клиентами.
Кроме того, в чем разница между настройкой socket.io для использования redisstore и созданием собственного клиента redis и установкой /получить свои собственные данные?
Я не очень знаком с RedisStore
, и поэтому я не уверен во всех различиях.Но делать это самостоятельно было бы вполне приемлемой практикой.В этом случае вы можете опубликовать все сообщения на сервере redis и прослушать их в обработчике сокетов.Возможно, это будет больше работы для вас, но вы также будете иметь больше контроля над тем, как вы хотите его настроить.Я сам сделал нечто подобное:
// Publishing a message somewhere
var pub = redis.createClient();
pub.publish("messages", JSON.stringify({type: "foo", content: "bar"}));
// Socket handler
io.sockets.on("connection", function(socket) {
var sub = redis.createClient();
sub.subscribe("messages");
sub.on("message", function(channel, message) {
socket.send(message);
});
socket.on("disconnect", function() {
sub.unsubscribe("messages");
sub.quit();
});
});
Это также означает, что вы должны позаботиться о более продвинутой маршрутизации сообщений, например, публикуя / подписываясь на разные каналы.С RedisStore
вы получаете эту функциональность бесплатно, используя каналы socket.io (io.sockets.of("channel").emit(...)
).
Потенциально большой недостаток в этом заключается в том, что сессии socket.io не распределяются между работниками.Это, вероятно, будет означать проблемы, если вы используете какой-либо транспорт с длинным опросом.