取消订阅PubNub通道以响应(之前)卸载事件

时间:2014-07-15 18:39:08

标签: javascript angularjs pubnub

我正在使用PubNub服务构建一个角色的多玩家游戏,包括在场插件。

因为我需要检测是否有人意外离开了游戏 - 为了向其他玩家发送消息并结束游戏 - 我试图在刷新页面或转到其他网址时取消订阅用户。但是,在Chrome中 - 与FireFox相反 - 没有触发在线状态事件,这可能意味着用户在离开页面之前没有取消订阅。

CODE:

 $(window).bind("unload",function(e) {

    PubNub.ngUnsubscribe({channel:$scope.game.channel});
    e.preventDefault();

    }); 

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

1 个答案:

答案 0 :(得分:3)

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

另外,我知道我将文档链接到JS API,但角度ngSubscribe允许大多数相同的参数。

希望有所帮助。