Я использую Pusher для трансляции событий Laravel, однако я сталкиваюсь с сомнением:
Если у меня есть канал, давайте назовем его global_updates
который я хотел бы использовать для отправки глобальных обновлений, таких как новости или статус сайта, поэтому я просто делаю:
var pusher = new Pusher('#################', {
encrypted: true
});
var channel = pusher.subscribe('global_updates');
channel.bind('global_event', function(data) {
// stuff
});
Итак, пока здесь все идет хорошо, но что если я хотел бы использовать несколько событий для одного канала? Как мне это сделать? Я должен делать:
var pusher = new Pusher('#################', {
encrypted: true
});
var channel = pusher.subscribe('global_updates');
channel.bind('global_event', function(data) {
// stuff
});
channel.bind('global_event2', function(data) {
// stuff for other event
});
channel.bind('global_event3', function(data) {
// stuff for the 3rd event
});
Это хороший подход? Теперь, что если я хотел бы отправить сообщения peruser вместе с глобальным, скажем, есть канал для пользователя с именем user_(user_id)
но я все еще хочу потреблять глобальные события. Должен ли я подписаться на оба одновременно?
var pusher = new Pusher('#################', {
encrypted: true
});
var channel = pusher.subscribe('global_updates');
var UserChannel = pusher.subscribe('user_(user_id)');
channel.bind('global_event', function(data) {
// stuff
});
UserChannel.bind('per_user_event', function(data) {
// stuff
});
Дело в том, что у меня может быть около 100 подписанных пользователей, но не уникальных пользователей, поскольку каждый из них может быть подписан на несколько каналов, даже если они не потребляют сообщения.
Что я должен делать?
tl; dr: ваш подход обоснован.
Клиент может подписаться на любое количество каналов — ограничений нет. Единственный случай, когда есть какие-либо существенные ошибки, может быть при подписке на сотни каналов или подписке на многие частные каналы где каждая подписка приведет к вызов аутентификации (однако это может быть пакетным).
С точки зрения «хорошей практики», я бы порекомендовал иметь один канал для глобальных событий, полученных всеми пользователями, и у каждого пользователя должен быть свой канал, по которому отправляются события, которые должны только быть принятым этим пользователем. В целях безопасности я бы рекомендовал, чтобы пользовательский канал был частным. Если вы используете Event Broadcasting в Laravel, вам необходимо реализовать конечную точку аутентификации, для чего потребуется настроить Pusher Laravel Bridge.
Я бы порекомендовал Создание приложений Laravel в реальном времени с помощью Pusher (который я написал — я работаю на Pusher).
Других решений пока нет …