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

时间:2020-04-19 17:45:52

标签: 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
  };
  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);

我试图用emit转移名称,但是我做不到的任何事情我都怕,其他任何人都知道我如何使我的emission起作用,或者不知道其他解决方案?

这是我要达到的目标:

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

var users = [];
io.on("beautiful_name", function (name){
var clientname = name;
});
io.use((socket, next) => {
  users[socket.id] = {
    username: clientname 
  };
  console.log(clientname);
  return next();
});

1 个答案:

答案 0 :(得分:2)

您正在监听服务器上的全局事件,即监听IO而不是套接字。另外,如果您想拥有一个访问用户列表的键,则使用users[socket.id]将用户追加到用户数组,使其成为对象并保持代码不变。代码的另一个问题是,您无需初始化就可以访问套接字变量,请将所有套接字代码都放在io.on("connection")中,以便能够直接与套接字进行通信,而不是与整个服务器进行通信。试试这种方法,我相信它应该可以工作

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;
}

我希望这会有所帮助,如果您需要澄清,请告诉我。