Javascript 从客户端获取到server.js的变量

Javascript 从客户端获取到server.js的变量,javascript,socket.io,Javascript,Socket.io,我使用Socket.io来获取活动用户,目前我可以用字符串来指定用户名,但我也想将名为name的变量传输到服务器端 Server.js var io = require("socket.io")(http); var users = []; io.use((socket, next) => { users[socket.id] = { username: "Filip" // I want this string to be my variable name };

我使用Socket.io来获取活动用户,目前我可以用字符串来指定用户名,但我也想将名为name的变量传输到服务器端

Server.js

var io =  require("socket.io")(http);
var users = [];

io.use((socket, next) => {
  users[socket.id] = {
    username: "Filip" // I want this string to be my variable name
  };
  console.log(users);
  return next();
});
Site.html

var io = io("http://localhost:3000");
var name =  <?php echo json_encode($_SESSION['displayname']); ?>;
io.emit("beautiful_name", name);

您正在侦听服务器上的全局事件,即侦听IO而不是套接字。另外,如果您想拥有一个访问用户列表的密钥,请使用
users[socket.id]
将用户附加到用户数组中,使其成为一个对象并保持代码不变。代码的另一个问题是,您在访问套接字变量时从未对其进行过初始化,请将所有套接字代码放入
io.on(“连接”)
以便能够直接与套接字通信,而不是与整个服务器通信。试试这个方法,我相信它会管用的

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

var users = {};
io.on("connection", function(socket) {
    socket.on("beautiful_name", function (name){
       var clientname = name;
       users[socket.id] = {
            username: clientname
       }
       console.log(clientname);
    });
  });
function getNumberOfUsers() {
   return Object.keys(users).length;
}

我希望这有帮助,如果您需要澄清,请让我知道。

您确定在客户端正确包含socket.io吗?是的,我认为:),我补充说这很有意义,非常感谢您的解释,现在一切都正常了!!似乎这可以让我的名字出现,但是它不包括计算活动用户(套接字,下一个)如果你想这样做,那么做
Object.keys(users.length
它将返回连接的用户数,如果这项工作接受答案将不胜感激:)。要保持活动用户列表的准确性,请在(“断开”)上收听socket.on(“断开”)并在回调中执行删除用户[socket.id]以从列表中删除所述用户已完成断开连接,但如何在您的答案中输入对象键用户长度?:)查看新答案,创建了一个函数来实现
对象。键
以获取用户数
var io =  require("socket.io")(http);

var users = {};
io.on("connection", function(socket) {
    socket.on("beautiful_name", function (name){
       var clientname = name;
       users[socket.id] = {
            username: clientname
       }
       console.log(clientname);
    });
  });
function getNumberOfUsers() {
   return Object.keys(users).length;
}