所以我创建了一个使用socket.io,redis和node.js的实时应用程序。错误:Redis连接到127.0.0.1:6379失败 - 连接EMFILE
的问题是,有30个用户,我已经到达(服务器的连接数,我运行Ubuntu 14.04。
我认为这事做对我连接方式Redis的。
所以在一个页面上,我有最多12个频道订阅。两架socket.io连接,一个有6个通道和其他具有其他6个通道。
显示我的节点之前的js代码,我所做的是针对每个渠道,我创建了一个新的redis客户端,因此假设我有一个插入和更新通道,对Node.js的代码,所以我的代码wiil是:
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.
那么如何优化代码,减少每个客户端的连接数到一个或两个最大值?
是否有帮助,有var insert = redis.createClient();以外的data.on('连接') ??
对不起,实际上我试图做单独的事情,这是一个错误,你能给我一个代码示例,因为每次我尝试使用相同的Redis客户端时,我只得到第一个订阅,而不是第二个订阅.. – Tio 2014-09-14 14:11:18
@Tio编辑。这有帮助吗? – 2014-09-15 02:11:51
是的,我真的设法解决它昨天,做这样的事情,对我来说,唯一的变化是,我需要在data.on('连接')内的订阅,由于变量被传递,该选择的正确频道,谢谢.. – Tio 2014-09-15 09:42:54