有没有办法让客户端在套接字断开时发送服务器数据?

时间:2011-11-27 11:06:04

标签: javascript socket.io

客户端是否可以在收到套接字数据时发送它 断开连接(用户关闭浏览器或标签)? 因为,我发现断开连接上的默认绑定不接受任何输入数据。

//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中存储字符串数据吗?例如, 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'); 
}); 

2 个答案:

答案 0 :(得分:1)

您无法在断开连接时发送数据的原因是因为您已断开连接。你问的问题有点类似于说“我们挂断电话后,我还能和电话里的人说话吗?”

如果你想发出'离开'事件,那么你仍然必须在服务器端的'connect'处理程序中捕获它:

如:

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

      });
})

您的离开活动将在连接终止之前到来。断开连接仅在服务器成功断开连接时引发,因此无法接收任何消息。

尝试一下,告诉我这是否有效:)

答案 1 :(得分:0)

改为使用

var len = someJsonArray.length, output = [];
for(var i = 0; i < len; i++){
   output.push(someJsonArray[i].id)
}

console.log(output);

并在服务器端

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