2017-08-24 114 views
0

我想要做的是能够从客户端创建一个房间,但好像它是一个对象。例如: 我有一个叫“房间”的类,这个类有3个事件实现,所以当你创建一个新房间时,你可以在每个房间中触发这些事件。 这可能吗?这里是我的服务器代码:如何使用node.js从客户端创建名称空间/房间?

var express= require('express'); 
var app= express(); 
var server=require('http').createServer(app); 
var io=require('socket.io')(server); 
var channel= io.of('/arduino'); 
var bodyParser= require('body-parser'); 

server.listen(80, function(){ 
    console.log("Server corriendo en puerto 80"); 
}); 

io.on('connection', function(socket){ 
    console.log("Se conecto alguien por Socket"); 

    socket.on('new-message', function(data) { 
    console.log(data); 
    console.log("Nuevo mensaje"); 
    socket.emit('messages', data); 
    }); 

    socket.on('JSON', function (data) { 
    var jsonStr = JSON.stringify(data); 
    var parsed = ParseJson(jsonStr); 
    console.log(parsed); 
    }); 
}); 


channel.on('connection', function(socket){ 
    console.log("Se conectaron al canal 'arduino' "); 
    socket.on('new-message', function(data){ 
       console.log("Sensor:"); 
       console.log(data); 
       channel.emit("messages", data); 
     }); 
}); 


app.use(bodyParser.json()); 


app.get('/',function(req,res){ 
    console.log('555555555'); 
    res.status(200).send('GET TEST'); 
    }); 

app.post('/',function(req,res){ 
    console.log("post TEST"); 
    datos=req.body; 
    console.log(datos); 
    res.end("fin"); 
    }); 

回答

0

知道房间和命名空间之间的差异是决定一起去了哪些重要的:

命名空间是由客户端使用io.connect连接(urlAndNsp) (客户端将被添加到该命名空间,只有当它已经在服务器上存在 )

客房只能在被连接服务器端(尽管在服务器端建立一个API ,使客户能够加入是简单的)

您可以定义特定的命名空间的套接字事件,但客户端将无法如果该命名空间还没有连接之前在服务器端定义过。

阅读更多:Rooms vs Namespaces


我认为,对于处理不同的渠道,包括动态信道名(从客户端创建)最简单的解决方法是使用房间

间加入/离开客户:

一个socket.io客户端可以订阅多个房间,我给出了一个方法的答案:

Making server.side room subscribe/unsubscribe events that can be triggered from the client

这也解释了如何正确地得到一个房间断开客户端已订阅了这样一条消息,这些客房可以输送到左通知客户的名单。

+0

谢谢!我真的认为房间和命名空间是一样的,我只是一个初学者,你可以看到。这解决了它。 – user3474792

相关问题