Вы неправильно понимаете роль очереди сообщений.
Давайте на минутку забудем об очереди. У нас есть один или несколько клиентов и только один сервер. Клиенты подключаются к серверу либо через длинный опрос, либо через веб-сокет. Я предполагаю, что это все ясно.
client1 ---+
|
client2 ---+--- server
|
client3 ---+
Теперь предположим, что вы хотите масштабировать свой сервер, потому что у вас слишком много клиентов, настолько много, что ваш единственный сервер не может обработать их всех.
Решение состоит в том, чтобы запустить несколько серверов за балансировщиком нагрузки:
client1 ---+ +--- server1
| |
client2 ---+--- load balancer ---+
| |
client3 ---+ +--- server2
Пока все хорошо? Проблема с этим решением состоит в том, что каждый из серверов знает только о подмножестве клиентов, поэтому невозможно передать событие всем клиентам. Даже невозможно отправить событие в комнату, так как участники этой комнаты, вероятно, будут случайным образом распределены по разным серверам.
Итак, как я решил эту проблему? Я добавил очередь сообщений, которую все серверы используют для координации рассылок:
client1 ---+ +--- server1 ---+
| | |
client2 ---+--- load balancer ---+ +--- pub/sub queue
| | |
client3 ---+ +--- server2 ---+
При таком дизайне сервер может отправлять рассылку, отправляя событие подмножеству клиентов, о которых он знает, а затем попросить другие серверы сделать то же самое, опубликовав запрос в очереди.
Полезные нагрузки, которые вы видите на своем сервере Redis, являются внутренними и предназначены для использования серверами, которые являются частью кластера. Очередь не имеет прямого контакта с клиентами.
Надеюсь, это поможет!