Javascript 客户端是否有办法在套接字断开连接时发送服务器数据?

Javascript 客户端是否有办法在套接字断开连接时发送服务器数据?,javascript,socket.io,Javascript,Socket.io,客户端在收到套接字数据时是否可以发送套接字数据 断开连接(用户关闭浏览器或选项卡)? 因为,我发现断开连接时的默认绑定不接受任何输入数据 //在服务器端 socket.on('disconnect',function(){ //在其他绑定中,它将“数据”作为输入,但这不是 }); 我试图通过使用jQuery的卸载方法来解决这个问题 如下 //在客户端 $(窗口).unload(函数(){ 发出('defect','I'ming'); }); 但是,卸载时它似乎根本不会发出任何信号。(卸载

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

//在服务器端
socket.on('disconnect',function(){
//在其他绑定中,它将“数据”作为输入,但这不是
}); 
我试图通过使用jQuery的卸载方法来解决这个问题 如下

//在客户端
$(窗口).unload(函数(){
发出('defect','I'ming');
}); 
但是,卸载时它似乎根本不会发出任何信号。(卸载时可能
socket
超出范围?) 当客户端断开连接时,是否有办法通过websocket将数据发送到服务器

第二,有没有办法在套接字中存储字符串数据?例如,
socket.userName=userNameVar

--更新-- 下面是我如何在服务器端设置环境

io.sockets.on('connection',函数(socket){
socket.on('defect',函数(数据){
控制台日志(数据);
console.log(“用户左”);
});
socket.on('disconnect',function()){
console.log(“用户断开连接”);
});
});
下面的代码在客户端

var socket=io.connect(hostVar);
$(窗口).unload(函数(){
发出('defect','I'ming');
}); 

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

如果要发出“depart”事件,则仍必须在服务器端的“connect”处理程序中捕获它:

例如:

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

      });
})
您的离开事件将在连接终止之前发生。断开连接仅在成功断开连接时由服务器引发,因此它无法接收任何消息


试试看,告诉我这是否有效:)

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

如果要发出“depart”事件,则仍必须在服务器端的“connect”处理程序中捕获它:

例如:

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

      });
})
您的离开事件将在连接终止之前发生。断开连接仅在成功断开连接时由服务器引发,因此它无法接收任何消息

试试看,告诉我这是否有效:)

用这个代替

$(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
      });
})
用这个代替

$(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
      });
})

是的,我这样做了,但是jQuery.unload事件不会发送该数据。。。我将提供更多关于updatehmmm的代码。您的socket对象在那个阶段仍然有效吗?执行警报(socket.toString())以查看对象是否仍然存在。显然,警报不会显示…我猜我的代码中某处有问题。。我会寻找它好的,当我在Chrome plus中测试它时,它不会显示
警报
消息,但Firefox似乎执行得很好。但是,即使使用Firefox,套接字似乎也不会向服务器发出
deep
msg。尝试查看是否可以在其他事件的jQuery中的其他位置发出套接字。是的,我这样做了,但jQuery.unload事件不会发送该数据。。。我将提供更多关于updatehmmm的代码。您的socket对象在那个阶段仍然有效吗?执行警报(socket.toString())以查看对象是否仍然存在。显然,警报不会显示…我猜我的代码中某处有问题。。我会寻找它好的,当我在Chrome plus中测试它时,它不会显示
警报
消息,但Firefox似乎执行得很好。但是,即使使用Firefox,套接字似乎也不会向服务器发出
deep
msg。尝试查看是否可以在其他事件的jQuery中的其他位置发出套接字。请添加更多详细信息。请添加更多详细信息。