2011-11-27 30 views
1

当客户端断开 (用户关闭浏览器或选项卡)时是否可以发送套接字数据? 因为,我发现在断开连接时的默认绑定不会接收任何输入数据。有没有办法让客户端在套接字断开的情况下发送服务器数据?

//on server side 
socket.on('disconnect',function(){ 
    //in other binds, it takes 'data' as an input but this does not 
}); 

我试图使用jQuery的卸载方法 像下面

//on client side 
$(window).unload(function(){ 
    socket.emit('depart','I am leaving'); 
}); 

然而,它似乎并没有在所有发出的卸载来解决这个问题。 (也许socket在卸载时超出范围?) 当客户端断开连接时,有没有办法通过websocket将数据发送到服务器?

其次,有没有什么办法可以将字符串数据存储在套接字中?例如, socket.userName = userNameVar;

--update-- 这是我如何设置环境对服务器端

io.sockets.on('connection',function(socket){ 
    socket.on('depart',function(data){ 
     console.log(data); 
     console.log("user left"); 
    }); 
    socket.on('disconnect',function(){ 
     console.log("user disconnected"); 
    }); 
}); 

和下面的代码是在客户端。

var socket = io.connect(hostVar); 

$(window).unload(function(){ 
    socket.emit('depart','I am leaving'); 
}); 

回答

1

不能在断开连接时发送数据的原因是因为您断开连接。你所问的有点类似于说:“在我挂断电话后,我还可以和他通话?”

如果你想发出“出发”的事件,那么你还是要捕捉它在服务器端的“连接”处理程序中:

如:

io.socket.on('connection', function(socket) { 
     socket.on('depart', function(msg) { 
      // you should get depart message here 

     }); 
}) 

你的出发事件将在连接终止之前来。断开连接仅在服务器成功断开连接后引发,因此它不能接收任何消息。

给它一个尝试,并告诉我,如果这个工程:)

+0

是的,我做到了,但jQuery.unload事件将不会发送该数据...我将在更新 – user482594

+0

更多代码嗯,你的套接字对象仍然在该阶段的功能?做一个警报(socket.toString())来查看对象是否仍然存在。 –

+0

显然,警报不会显示出来......猜猜我的代码在某处存在问题..我会寻找 – user482594

0

使用这个代替

$(window).on('beforeunload',()=>{ 
     socket.emit('page_unload'); 
}); 

,并在服务器端

io.socket.on('connection', function(socket) { 
     socket.on('page_unload', function(msg) { 
      // client has reloaded page or closed page 
     }); 
}) 
+0

请增加更多细节。 –

相关问题