Pusher订阅和取消订阅流程

时间:2015-06-19 18:03:25

标签: javascript backbone.js websocket pusher

我在一个相当简单的聊天应用程序中遇到了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"}}}

1 个答案:

答案 0 :(得分:0)

  

Pusher:错误:{“type”:“WebSocketError”,“error”:{“type”:“PusherError”,“data”:{“code”:null,“message”:“现有订阅频道存在-group-1" }}}

该消息告诉您 - 就推送服务而言 - 由socket_id标识的此特定客户已订阅presence-group-1频道。从客户端的角度来看,这个错误通常并不是你真正需要担心的。

但是,如果用户通过导航路线快速订阅/取消订阅,则值得获得更多信息以确保完全正确。从提供的代码和描述中,无法确定问题是在推送服务还是客户端应用程序中。

提供Pusher JavaScript library logging的输出将提供更多详细信息,以帮助确定原因。