2011-05-03 124 views
2

使用socket.broadcast()將從數據庫結果中提供JSON字符串的簡單函數廣播到客戶端。我想要做的事情是在價值變化時更新客戶端。目前,廣播功能正在使用setTimeout每1秒連續廣播。查看Firebug中的請求日誌,有一個連續的GET響應,我不認爲這是一件好事...用socket.io廣播?

想知道使用套接字的最佳做法是什麼?這些請求是否會殺死某些東西?解決方案是比較時間戳還是類似的東西來停止不必要的發送請求?

//server-side 
function checkData() { 
    client.query('SELECT * FROM data', function selectCb(err, data) { 
     socket.broadcast(processData(data)); 
     setTimeout(checkData, 1000); 
    }); 
} 

//client-side 
socket.on('message', function(data) { 
    $('#container').html(JSON.stringify(JSON.parse(data), null)); 
}); 

//sample data 
[{ 
    "type":"Statistic1", 
    "value":65.2, 
    "timestamp":"2011-04-29T16:22:39.000Z" 
},{ 
    "type":"Statistic2", 
    "value":18.6, 
    "timestamp":"2011-04-29T16:22:39.000Z" 
}] 

感謝您的幫助!

回答

0

這取決於您發送的數據。套接字的好處之一是您可以選擇何時向客戶端發送數據。保存一些獲取請求,並在您有新內容發送時僅傳播數據。

+0

我已經使用正在發送的數據樣本更新了我的上述帖子。如何保存獲取請求,以便知道何時發送被認爲是新的數據? – crawf 2011-05-03 04:05:02

+0

在服務器上記錄您發送的最後一個項目的時間戳。而不是每秒做一次select *,你可以掛鉤更新數據庫的任何東西或者你可以用memcsche做類似的策略 – mcotton 2011-05-03 04:12:40