У меня проблема с подпиской / отказом от подписки Pusher с группами присутствия в довольно простом приложении чата. Одновременно должно быть два канала с подпиской. Пользователи переключаются между каналами при навигации между магистральными маршрутами, поэтому перезагрузка страниц не выполняется.
Похоже, что Pusher работает большую часть времени, но я получаю периодические ошибки для подписок на каналы.
Я написал два метода присоединения к каналу, которые отменяют подписку, если к одному из них присоединился предыдущий маршрут. Меня беспокоит, что в Pusher происходит что-то асинхронное, что ломает работу.
Мой код, связанный с толкателем, для одного канала:
window.pusher = new Pusher('<%= Pusher.key %>', {
authEndpoint: 'api/pusher/auth'
});
Маршрут:
this.groupFeed = this._pusherSubscribeGroup(group_id);
this.groupFeed.bind('new_conversation', function(data) {
var newConv = new App.Models.Conversation(data);
this.group.conversations().add(newConv);
}.bind(this));
Отписаться помощник:
_pusherSubscribeGroup: function (group_id) {
if (this._groupChannelName) {
window.pusher.unsubscribe(this._groupChannelName);
}
this._groupChannelName = 'presence-group-' + group_id;
return window.pusher.subscribe(this._groupChannelName);
}
Ошибка консоли:
Pusher : Error : {"type":"WebSocketError","error":{"type":"PusherError","data":{"code":null,"message":"Existing subscription to channel presence-group-1"}}}