如何在 socket.io 中使用动态命名空间。
我正在查看(糟糕的) 文档,它说必须像这样使用名称空间:
io.of('/news')
io.of('/akfda')
要使用命名空间,您需要执行 io.of("/namespace")
。
我需要在服务器中注册每个命名空间吗?也许我想要一个用于动态内容的命名空间。
我该怎么做:
io.of('/:somethign/:id')
原文由 Abimael Martell 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何在 socket.io 中使用动态命名空间。
我正在查看(糟糕的) 文档,它说必须像这样使用名称空间:
io.of('/news')
io.of('/akfda')
要使用命名空间,您需要执行 io.of("/namespace")
。
我需要在服务器中注册每个命名空间吗?也许我想要一个用于动态内容的命名空间。
我该怎么做:
io.of('/:somethign/:id')
原文由 Abimael Martell 发布,翻译遵循 CC BY-SA 4.0 许可协议
我会使用“房间”来支持您的动态内容。
服务器端
var server = require('http').createServer(),
io = require('socket.io')(server);
io.on('connection', function(socket){
var room = socket.handshake['query']['r_var'];
socket.join(room);
console.log('user joined room #'+room);
socket.on('disconnect', function() {
socket.leave(room)
console.log('user disconnected');
});
socket.on('chat message', function(msg){
io.to(room).emit('chat message', msg);
});
});
server.listen(3000);
客户端
var socket_connect = function (room) {
return io('localhost:3000', {
query: 'r_var='+room
});
}
var random_room = Math.floor((Math.random() * 2) + 1);
var socket = socket_connect(random_room);
socket.emit('chat message', 'hello room #'+random_room);
....
原文由 bbullis 发布,翻译遵循 CC BY-SA 3.0 许可协议
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.3k 阅读✓ 已解决
3 回答2.7k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
Socket.IO 支持“房间”( https://github.com/LearnBoost/socket.io/wiki/Rooms ),您可以使用它代替命名空间。此外,当您在路线中需要动态时(并且您在应用程序中使用快递) - 最好的方法是使用快递箱中的路线引擎。
但是,如果您仍然认为在 socket.io 的命名空间中需要动态,这里是一个如何实现它的小例子:
用户端:
服务器端:
我希望这能帮到您!