【发布时间】:2014-11-07 16:51:08
【问题描述】:
所以我创建了一个使用 socket.io、redis 和 node.js 的实时应用程序。
问题是,有 30 个用户,我已经达到服务器的连接数(我正在运行 Ubuntu 14.04。
而且我认为这与我连接到 redis 的方式有关。
所以在一页上,我最多可以订阅 12 个频道。在两个 socket.io 连接上,一个有 6 个通道,另一个有其他 6 个通道。
在展示我的节点 js 代码之前,我所做的是为每个频道创建一个新的 redis 客户端,所以假设我有一个 insert 和 update频道,在 node.js 代码上,所以我的代码将是:
var data = io.of('/data');
data.on('connection', function(client) {
var insert = redis.createClient();
var update = redis.createClient();
insert.subscribe('insert');
insert.on("message", function(channel, message) {
client.emit('data_insert', message);
});
update.subscribe('update');
update.on("message", function(channel, message) {
client.emit('data_update', message);
});
});
我相信这就是问题所在,这就是为什么我有 30 个用户超过了服务器的连接限制,因为 30 * 12 + 2 * 30 = 420,加上其他一些其他的,以及很容易达到 1024。
那么我该如何优化代码,将每个客户端的连接数减少到最多一到两个?
在 data.on('connection') 之外有 var insert = redis.createClient(); 有帮助吗??
【问题讨论】: