响应(在)卸载事件取消订阅PubNub通道

Unsubscribe to a PubNub channel in response to (before)unload event

本文关键字:PubNub 通道 取消 事件 卸载 响应      更新时间:2023-09-26

我正在使用PubNub服务在angular中构建一个多人游戏,包括presence插件。

因为我需要检测是否有人离开游戏意外-为了发送消息给其他玩家和结束游戏-我试图取消订阅用户时,他刷新页面或转到其他一些url。然而,在Chrome中——与FireFox相反——没有触发存在事件,这可能意味着用户在离开页面之前没有取消订阅。

代码:

 $(window).bind("unload",function(e) {
    PubNub.ngUnsubscribe({channel:$scope.game.channel});
    e.preventDefault();
    }); 

我知道这些事件(beforeunloadunload)是有问题的,浏览器支持很差,这可能是失败的原因。如果是这种情况,我可以使用其他跨浏览器检测方法吗?

没有可靠的方法来捕捉浏览器关闭。"beforeUnload"事件是你最好的选择,但大多数移动浏览器不会触发它。在PubNub中处理用户关闭浏览器的最佳方法是在订阅时指定心跳(http://www.pubnub.com/docs/javascript/api/reference.html#subscribe)。心跳告诉PubNub在非正常断开连接(例如关闭浏览器)之后应该等待多少秒,然后才认为用户超时了。这是默认值为320,可以设置为低至6秒(> 5)。它仍然不会立即生效,但您将在浏览器关闭后6秒收到存在"超时"动作。心跳过低可能会影响你的电池寿命,所以要小心。

另外,我知道我把文档链接到了JS API,但是angular的ngSubscribe允许大部分相同的参数。

希望对你有帮助。