socket.io:是否可以拦截连接命名空间请求?

时间:2016-06-09 03:25:33

标签: node.js socket.io

我的Node.js知识非常基础。我使用socket.io在iOS应用程序中创建服务器和socket.io-client-swift。

我希望服务器根据客户端应用程序上的用户选择创建动态命名空间。这个想法是所有具有特定选择的用户在服务器上加入相同的命名空间。这允许将消息广播到命名空间内的所有这些用户。

问题是socket.io文档和代码似乎假设你将在node.js代码中硬编码命名空间名称,并且在客户端iOS代码尝试加入它之前定义命名空间。

这就是我想要发生的事情:

  1. 客户端请求加入名为' abc'。
  2. 的命名空间
  3. 服务器收到请求。
  4. 服务器上的某些内容检查请求,发现没有当前的命名空间用于' abc'并动态分配一个。
  5. 服务器完成处理连接请求,将套接字连接到新创建的命名空间。
  6. 这是我遇到问题的第3步。我已尝试使用io.use(function(socket, next){...}拦截传入的请求,但似乎在服务器确定是否存在匹配的命名空间后发生。

    有没有人知道如何拦截传入的命名空间请求?

1 个答案:

答案 0 :(得分:0)

我想我明白了。我在我的server.js中添加了一些代码:

// Lets Swizzle in some wrapper code.
//var originalConnection = Client.prototype.connect;
Client.prototype.originalConnect = Client.prototype.connect;
Client.prototype.connect = function(name){
    var nsp = io.nsps[name];
    if (!nsp) {
        io.of(name);
    }
    this.originalConnect(name);
};

实际上,我在一个动态命名空间创建的包装函数中进行了调整。