所以这是我的代码,我正在尝试使用带有房间的 Socket.io 创建聊天室(一对一随机聊天室),但我认为存在错误,因为当我连接前两个套接字时,它工作正常,但当我连接第三个时 socket 它不再工作了,我认为这是因为“ NumPy ++”,但我不知道如何纠正它,因为我在房间里没有太多经验。我想实现:两个套接字之间的聊天,当第三个客户端加入时,我想创建第二个房间并等待第四个套接字加入聊天等,而且我知道我想要一对一的随机聊天室,例如 Omegle。
var numb = 1;
var chnm = io.of('/STchat')
app.get('/STchat', function(req, res){
res.sendFile('C:\\Users\\tuna\\Desktop\\JUSTFOL\\views\\Tchat.html')
chnm.once('connect', function(socket){
socket.join("room" + numb)
console.log('made socket connection', socket.id);
chnm.in("room" + numb).clients(function(err, clients){
if(clients.length > 2) {
numb++
}
});
socket.on('chat', function(data) {
chnm.in("room" + numb).emit('chat',data)
})
socket.on('disconnect', function(){
console.log('socket disconnected')
});
}
});
app.get('/StvChat', function(req ,res){
res.sendFile(__dirname + '/views/VideoC.html');
});
var socket = io.connect('http://localhost:5000/STchat')
var message = document.getElementById('message');
handle = document.getElementById('handle');
btn = document.getElementById('send');
output = document.getElementById('output');
typing = document.createElement('p');
typing.className = "tycl";
input = document.getElementById("message");
$('form').submit(function(){
socket.emit('chat',{
message: message.value,
});
$('#message').val('');
return false;
});
input.addEventListener("keyup", function(event) {
event.preventDefault();
if (event.keyCode === 13) {
document.getElementById("send").click();
}
});
socket.on('chat', function(data){
output.innerHTML += '<p>' +' '+ data.message +'</p>'
});
最佳答案
这太长了,无法放入评论中,因此我添加了答案。为了澄清一下,这是我在您发出聊天事件的方式中看到的一个问题。让我们演练一个场景。
var numb = 1;
两个用户(用户 A 和用户 B)连接到套接字并被放入房间“room1”。现在,numb 应该通过您的代码递增,现在 numb 将 == 2。
现在,用户 A(位于“room1”中)发出“聊天”事件。这是我看到的问题:
socket.on('chat', function(data) {
chnm.in("room" + numb).emit('chat', data)
})
用户 A 的聊天事件发送到“room2”,但用户 A 位于“room1”中。发生这种情况是因为场景中此时 numb == 2 并且您正在使用 numb 发出该事件,基本上这就是 chnm.in("room"+ 2)
发生的情况。用户 B 没有收到用户 A 的发出,因为它被发送到错误的房间 (room2)。如果我误解了您想要做什么,请告诉我。
编辑:根据此处的要求,我对您的代码进行了一些修改,我已在本地测试成功。每个房间两个用户。
var numb = 1;
var chnm = io.of('/STchat');
app.get('/STchat', function(req, res) {
res.sendFile('C:\\Users\\tuna\\Desktop\\JUSTFOL\\views\\Tchat.html');
chnm.once('connect', function(socket) {
// store the room in a var for convenience
var room = "room" + numb;
// join socket to the next open room
socket.join(room);
// store room on socket obj for use later - IMPORTANT
socket.current_room = room;
// log some stuff for testing
console.log('made socket connection', socket.id);
console.log("Joined room: ", socket.current_room);
// Check room occupancy, increment if 2 or more
chnm.in(room).clients(function(err, clients) {
if (clients.length >= 2) {
numb++;
}
});
socket.on('chat', function(data) {
// emit to that sockets room, now we use that current_room
chnm.in(socket.current_room).emit('chat', data);
});
socket.on('disconnect', function() {
console.log('socket disconnected');
});
});
});
app.get('/StvChat', function(req, res) {
res.sendFile(__dirname + '/views/VideoC.html');
});
关于node.js - socket.io 随机聊天室一对一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53033071/