所以我創建了一個使用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