這裏有2個相關的問題。將它們放在一起更有意義。使用socket.io創建連接客戶端的列表
問題1
我有一個Node.js的應用程序,它發出事件給所有客戶,所有現有客戶將與ready
EMIT迴應。我如何創建所有回覆初始排放的客戶列表,以及可以使用哪種標識來區分客戶?
問題2:
我所試圖做後收集連接的客戶名單,是再訪問N
行數的MySQL數據庫表,並指定每個客戶端的每個X
行。這些行將被髮回到它們各自的客戶端。如何才能做到這一點?
現行規範QN 1
節點代碼
setInterval(function() {
util.log('Checking for new jobs...');
dbCheckQueue(function(results) { // checks if there are new rows to "distribute" to clients
if (results.length) {
util.log(results.length + ' new jobs found.');
io.sockets.emit('job_available');
}
});
}, 10*1000);
客戶端JS代碼
socket.on('job_available', function() {
console.log('Job Available.. Responding with Ready!');
socket.emit('ready');
});
io.sockets.on('connection', function(socket) {
socket.on('ready', function() {
// UPDATE N rows with client_id in column checkout.
// Then SELECTS * from table where checkout = client_id
getListings(client_id, function(listings) {
socket.emit('job', listings); // send jobs
});
});
});
現行規範的Qn2 該代碼適用於單個客戶端,但是如何遍歷所有連接的客戶端並執行相同的列更新和行選擇?
io.sockets.on('connection', function(socket) {
socket.on('ready', function() {
// UPDATE N rows with client_id in column checkout.
// Then SELECTS * from table where checkout = client_id
getListings(client_id, function(listings) {
socket.emit('job', listings); // send jobs
});
});
});
你可以提出一個getListings()函數的邏輯,因爲我應用了相似的解決方案,但我在屏幕上看到一個名稱爲第一個登錄用戶。 – johannesMatevosyan
'getListings'調用只是我從原始問題中提取的示例代碼。我不知道它包含了什麼或者它是如何實現的。 – rossipedia
我明白了,因爲我存儲客戶陣列,當我嘗試用'foreach'或'for'環路我單單隻出現在客戶端的瀏覽器的用戶名的第一個記錄的HEPL檢索。 – johannesMatevosyan