gpt4 book ai didi

node.js - 在 Socket.io 中获取连接的用户/客户端列表

转载 作者:搜寻专家 更新时间:2023-11-01 00:29:08 25 4
gpt4 key购买 nike

我需要从 socket.io 获取已连接用户或客户端的列表以进行实时聊天。

List of connected user image

我设法显示连接到我的路由/API (localhost:3003/chat) 的客户端列表。谁曾经访问过这条路线(授权与否)将如图所示显示。我的问题是在初始访问时,或者如果您尝试刷新浏览器,客户端将看不到当前连接的用户或客户端连接的历史记录。

这是我的服务器端 socket.io 示例代码,

 module.exports.initializeSocketIO = (io) => {
io.on('connection', (socket) => {
socket.on('connectedUser', (users) =>{
socket.name = users;
io.emit('connectedUser', users);
console.log(users + ' has joined the chat.');
});

socket.on('disconnect', (user) => {
io.emit('disconnect', user);
console.log(socket.name + ' has left the chat.');
});

socket.on('chatMessage', (from, msg) => {
io.emit('chatMessage', from, msg);
console.log('Message From: ' + from + '\n -' + msg);
});

socket.on('showTypingUser', (user) => {
io.emit('showTypingUser', user);
});
});
};

这是我的客户端 socket.io 示例代码

var socket = io(); 

socket.on('connectedUser', function(users){
var name = $('#currentUser').val();
var me = $('#user').val(name);
socket.name = users;
if(users != me){
$('#connectedUser').append('<tr><td>' + '<b>' + users + '</b>' + ' has
joined the discussion. </td></tr>' );
}
});


socket.on('chatMessage', function(from, msg){
var me = $('#user').val();
var color = (from == me) ? 'green' : '#009afd';
var from = (from == me) ? 'Me' : from;
var date = new Date();
if(from == "Me"){
$('#messages').append('<div class="speech-bubble">' + '<b style="color:' + color + '">' + from + ':</b> ' + msg + ' <span class="pull-right" style="color:gray">' + date.toLocaleString() + '</span>' +'</div>');
} else {
$('#messages').append('<div class="speech-bubble-reply">' + '<b
style="color:' + color + '">' + from + ':</b> ' + msg + ' <span class="pull-right" style="color:gray">' + date.toLocaleString() + '</span>' +'</div>');
}
});


socket.on('showTypingUser', function(user){
var name = $('#currentUser').val();
var me = $('#user').val(name);
if(user != me) {
$('#notifyUser').text(user + ' is typing ...');
}
setTimeout(function(){ $('#notifyUser').text(''); }, 10000);;
});


socket.on('disconnect', function(user){
var name = $('#currentUser').val();
var me = $('#user').val(name);
if(socket.name != name){
$('#connectedUser').append('<tr><td>' + '<b>' + socket.name + '</b>' + ' has left the discussion. </td></tr>' );
}
});


$(document).ready(function(){
var name = $('#currentUser').val();
$('#welcomeMessage').append('<div class="welcome-chat">Welcome to Entrenami Chat</div>')
socket.emit('connectedUser', name);
});

注意:我为我的路线和 Controller 使用 express,为我的 View 使用 EJS。我有点卡在这里,因为我不知道去哪里寻找如何解决我的问题。

最佳答案

io.engine.clientsCount 返回连接用户的总数,当用户像这样连接时,您可以将其发送给客户端:

io.on('connection', (socket) => {
var total=io.engine.clientsCount;
socket.emit('getCount',total)
});

关于node.js - 在 Socket.io 中获取连接的用户/客户端列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44758420/

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