Ответ 1
требуется, чтобы использовать два подключения для pub и sub. Абонентское соединение не может выдавать любые команды, отличные от subscribe
, psubscribe
, unsubscribe
, punsubscribe
(хотя @Antirez намекает на безопасный для пользователя ping
в будущем). Если вы попытаетесь сделать что-нибудь еще, redis скажет вам:
-ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / QUIT allowed in this context
(обратите внимание, что вы не можете протестировать это с помощью redis-cli, так как это достаточно хорошо понимает протокол, чтобы предотвратить выдачу команд после того, как вы подписаны, но любой другой базовый инструмент сокета должен работать нормально)
Это связано с тем, что соединения с подписчиками работают по-разному - вместо того, чтобы работать на основе запроса/ответа, входящие сообщения теперь могут входить в любое время, незапрашиваемые.
publish
является обычной командой запроса/ответа, поэтому ее необходимо отправлять по регулярному соединению, а не по подписке.