Почему у меня не может быть одного клиента Redis, выступающего в качестве PUB и Sub в одном соединении? - PullRequest
6 голосов
/ 05 сентября 2011

Моя ментальная модель была «чатом», где я подписан на определенный канал и могу публиковать сообщения на этот канал.

Ответы [ 2 ]

9 голосов
/ 06 сентября 2011

Поскольку pub / sub асинхронный, опубликованное сообщение может появиться в любое время, в том числе, когда вы ожидаете ответа на команду.

Несмотря на то, что redis является однопоточным, что обычно предотвращает подобные вещи, задержка в сети может вызвать некоторые интересные эффекты - в зависимости от содержимого сообщений вы можете получить действительный ответ на команду до того, как сервер фактическиполучил это.

Тем не менее, вы, вероятно, могли бы использовать одно соединение, если вы действительно хотите - «не должен» не то же самое, что «не может», и Redis следует простой философии дизайна: не пытатьсяне дать вам выстрелить себе в ногу.Тем не менее, гораздо проще просто открыть два соединения с сервером.Если вы достигнете пределов подключения с двумя подключениями на клиента, вы, вероятно, в любом случае довольно скоро столкнетесь с проблемами с одним подключением на клиента.

3 голосов
/ 16 июля 2014

Когда клиент выдает SUBSCRIBE или PSUBSCRIBE, это соединение переводится в режим pub / sub. На этом этапе действительны только команды, которые изменяют набор подписок. Когда набор подписок пуст, соединение возвращается в обычный режим.

Если вам нужно отправлять обычные команды в Redis в режиме pub / sub, просто откройте другое соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...