Pusher 订阅和取消订阅过程

Posted

技术标签:

【中文标题】Pusher 订阅和取消订阅过程【英文标题】:Pusher subscribe and un-subscribe process 【发布时间】:2015-06-19 18:03:24 【问题描述】:

我在一个相当简单的聊天应用程序上遇到了与在线组有关的 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】:

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

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

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

提供Pusher javascript library logging 的输出将提供有助于确定原因的更多详细信息。

【讨论】:

以上是关于Pusher 订阅和取消订阅过程的主要内容,如果未能解决你的问题,请参考以下文章

订阅私人频道时的 Pusher/Laravel 回显错误:订阅频道的身份验证值无效:格式应为“密钥:签名”

Laravel Echo 没有订阅 Pusher Presence Channel,甚至在 Pusher 仪表板中也没有

取消 iOS 订阅

订阅 private-asdf 所需的 Pusher Private Channel Auth 信息

我在使用我的客户端的订阅过程中遇到了问题

EventBus事件通信框架 ( 订阅方法注册 | 注册 事件类型 - 订阅类 + 订阅方法 到指定集合 | 取消注册 数据准备 )