我正在尝试让我的应用程序使用多个命名空间。
我正在根据传递给服务器的路由参数创建新的命名空间。示例:
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/