检测客户端是否与 socket.io (NodeJ) 的网络断开连接



我正在创建一个带有node.js和 socket.io 的应用程序。我需要检测客户端是否与互联网断开连接并手动/自动触发socket.disconnect((。

我已经搜索过,但找不到任何解决方案。 这是我的客户端和服务器端代码。

const app = require('express')();
const server = require('http').Server(app);
const io = require('socket.io')(server);
const fs = require('fs');
server.listen(8005, () => console.log('app is running at 8005 port'));
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
})
const sockets = {};
io.sockets.on('connection', (socket) => {
socket.once('disconnect', function () {
console.log('-------disconencted', socket.userId); 
delete sockets[socket.userId];
});
socket.on('init', (data) => {
socket.userId = data.userId;
sockets[data.userId] = socket;
sockets[data.userId].emit('userOnline', { id : data.userId});
console.log(socket.userId,'--------useronline-----------',data)
});

socket.on('test', (data) => {
socket.emit('testResp', { id : 'sdfd'});
console.log('--------useronline-----------',socket.userId);
});
socket.on('total', data => {
socket.emit('totalResp', { users: Object.keys(sockets)})
console.log('--------total-----------',socket.userId);
})


})

客户端代码:

var socket = io('http://localhost:8005');
socket.on('userOnline', function (data) {
console.log(socket.userId, '---userOnline--------', data);
});
socket.on('testResp', function (data) {
console.log(socket.userId, '----testResp-------', data);
});
socket.on('totalResp', function (data) {
document.querySelector('#total_users_length').innerHTML = data.users.length;
console.log(socket.userId, '----totalResp-------', data);
});
document.querySelector('#init').addEventListener('click', function(){
socket.emit('init', {userId: document.querySelector('input').value});
});
document.querySelector('#test').addEventListener('click', function(){
socket.emit('test', {test: 'tst'});
});
document.querySelector('#total').addEventListener('click', function(){
socket.emit('total', {test: 'tst'});
});

我将用户的用户 ID 存储在套接字中,以便当用户与服务器断开连接时,我可以找到其 ID 并可以发送通知。 提前谢谢。

我认为您正在寻找断开连接事件,您可以尝试这样做。

socket.on('disconnect', function () {
io.emit('user disconnected');
});
});

由于您已经在代码中添加了它。 每当客户端未响应套接字在内部实现的检测信号时,套接字就会触发断开连接事件。您可以查看文档以获取更多信息 Socket.io 检查"断开连接检测"部分。

最新更新