首页 > 解决方案 > Socket.io 显示用户连接数

问题描述

我有一个非常简单的 socket.io 应用程序,我可以在其中看到用户何时连接到我的网站以及用户何时离开。第一个用户能够看到进入的每个人,但是第二个用户只能看到在他之后进来的人,依此类推......我希望连接的用户看到的是所有当前连接的用户

服务器.js

var io =  require("socket.io")(http);

var users = [];

io.on("connection", function (socket) {
console.log("User connected", socket.id);

Some loop to see user connected I think?!

socket.on("user_connected", function (username) {
    users[username] = socket.id;
    console.log(users);
    if (username !== 'null'){
    io.emit("user_connected", username);
    }
});

socket.on("send_message", function (data) {
    io.emit("new_message", data);
});

socket.on("user_left", function (datan) {
    io.emit("user_remove", datan);
    console.log("user left", datan);
});
});

网站.html

window.onbeforeunload = function () {
io.emit("user_left", name);
};

var name =  <?php echo json_encode($_SESSION['displayname']); ?>;
var bild = <?php echo json_encode($_SESSION['userpic']);?>;
var dt = new Date();
var tid = dt.getHours() + ":" + dt.getMinutes();

io.emit("user_connected", name);

sender = name;

io.on("user_connected", function (username) {
var html = "";
html += "<li data-username='" + username + "'>" + username + "</li>";
    document.getElementById("users").innerHTML += html;
});

调查了这个问题,但我一个愚蠢的编码员不明白“my_room”对我的独奏是什么。对不起,奇怪的问题,我只是有点迷路

标签: javascriptsocket.io

解决方案


如果要向所有人发送用户列表,请创建一个类似于用户的对象,每次用户连接时添加一条记录,然后向所有人广播。

如果有人断开连接,则首先将其从您的收藏中删除,然后仅将断开连接的用户信息发送给客户端,以便客户端可以从其列表中删除该用户。

如果您想要的只是问题总数,只需发送 io.sockets.clients().length


推荐阅读