我在一个相当简单的聊天应用程序上遇到了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"}}}
推送器: 错误 : {"类型":"WebSocketError","错误":{"类型":"推送器错误","数据":{"代码":空,"消息":"频道状态组-1"}}} 的现有订阅
该消息告诉您,就 Pusher 服务而言,由socket_id
标识的此特定客户端已订阅presence-group-1
通道。从客户端的角度来看,此错误通常不是您实际需要担心的事情。
但是,如果用户通过导航路线快速订阅/取消订阅,则值得获取更多信息以完全确定。从提供的代码和说明中,无法确定问题出在 Pusher 服务还是客户端应用程序中。
提供 Pusher JavaScript 库日志记录的输出将提供更多有助于确定原因的详细信息。