我使用node.js和socket.io创建聊天应用程序。2分钟后断开事件火灾
socket.on('disconnect',function(data){
console.log("disconnected");
}
一旦客户端断开连接(选项卡关闭或网络问题),就会触发此事件。
我希望在客户端断开连接1分钟后触发断开连接事件。那可能吗?在socket.io中有没有配置?
我使用node.js和socket.io创建聊天应用程序。2分钟后断开事件火灾
socket.on('disconnect',function(data){
console.log("disconnected");
}
一旦客户端断开连接(选项卡关闭或网络问题),就会触发此事件。
我希望在客户端断开连接1分钟后触发断开连接事件。那可能吗?在socket.io中有没有配置?
该功能未嵌入到socket.io中。当套接字断开时,disconnect事件触发。期。如果您想在断开连接后1分钟触发某个活动,则可以创建自己的计时器来完成此操作。
socket.on('disconnect',function(data){
setTimeout(function() {
console.log("disconnected");
}, 60 * 1000);
}
如果要触发事件只有当你有救了setTimeout()
定时器客户端不会在1分钟内重新连接,然后就可以代码也,但它是一个涉及多一点和然后取消它,如果特定的客户端重新连接定时器触发。
根据你放什么在你的答案,这就是我认为这是一个改进版本:
(function() {
var origClose = socket.onclose;
socket.onclose = function(reason){
var self = this;
var args = Array.prototype.slice.call(arguments);
/* Delay of 1 second to remove from all rooms and disconnect the id */
setTimeout(function() {
origClose.apply(self, args);
}, 60 * 1000);
}
})();
Socket.onclose在断开连接事件之前断开后立即触发。 断开事件可以通过如下更改被延迟。
socket.onclose = function(reason){
console.log(socket.adapter.sids[socket.id]);
Object.getPrototypeOf(this).onclose.call(this,reason);
/* Delay of 1 seconds to remove from all rooms and disconnect the id */
setTimeout(function() {
if (!this.connected) return this;
debug('closing socket - reason %s', reason);
this.leaveAll();
this.nsp.remove(this);
this.client.remove(this);
this.connected = false;
this.disconnected = true;
delete this.nsp.connected[this.id];
this.emit('disconnect', reason);
}, 60 * 1000);
}
为什么你在'setTimeout()'之前调用常规'onclose()'?这不会只是导致断开事件立即触发吗?这不是打败你在做什么的目的吗?难道你不能在你的超时时间内调用prototype.onclose并且不复制所有你正在复制的代码,如果实现改变将来很容易破解的代码。我看到你在这方面得到了什么,看起来你可以在这个方向上解决你的问题,但你发布的代码看起来不正确。 – jfriend00 2015-12-23 21:28:13
看看我在之前的回答结束时提出了什么,我认为这是一个改进版。仅供参考,你的工作并不像你所说的那样,因为在setTimeout()回调中'this'不正确。 – jfriend00 2015-12-23 22:36:49
为什么这会有用?在接收到断开连接事件后,很容易在一分钟内添加自己的超时时间。 – spirulence 2015-01-26 19:14:04
如果在socket.io中已经有了一个选项,我可以使用它来代替编写自己的函数来超时。 – Vishnu 2015-01-26 19:16:50