我正在创建一个带有node.js和socket.io的应用程序。我需要检测客户端是否已断开与internet的连接,并手动/自动启动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存储在socket中,这样当用户断开与服务器的连接时,我可以找到它的id并发送通知。
提前谢谢。