2017-08-24 82 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

相關問題