在 Socket IO 的动态命名空间中使用 UUID

问题描述 投票:0回答:1

正在开发一个多租户聊天应用程序,并希望每个租户连接到套接字 io 中自己的命名空间。我使用租户的 ID(UUID)(例如:

5d056752-6643-4300-926f-5bcd5ed65722
)作为命名空间,但无法连接到服务器。

//服务器

const namespace = this.io.of(/^[a-zA-Z0-9._-]+$/);
  namespace.on('connection', (socket: SocketWithUser) => {
}

以下正则表达式也不起作用:

- this.io.of(/^\/\w+$/);
- this.io.of(/^[\w.\-]+$/);
- this.io.of(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/);

//客户端

const socket = io('localhost:5002/5d056752-6643-4300-926f-5bcd5ed65722', {
            reconnection: true,
            autoConnect: false,});
socket.connect();

问题在于正则表达式,因为如果我使用非 uuid 字符串(例如:verizon)作为客户端的命名空间,它就可以工作。

我做错了什么?

任何指示都会有所帮助。

javascript node.js express websocket socket.io
1个回答
1
投票

/^\/\w+$/
由于 UUID 中的连字符而失败,
/^[\w.\-]+$/
缺少正斜杠,第三个也是如此。您只需在第二个/第三个正则表达式中添加正斜杠即可:

/^\/[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/

© www.soinside.com 2019 - 2024. All rights reserved.