如何在nodejs,socketio中检查在线用户?
Posted
技术标签:
【中文标题】如何在nodejs,socketio中检查在线用户?【英文标题】:How to check online user in nodejs, socketio? 【发布时间】:2020-02-07 11:24:47 【问题描述】:如何查看用户是否在线? 我知道我们可以通过“断开连接”事件来跟踪它,但我不知道如何将它保存在我的套接字服务器中。 我在 React 中编写的客户端,但它只能发送 accessToken。 谢谢
socket.on('disconnect', function ()
console.log('user disconnected');
);
【问题讨论】:
***.com/questions/16518153/… 【参考方案1】:要保持在线状态,您需要将用户的在线状态保存在数据库中。
当用户连接时将其设置为在线,在断开连接时将其设置为离线。您可以使用套接字事件来发出用户在线状态,以便实时反映它
聊天工具
const redis = require('socket.io-redis');
module.exports = (socket)=>
global.io.adapter(redis( host: redisUrl, port: redisPort));
global.io.on('connection', (socket) =>
try
// Replace setOnlineOrOffline with your method .
setOnlineOrOffline(socket.handshake.query.userId,socket.id,true);
catch(e)
console.error(e)
socket.on('disconnect', (a) =>
// Replace setOnlineOrOffline with your method .
setOnlineOrOffline(null,socket.id,false);
);
);
;
App.js 添加
let socketio = require('socket.io');
let chatUtils = require('path-to-chat-util');
var socket = socketio(http,
transports: ['websocket', 'polling'],
pingInterval: 60000
);
chatUtils(socket);
setOnlineOrOffline功能
module.exports.setOnlineOrOffline = (userId,socketId,status)=>
if(userId)
// save userId,socketId,status To DB, keep socketId in an array since same user can connect from multiple browser tabs.
// your save to db method.
// emit the status to all users using, add necessary code to send data to all users.
global.io.emit('onlineStatus',status);
return
如果您计划扩展服务器 horizontally
,请使用 socket.io-redis
模块,并让 redis server
在 application servers
之外运行。
【讨论】:
以上是关于如何在nodejs,socketio中检查在线用户?的主要内容,如果未能解决你的问题,请参考以下文章
带有温度传感器的 SocketIO - 我几乎在我的 Raspberry Pi 上使用 NodeJS 和 SocketIO 完成了 DS18B20,如何提取 Promise data ?