【问题标题】:How to create namespaces/rooms from the client using node.js?如何使用 node.js 从客户端创建命名空间/房间?
【发布时间】:2018-02-02 15:45:32
【问题描述】:

我想要做的是能够从客户端创建一个房间,但就像它是一个对象一样。例如: 我有一个名为“房间”的课程,这个课程假设实现了 3 个事件,因此当您创建一个新房间时,您可以在每个房间中触发这些事件。 这可能吗?这是我的服务器代码:

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");
  });

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    了解房间和命名空间之间的区别对于决定使用什么很重要:

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

    房间只能在服务器端加入(虽然创建了一个 API 在服务器端让客户端加入很简单)

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

    阅读更多: Rooms vs Namespaces


    我认为处理不同频道(包括动态频道名称(从客户端创建))最简单的解决方案是使用 rooms

    客户加入/离开房间:

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

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

    它还解释了如何正确获取断开连接的客户端订阅的房间列表,以便可以向这些房间发送消息以通知客户端离开。

    【讨论】:

    • 谢谢!老实说,我认为房间和命名空间是一回事,正如你所见,我只是一个初学者。这样就解决了。
    猜你喜欢
    • 1970-01-01
    • 2020-08-22
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 2019-12-26
    相关资源
    最近更新 更多