【问题标题】:Socket.io namespace with variable/id in routeSocket.io 命名空间与路由中的变量/id
【发布时间】:2018-09-25 05:40:54
【问题描述】:

我有一个问题:

我使用 房间加入系统 [我只在 NodeJS 中编程] 和 socket.io

https://example.com/room/:roomid/

例如https://example.com/room/764363553/

我的路线:

router.get('/room/:roomid/', function (req, res, next) {
    var id = req.params.roomid;
    //....
});

我想在房间中制作套接字,但是如何使用命名空间制作呢?

io.of("/room/:roomid/").on('connection', function (socket) {
   io.of("/room/:roomid/").emit('testsocket');
}

->不起作用

客户端代码:

var socketIO = io(window.location.pathname);

socketIO.on('testsocket', function (data) {
        console.log("socket successful connected!");
});

【问题讨论】:

  • does not work 是什么意思?它会抛出错误吗?
  • @BrahmaDev 我的意思是:套接字没有连接。
  • 你能不能也添加你用来连接的代码。
  • @BrahmaDev 是的,但是如果我发出一些东西,它就不会到达。
  • 请在此处添加代码。我无法调试我看不到的东西。与此同时,你告诉我的观点自相矛盾。

标签: javascript node.js sockets websocket socket.io


【解决方案1】:

Socketio 从 2.1.0 开始支持动态命名空间。

公关是here

document is here

还可以提供正则表达式或函数,以便以动态方式创建命名空间:

const dynamicNsp = io.of(/^\/dynamic-\d+$/).on('connect', (socket) => {
  const newNamespace = socket.nsp; // newNamespace.name === '/dynamic-101'

  // broadcast to all clients in the given sub-namespace
  newNamespace.emit('hello');
});

// client-side
const socket = io('/dynamic-101');

// broadcast to all clients in each sub-namespace
dynamicNsp.emit('hello');

// use a middleware for each sub-namespace
dynamicNsp.use((socket, next) => { /* ... */ });

有一个功能:

io.of((name, query, next) => {
  next(null, checkToken(query.token));
}).on('connect', (socket) => { /* ... */ });

【讨论】:

    【解决方案2】:

    服务器

    var manager = io.of("/room").on('connection', function (socket) {
       socket.on("join", function(roomid){
           socket.join(roomid);
           manager.to(roomid).emit('testsocket',roomid);
       }
    }
    

    客户:

    var socketIO = io("/room");
    var roomID = window.location.pathname.splitOnLast("/")[1]; //Should ideally be got from req.params.roomid
    socketIO.emit("join", roomID)
    socketIO.on('testsocket', function (data) {
        console.log("Connected to room", data);
    });
    

    【讨论】:

      猜你喜欢
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 2015-04-16
      • 2018-05-05
      • 2012-08-26
      • 2011-02-16
      • 1970-01-01
      相关资源
      最近更新 更多