gpt4 book ai didi

javascript - 如何使用 socketio 使用 Sails 实时显示在线/离线用户?

转载 作者:行者123 更新时间:2023-11-30 17:30:48 26 4
gpt4 key购买 nike

我的实时聊天应用程序基于 SailsSocketIO .它显示所有用户以及可用的在线用户。当用户登录时,发出 UserConnected 套接字,当用户断开连接时,发出 UserDisconnected 套接字,我在 config/sockets.js 中的服务器端 socketio 代码是

onConnect: function(session, socket) {
if (session.passport) {
if (session.passport.user && socket.id) {
sails.io.sockets.emit('UserConnected', {userID : session.passport.user}); }
}
}
//// By default: do nothing
//// This is a good place to broadcast a disconnect message, or any other custom socket.io logic
},

onDisconnect: function(session, socket) {
if (session.passport) {
if (session.passport.user && socket.id) {
sails.io.sockets.emit('UserDisconnected', {userID : session.passport.user});
}
}
//// By default: do nothing
//// This is a good place to broadcast a disconnect message, or any other custom socket.io logic
}

问题是,当一个用户刷新页面时,它显示与另一个用户连接和断开连接,一个主要问题是,如果一个用户登录两个不同的浏览器并且关闭任何一个浏览器,则显示用户与其他用户断开连接但用户实际上在另一个浏览器中可用。
我将如何修改/编码以便解决这些问题?
提前致谢

最佳答案

@InternalFX 贴出了一个好方法;您可以在 Sails v0.10.x 上使用的替代方案是:

  onConnect: function(session, socket) {

// If this is a logged in user, subscribe the socket to a
// custom "loggedInCount" room
if (session.user) {
var roomName = 'loggedIn'+session.user.id;
sails.sockets.join(socket, roomName);
// If this is the first subscriber, the user is just coming online,
// so notify any subscribers about the state change.
if (sails.sockets.subscribers(roomName).length == 1) {
User.message(session.user.id, {state: 'online'}, socket);
}
}

},

onDisconnect: function(session, socket) {

if (session.user) {
var roomName = 'loggedIn'+session.user.id;
sails.sockets.leave(socket, roomName);
// If this was the last subscriber, the user is going offline,
// so notify any subscribers about the state change.
if (sails.sockets.subscribers(roomName).length == 0) {
User.message(session.user.id, {state: 'offline'}, socket);
}
}

},

这使用 Sails 的内置 pubsub 架构在特定用户上线或下线时通知连接的套接字。它需要套接字订阅他们想知道的用户实例(在客户端使用类似 socket.get('/user') 的东西),这是一个很好的实践。这样您就可以只收到您关心的用户的通知(例如,如果您有“ friend 列表”)。

关于javascript - 如何使用 socketio 使用 Sails 实时显示在线/离线用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23101898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com