我有一个具有一些功能的简单聊天应用程序,其中之一是:查找其他合作伙伴。因此,此应用程序在正常使用时效果很好,例如只有2位用户的房间,并且当房间满时,确定房间名称的数字会递增。 (例如,房间名称为:“ 1”,当客户数量达到2时,房间号将修改为“ 2”)。但是如果用户多次单击“查找下一个合作伙伴”按钮,然后第二个用户连接,则事件认为他们在同一个房间中,因此无法彼此连接。为什么会这样?
这是代码:(服务器端)
//chnm is io.of('/namespace')
//numb equals to 1 at the beginnin
socket.on('next', function(){
socket.leave(socket.current_room)
console.log("left room: ", socket.current_room);
chnm.in(socket.current_room).emit('off');
console.log(numb)
//room = numb
socket.join(numb);
socket.current_room = numb
console.log("Joined room: ", numb);
chnm.in(numb).clients((err, clients)=>{
if(clients.length < 2){
chnm.in(socket.current_room).emit('wait')
}
if(clients.length >= 2){
++numb
chnm.in(socket.current_room).emit('stop waiting')
console.log('partners found each other')
}
})
})
和客户端事件(stop waiting
和wait
)
socket.on("wait", function () {
document.getElementById("waiting").style.display = "inline";
document.getElementById("message").disabled = true;
document.getElementById("send").disabled = true;
});
socket.on("stop waiting", function () {
document.getElementById("waiting").style.display = "none";
document.getElementById("message").disabled = false;
document.getElementById("send").disabled = false;
});
怎么了?我真的很需要这个学期的帮助,所以如果有帮助,我会很感激的。
编辑: 当在同一个房间中有两个用户彼此不匹配,并且第三个用户连接时,他连接到第二个用户,但是当第一个用户(单击FOP按钮的次数过多时,再次单击FOP按钮时,user2和user3彼此断开连接。我认为那是因为房间里有3个人。这是确定房间号是否应该增加的代码
chnm.on('connection', async function(socket){
var room = numb;
socket.join(room);
socket.current_room = room;
chnm.in(room).clients(function(err, clients) {
if (clients.length < 2) {
chnm.in(socket.current_room).emit('wait')
}
if (clients.length >= 2) {
++numb;
chnm.in(socket.current_room).emit('stop waiting');
}
});
....