我一直在用socket.io和express來擺弄。我在這個項目中使用貓鼬。我有這樣的代碼:Node.js Socket.io和Express:不斷向setInterval方法以外的客戶端發送數據
服務器
io.on('connection', function (socket) {
setInterval(function(){
Data.find({}, {name:1, _id:0}, {sort : { _id : -1 }}, function (err, data) {
if (err) {
console.log(err);
} else {
socket.emit('data', {datas: data});
};
})
}, 500);
});
客戶
var socket = io.connect();
socket.on('data', function (data) {
if (data) {
$('#names').html('');
$.each(data.datas, function (index, value) {
$('#names').append('<li>'+ value.name +'</li>')
})
};
});
是否恰當的socket.io連接上執行的setInterval從數據庫加載必要的數據發送它不斷地給客戶?這會影響服務器的性能嗎?如果是這樣,那麼從mongodb向客戶端連續提取數據的最佳方式是什麼?如果有人從用戶/客戶端添加數據,是否有方法可以觀察(或類似數據庫觸發器)MongoDB中的集合?在我的代碼中,我是否正確地將mongodb查詢放入setInterval函數中?我是使用node.js,socket.io和mongodb的新手。有人能指引我走向正確的道路嗎?提前致謝!
感謝@Mariusz我爲RabbitMQ添加書籤以備將來之用。但是現在我需要知道使用socket.io的可能性。 –
我不太瞭解MongoDB,但除非您在同一個Node.js應用程序中將數據添加到數據庫中,否則您將需要使用某種IPC解決方案。否則,你會變得效率低下,因爲數據庫命中應該通常最小化。如果沒有RabbitMQ,那麼寫入數據庫的人調用一個簡單的HTTP Web服務怎麼樣?這將做這項工作(儘管開銷會稍大)。 – Mariusz
「如何寫入數據庫的人調用簡單的HTTP Web服務?」嗯,你給了我一個主意。讓我來研究一下。我對這個想法投了你的評論。 –