Я много читал о веб-сокетах и уже реализовал их в своей системе. Этот вопрос о том, как правильно их использовать. Я хочу правильно реализовать систему уведомлений и чата.
Для уведомлений у меня есть канал «уведомления / канал», а для чатов у меня есть канал «чаты / канал».
Разве эти два канала не слишком глобальны? Скажем, если на сайте 1 000 000 пользователей, это будет означать, что все эти пользователи будут в этих двух каналах. Когда одно уведомление отправляется другому конкретному пользователю, это означает, что сообщение отправляется через канал, на который подписано 1 000 000 пользователей.
То же самое с сообщениями чата. Допустим, пользователь хочет пообщаться с другим пользователем. Каждое сообщение будет проходить канал, на котором подписаны все пользователи, и, в конце концов, только целевой пользователь получит сообщение из-за переданного receive_id.
Как правильно обрабатывать каналы уведомлений и «приватные» каналы чата?
Будет ли более эффективным и безопасным создать для каждого пользователя «подканал» (групповые чаты и уведомления, E.G «уведомления / канал / пользователь1») или просто разрешить всем пользователям один большой канал?
Лично я бы решил это следующим образом:
Каждый пользователь имеет 1 подключение к веб-сокету. Это соединение будет использоваться для передачи всех данных. Я бы использовал формат JSON для передачи данных туда и обратно. Я бы использовал поле в структуре json, чтобы указать тип сообщения и другую информацию, такую как идентификатор комнаты чата. Итак, если я хочу отправить уведомление, это может быть что-то вроде этого (очень простой пример):
{
"type":"notification",
"message":"New Mail"}
Сообщение чата будет примерно таким:
{
"type":"chat",
"chatID":4756,
"message":"Hello, world!"}
Клиентская логика Javascript будет определять тип сообщения и что с ним делать. Логика на стороне сервера будет определять, «подписан» ли пользователь на указанную комнату чата, поэтому он будет знать, какие сообщения чата отправлять тому или иному пользователю. Это обеспечит его безопасность, поэтому вы не будете отправлять сообщения чата пользователям, которые не подписаны на номер комнаты.
Дайте мне знать, если вам нужны какие-либо разъяснения по этому методу.
Других решений пока нет …