我正在使用node.js和socket.io创建一个应用程序。我需要检测客户端是否已从互联网断开连接,并手动/自动断开了fire 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'});
});
我将用户的userId存储在套接字中,以便当用户与服务器断开连接时,我可以找到其ID并可以发送通知。 预先感谢。
答案 0 :(得分:1)
我认为您正在寻找断开连接事件,可以尝试一下。
socket.on('disconnect', function () {
io.emit('user disconnected');
});
});
由于您已经在代码中添加了它。每当客户端不响应套接字在内部实现的心跳时,套接字就会触发断开事件。您可以检查文档以获取更多信息 Socket.io选中“断开连接检测”部分。