我正在使用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();
});
答案 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;
}
我希望这会有所帮助,如果您需要澄清,请告诉我。