javascript - Socketio 获取房间内的客户端数量
问题描述
我想请你帮忙。我很难使用这个功能。它应该检查房间内是否有 0 个或 1 个客户端,然后返回有关其他客户端是否可以加入房间的信息(每个房间最多 2 个用户)。我不知道房间里有多少客户。我已经检查了该站点,并且使用早期版本的 socket.io 有很多关于这个主题的答案。现在我来到了这个功能:
io.in(room).clients((err, clients) => {
console.log(clients.length);
});
它可以工作并在房间内记录适量的客户,但我不知道如何将该值返回给外部函数。
它var user
由一个完整的 JSON 组成,我一直想知道是否有一种更快的方法来返回数组的长度,而无需深入研究 JSON。
有外部功能:
function isRoomFree(room) {
var user = io.in(room).clients((err, clients) => {
console.log(clients.length);
});
//console.log(user);
if(user < 2)
return true;
else
return false;
}
有没有办法做到这一点?我对 js、socketio 和 node.js 有点陌生
解决方案
您的函数isRoomFree(room)
本质上是同步的,这意味着您调用它并等待结果,但是io.in(room).clients
它是异步的,这意味着您不知道结果何时到达。
将它们中的两个混合起来是一个挑战。
您需要做的是将您的功能更改为异步。我建议你熟悉这个概念。
function isRoomFree(room, callback) {
var user = io.in(room).clients((err, clients) => {
if(clients < 2)
callback(true);
else
callback(false);
});
}
像这样使用它:
isRoomFree(room, function(status) {
if (status)
console.log("free");
else
console.log("not free");
//continue your program logic inside the callback
});
推荐阅读
- c++ - 为什么 boost log break 会提升 GMP 多精度?
- laravel - laravel(使用 vue 和 vuex)覆盖 sendResetLinkEmail 但无法将数据传递给 api 控制器
- mysql - 如何只备份 dbo 而不是 MySQL 中的整个数据库?
- python-3.x - 有没有办法通过 python 更新 Windows?
- python - pip无法连接,无法安装任何东西
- asp.net - 如何使用更新 DropDownList 的传递参数值自动更新 SqlDataSource,以便它在“Page_Load”期间显示
- python - pip 安装与本地包具有相同命名空间的包
- php - 联盟应用程序的雄辩关系结构
- java - 为什么这个程序在我的电脑上运行时不会返回任何东西?
- dask - Dask:有没有办法从任务中获取每个分区的 ID,这样我就可以在任务 f 中做一些不同的事情