下面是我处理动态分配的命名空间的代码。客户端连接,然后,使用它的引用者,查找客户端的帐户 ID,并且在下面不存在的函数中,如果该帐户 ID 尚未分配给它的命名空间,则生成一个新的命名空间 (UUID) 或返回现有的命名空间。
然后,该名称空间被发送到客户端,客户端依次响应connect
该特定名称空间上的新消息。
这一切都有效。
不幸的是,ns_socket.emit('hi');
无论有多少客户端连接,该语句都会被触发回 ns_socket。
需要明确的是,如果客户端 1 连接到命名空间,hi
则会向该客户端触发一次。当客户端 2 连接到同一个命名空间时,hi
由于未知的(对我而言)原因,它会向第二个客户端触发两次,而它应该只触发一次。
显然,任何帮助将不胜感激。
var main = io.of('').on('connection', function(socket) {
socket.on('joinDynNs',function(data) {
var nameslug = socket.handshake.headers.referer.match(/(http(s)?:\/\/)([A-Za-z0-9-]+)\./)[3];
getActID(nameslug, function(actID) {
var ns = getNamespace(nS, actID);
socket.emit('assignNamespace',{ns:ns});
io.of('/' + ns).on('connection', function(ns_socket) {
ns_socket.emit('hi');
});
});
});
});