当前位置: 首页 > 知识库问答 >
问题:

如何使用Node.js从客户端创建名称空间/房间?

严嘉良
2023-03-14

我想做的是能够从客户机创建一个房间,但好像它是一个对象。例如:我有一个名为“room”的类,这个类实现了3个事件,所以当你创建一个新的room时,你可以在每个事件中触发这些事件。这可能吗?以下是我的服务器代码:

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

共有1个答案

洪璞瑜
2023-03-14

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

命名空间由客户机使用io.connect(urlAndNsp)连接(只有在服务器上已经存在的情况下,客户机才会添加到该命名空间中)

房间只能在服务器端加入(尽管在服务器端创建API以使客户机加入很简单)

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

阅读更多:房间与命名空间

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

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

制作server.side room订阅/取消订阅可从客户端触发的事件

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

 类似资料:
  • 问题内容: 为了交互式测试我的python脚本,我想创建一个对象,类似于所返回的对象。显而易见的方式 可能会导致傻子错误导致Python repl退出(如上所述)。 那么, 用给定的属性集创建Python名称空间的最简单方法是什么? 例如,我可以即时创建一个(),但不能将其用作: 问题答案: 您可以创建一个简单的类: 在属性方面,它的工作方式与类完全相同: 或者,只需 导入类 ;可从模块中获得:

  • 问题内容: 在Python中,命名空间包可让您在多个项目中传播Python代码。当您要将相关的库作为单独的下载发布时,这很有用。例如,目录和中, 最终用户可以和。 定义名称空间包的最佳方法是什么,以便多个Python产品可以在该名称空间中定义模块? 问题答案: TL; DR: 在Python 3.3上,您无需执行任何操作,只需将任何内容都不放在名称空间包目录中即可使用。在3.3之前的版本中,请选择

  • 我在一个多租户节点应用程序中工作,我知道要在Kubernetes中创建一个新的命名空间,可以运行一个kubectl命令,如下所示:

  • 问题内容: 我正在寻找可以构造使用名称空间的XML文档的Java代码。我似乎无法使用我最喜欢的工具找到任何东西,因此希望有人可以帮助我。 问题答案: 我不确定您要做什么,但是我将jdom用于大多数xml问题,并且它支持名称空间(当然)。 代码: 产生以下xml: 其中应包含您需要的一切。希望能有所帮助。

  • 我有一个关于ES6导入模块的问题。 我试图在我的Three.js代码中添加OrbitControl。由于OrbitControls是一个单独的模块,我需要在我的代码中分别导入它们,如下所示。它工作得很好。 然而 我首先想到的是 原因是, 据我所知,如果模块将某些内容导出为导出默认值, 我可以通过在“导入”代码中添加花括号来访问它们。 但是,它没有起作用,因此我假设“三个orbitcontrols”

  • 问题内容: 我可以寻求您的帮助吗?我的代码不适用于使用socket.room创建房间,首先我已经声明了,我想创建房间并将创建的房间名称推送到。我的目标是允许用户创建自己的房间并在可能的情况下将其删除。我在这里使用了Michael Mukhin的代码作为参考。 这是我的server.js的代码 这是客户端index.html中的代码, 我想创建一个房间并将其添加到的列表中。 请帮助我已经阅读过soc