我正在寻找一个能够实现以下目标的节点应用程序:
我决定使用 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。
有没有人对如何做到这一点有一些想法?
答案 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()
添加它。您可以执行类似的操作来删除连接。