pusher api:如何检查连接是否已建立?

pusher api: how can I check if the connection is established?

我正在使用推送器接口,我想为推送器服务不可用的环境编写回退。我找不到检查推送器订阅是否正常的方法。

我试过了

$scope.channel.bind('pusher:error', function() {
        console.log("pusher:error");
    });

还有 pusher:subscription_error 但它什么都不做。

如有任何帮助,我们将不胜感激。

重要的是要强调 connectionsubscription 之间的区别。

  • 连接 是与 Pusher 的持久连接,所有通信都通过该连接进行。
  • 一个订阅是一个数据请求。在 Pusher 中,这些由 channels 表示。订阅和相关数据使用已建立的连接,多个订阅在单个连接上多路复用。

要确定 Pusher 服务是否可访问,您应该检查连接状态。

但是,如果您看到这个,我也建议您联系 Pusher support,因为这不应该发生。

检测和查询连接状态

可以通过绑定到连接对象上的事件来检测连接状态。

pusher.connection.bind('state_change', function(states) {
  var prevState = states.previous;
  var currState = states.current;
});

您现在可以额外获取状态。

var currentState = pusher.connection.state;

完整的文档可以在这里找到: https://pusher.com/docs/client_api_guide/client_connect#connection-states

问题中的示例似乎使用了 Angular,因此您需要从 $scope 获取对 connection 对象的引用。如果您使用的是 pusher-angular,那么 API 应该与普通的 Pusher 库相同。

订阅状态

您可以绑定两个事件来确定订阅的结果:

  • pusher:subscription_succeeded
  • pusher:subscription_error

使用这些的代码如下所示:

var channel = pusher.subscribe('my-channel');

channel.bind('pusher:subscription_succeeded', function() {
  // Yipee!!
});

channel.bind('pusher:subscription_error', function() {
  // Oh nooooos!
});

有关成功事件的文档可在此处找到: https://pusher.com/docs/client_api_guide/client_events#subscription_succeeded

有关错误事件的文档可在此处找到: https://pusher.com/docs/client_api_guide/client_events#subscription_error