javascript - socket.io 动态命名空间

标签 javascript node.js sockets express namespaces

我正在尝试让我的应用程序使用多个命名空间。

我正在根据传递给服务器的路由参数创建新的命名空间。示例:

var nsp = io.of('/');
var className;

app.post('/class/:classID',function(req,res){
   res.sendFile(__dirname + '/index.html');
   className = req.params.classID;
   nsp = io.of('/' + className)

});

其中 nsp 当然是命名空间。

然后我有我的 socket.io 代码,其中我说:

nsp.on('connection', function(socket){
...
...

但是,代码不会等到我到达 app.post 路线。正如我最初声明的那样,它会自动连接到默认命名空间(“/”)。

应用程序无法工作,因为在我的客户端代码上,我连接到特定的命名空间(与此无关),但服务器随后连接到默认命名空间。

我想要的是socket.io代码等待,直到我到达app.post部分,设置新的nsp变量,以便它连接到特定的命名空间,然后执行所有socket.io代码

我应该如何去做呢?我尝试将我的 socket.io 代码放入 app.post 路由中,但这似乎效果不太好。

最佳答案

我相信,如果您稍微重新排列一下代码,它应该会起作用。

app.get('/class/:classID',function(req,res){
  className = req.params.classID;   
  nsp = io.of('/' + className)
  res.sendFile(__dirname + '/index.html');

  nsp.on('connection', function(socket) {       
    nsp.emit('welcome', { message: 'Welcome!', id: socket.id });
    nsp.on('i am client', console.log);
  });
});    

然后在index.html中你可以:

var url = window.location.href;    
classIndex = url.indexOf('class/');
className = url.slice(classIndex + 6);
var socket = io('http://localhost:1337/'+className);

socket.on('welcome', function(data) {
  alert("I am connected to: "+className)
});

关于javascript - socket.io 动态命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34466966/

相关文章:

Python 套接字 [WinError 10057]?

java - 一个应用程序中的服务器和 ServerSocket : not working

javascript - 使用 JSON 和 JQuery 合并和分组表

javascript - Tinymce 替换 <a> 中的“by”

javascript - 递归 promise 链

python - 如何将非常大的图像从python脚本传输到NodeJS,而又不引起 Node 应用程序( Electron )的滞后

javascript - 获取其自己窗口内的骰子总数。并不是所有的 window

php - cakephp 中的 AJAX 自动完成

javascript - Node.js 中的 Promise Bluebird 出现问题

node.js - Facebook 信使 API "URL COULD NOT BE VALIDATED"