推送订阅和取消订阅过程

Pusher subscribe and un-subscribe process

本文关键字:过程 取消      更新时间:2023-09-26

我在一个相当简单的聊天应用程序上遇到了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 库日志记录的输出将提供更多有助于确定原因的详细信息。