【问题标题】:( Socket.io ) One socket connection multiple rooms( Socket.io ) 一个socket连接多个房间
【发布时间】:2025-12-28 18:25:11
【问题描述】:

我在使用 socket.io 时遇到问题。 我尝试创建一个连接到多个房间的单套接字连接。

这是我当前的代码:

function JoinRoom(id){
   socket = io(domain);

   socket.on('connect', function (data) {
        console.log('Connected to ' + room);
        socket.emit('room', room);
   });

   socket.on('message', function (data) {
        console.log(data);
   });
}

问题是如果我删除了 var socket.io(domain) 函数没有连接,也没有从房间接收数据。

例子:

socket = io(domain);
function JoinRoom(id){

   socket.on('connect', function (data) {
        console.log('Connected to ' + room);
        socket.emit('room', room);
   });

   socket.on('message', function (data) {
        console.log(data);
   });
}

如果我使用 JoinRoom() 函数的 socket.io() 函数,我不会收到消息消息或任何东西。这是行不通的。 我究竟做错了什么?有什么解决办法吗?

【问题讨论】:

    标签: javascript sockets socket.io


    【解决方案1】:

    在客户端上,创建一个事件来指示访问房间。

    在服务器上,应用访问逻辑。

    客户

    var socket = io('http://localhost');
    
    function JoinRoom(data){
        socket.emit("join", data);
    }
    
    var data = {
        room:'ejemplo'
    };
    
    JoinRoom(data);
    

    服务器

    var io = require('socket.io')(app);
    
    io.on('connection', function(socket){
        socket.on('join', function(data){
            console.log(data); // data = { room: String, ...}
            socket.join(data.room);  
        });
    
    socket.on('leave', function(data){
        socket.leave(data.room); 
    });
    

    【讨论】: