池Websocket连接 - NodeJS

时间:2015-07-06 17:30:51

标签: node.js websocket

我正在寻找一个能够实现以下目标的节点应用程序:

  1. 打开几个websocket连接,几乎就像每个都是一个 螺纹
  2. 允许每个websocket具有唯一/动态网址
  3. 根据某种数据库查询在对象中创建一个websocket连接池(这样我就可以动态添加/删除连接)
  4. 我决定使用 ws 库(https://github.com/websockets/ws),因为它是最快且最少膨胀的选项。我目前有以下功能,它只支持单个ws连接:

    chat.prototype.connect = function() {
    var self = this;
      self.ws = new ws(url);
      self.ws.on('message', function(data, flags) {
        var message = JSON.parse(data);
        self.handle(message);
      });
    };
    

    此代码侦听单个websocket URL并将消息传递给我的处理程序以处理该消息。相反,我想让这个函数监听多个(可能是数百个)websocket URL。

    有没有人对如何做到这一点有一些想法?

1 个答案:

答案 0 :(得分:2)

假设您有一个url列表,您需要连接到存储在名为urls的实例属性中。您可以设置如下连接:

chat.prototype.connect = function() {
  urls.forEach(this.connectOne.bind(this));
};

chat.prototype.connectOne = function(url) {
  var handle = this.handle.bind(this);
  var conn   = this.connections[url] = new ws(url);
  conn.on('message', function(data, flags) {
    var message = JSON.parse(data);
    handle(message);
  });
};

要实施添加新连接,请定期查询您的数据库并检查this.connections中是否已存在每个网址;如果没有,您可以使用this.connectOne()添加它。您可以执行类似的操作来删除连接。