Должен ли я использовать отдельные соединения для Pub и Sub с Redis?

Я заметил, что Socket.io использует два отдельных соединения для Pub и Sub для Redis-сервера. Это может улучшить производительность? Или это просто переход к более организованным обработчикам событий и коду? Каковы преимущества и недостатки двух отдельных подключений и одно подключение для публикации и подписки.

P.S. Система нажимает на равное количество сообщений, которые она получает. Он подталкивает обновления к серверам, которые находятся на одном уровне в иерархии, поэтому нет мастера, нажимающего все обновления или подчиненные устройства, потребляющие сообщения. Один сервер будет иметь около 4-8 подписей, и он отправит сообщения на эти серверы.

P.S.S. Является ли это скорее работой для целевой очереди заданий? Причина, по которой я смотрю на Редиса. заключается в том, что я уже храню в нем некоторые общие объекты, которые используются всеми серверами. Должна ли очередь сообщений добавлять еще одно сетевое подключение?

Ответ 1

требуется, чтобы использовать два подключения для pub и sub. Абонентское соединение не может выдавать любые команды, отличные от subscribe, psubscribe, unsubscribe, punsubscribe (хотя @Antirez намекает на безопасный для пользователя ping в будущем). Если вы попытаетесь сделать что-нибудь еще, redis скажет вам:

-ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / QUIT allowed in this context

(обратите внимание, что вы не можете протестировать это с помощью redis-cli, так как это достаточно хорошо понимает протокол, чтобы предотвратить выдачу команд после того, как вы подписаны, но любой другой базовый инструмент сокета должен работать нормально)

Это связано с тем, что соединения с подписчиками работают по-разному - вместо того, чтобы работать на основе запроса/ответа, входящие сообщения теперь могут входить в любое время, незапрашиваемые.

publish является обычной командой запроса/ответа, поэтому ее необходимо отправлять по регулярному соединению, а не по подписке.