因此,我一直在用node.js和socket.io制作一个实时E2EE聊天应用程序,我遇到了一个问题
我使用的是最新的socket.io版本,特别是4.2.0,我一直在尝试找出一个房间内的客户端数量,以便创建一个检查,以允许或阻止访问聊天区,因为它不支持在一个房间内超过2个客户端。
socket.io的我的变量/包含
var socket = require("socket.io")
var io = socket(server)
var chat = io.of('/socket').on('connection', function (socket) {
socket.on('loginchat', async function(data){
io.in(data.id).allSockets().then(result=>{
console.log(result.size) })
});
});
data.id是一个随机生成的字符串,用于创建房间服务器端,所以我的想法是使用allSockets()来获取连接到该房间的套接字的计数,但即使连接了2个客户端,它也会返回零。来自https://stackoverflow.com/a/66065685/16140221的allSockets()想法
我在堆栈溢出问题上找不到有效的解决方案,或者在文档中找不到任何明显的解决方法。我在socket.io不是最好的,因为我只是简单地拿起它来用于这个项目,所以任何帮助都是非常感谢的:)
发布于 2021-11-02 03:17:02
var socket = require("socket.io")
var io = socket(server)
var chat = io.of('/socket').on('connection', function (socket) {
socket.on('loginchat', async function(data){
const sockets = await io.of("/socket").in(data.id).fetchSockets();
console.log(sockets.length)
if(sockets.length <= 1){
socket.room = data.id;
socket.join(data.id);
}else{
//attempting to join a room with greater than 2 users
console.log("too many")
}
});
});
https://socket.io/docs/v3/migrating-from-3-x-to-4-0/
使用fetchSockets()并检查对象的长度,您可以检查房间中用户的长度或数量。
在Socket.io v4.3.1中工作,但很可能在任何v4.x中运行
发布于 2021-10-04 02:12:29
考虑到您提供的示例,您似乎从未使用套接字加入房间。所以你的房间永远是空的。
根据the socket.io documentation,您必须先侦听connection
事件,然后才能使用join
将用户添加到聊天室。
const socket = require("socket.io")
const io = socket(server)
io.on("connection", socket => {
socket.on('loginchat', async data => {
//Assuming data.id is the room identifier
const roomUsers = await io.in(data.id).allSockets();
//There, you make your socket join the room if room users are not exceeding
//your maximum
if(roomUsers.size < 2) socket.join(data.id);
});
});
https://stackoverflow.com/questions/69432987
复制