Несколько каналов Websocket против одного канала + обработка на стороне сервера [GroupChat]

Допустим, мы хотим создать частные чаты, где пользователь может общаться в небольших группах. Пользователь может присоединиться к нескольким / х группам. В каждом случае мне нужно создать уникальную группу на сервере и подписать пользователя на них. Какой подход является рекомендуемым / более эффективным способом:


[1] На стороне сервера я создаю класс комнаты и добавляю новую комнату каналы для каждого группового чата, например «chats / room-asdhqk1», «chats / room-fwuefhw1», «chats / room-awsdhqwd2». Теперь некоторые указанные пользователи могут присоединиться к этому каналу и добавлены в список клиентов группы. На клиентской стороне пользователи подписываются на групповые каналы, в которые они были добавлены.

Проблема: Когда пользователь находится в х каналах, мне нужно подписать его на эти х каналов после боковой загрузки.
Хорошо: трансляция в определенную группу может осуществляться через имя канала группы, и все пользователи, подписанные на этот канал, автоматически получат сообщение, поскольку они подписались на канал в части js.


[2] Каждый пользователь получает свой собственный канал, например «уведомления / пользователь-1», «уведомления / пользователь-2» …. На стороне сервера я создаю группы в классе комнат (без каналов). Пользователь может быть добавлен в определенную комнату, добавив его в подсписок списка комнат. Когда они общаются друг с другом, сервер перебирает подписанных пользователей группового чата и отправляет каждому каналу уведомлений пользователей сообщение — здесь вообще нет группового канала — только для пользовательских каналов.

Проблема: я не могу легко передать сообщение, мне нужно перебрать каждого подписанного пользователя и отправить сообщение на его канал уведомлений. Кроме того, я не могу использовать метод «публикации» во внешнем интерфейсе, чтобы легко публиковать сообщения в канал, поскольку пользователи разделены по разным каналам.

Хорошо: в конце концов, метод вещания сделает то же самое: перебирает список подписчиков. Для отправки сообщений я мог бы легко реализовать метод RPC, который делает то же самое, что и метод «публикации» — поиск подписанных пользователей группы и отправка им сообщения. При таком подходе пользователю не нужно подключаться к x каналам на стороне клиента, он просто имеет один канал, который обрабатывает все.

(Я знаю, что для второго подхода требуется толкатель (например, zmq)).


Каковы ваши мнения? Я думаю, что второй лучше, потому что мне не нужно подписывать пользователя на стороне клиента на x — каналы. Это не будет производительным, если пользователю необходимо сначала подключиться, например, к. 500 каналов.

С уважением.

6

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]