Erstellen Sie eine Liste der Verbundenen Clients über socket.io
Hier sind 2 Fragen. Buchen Sie zusammen, macht mehr Sinn.
Frage 1
Habe ich eine node.js app, die sendet ein Ereignis an alle clients und alle aktuellen Kunden reagieren mit einem ready
emittieren. Wie kann ich erstellen Sie eine Liste aller clients, antwortete der erste emittieren, und welche Art von Kennzeichnung verwendet werden können, unterscheiden sich die Kunden?
Question2:
Was ich versuche zu tun, nach dem sammeln eine Liste der verbundenen clients, um dann den Zugriff auf eine MySQL-Datenbank-Tabelle N
Anzahl der Zeilen und weisen Sie jeden client X
Zeilen jeweils. Diese Zeilen ausgestoßen werden, zurück zu Ihren jeweiligen Kunden. Wie kann das getan werden?
Aktuellen Code für Qn 1
Knoten Code
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);
Client-Seite JS-Code
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
});
});
});
Aktuellen Code für Qn 2
Der code funktioniert für einen einzelnen client, aber wie mache ich eine Schleife durch alle angeschlossenen clients, und führen Sie die gleiche Aktualisierung der Spalte und die Auswahl der Zeilen?
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
});
});
});
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie zu verfolgen die angeschlossenen clients selbst. Der einfache Weg zu tun wäre, um ein array zu verwenden:
Dann können Sie Referenzen, die
clients
array auf dem server, wohin Sie müssen, in Ihreready
event-handler oder was auch immer. So etwas wie:getListings
nennen, ist nur Beispielcode, zog ich aus der ursprünglichen Frage. Ich habe keine Ahnung, was es enthält, oder wie es implementiert ist.foreach
oderfor
Schleifen ich einfach nur die ersten angemeldeten client den Benutzernamen im browser.Buchse.io bietet Ihnen eine öffentliche api, so dass statt des Hackens etwas wie Bryan schlage vor, Sie verwenden können:
Wird, gibt ein array zurück, der alle verbundenen clients.
Wenn Sie möchten, dass alle angeschlossenen clients zu einem bestimmten Namensraum:
Aber Sie können auch filter es sogar noch mehr.. wenn Sie wollen, um alle Steckdosen in einem Raum:
Zurückkehren wird eine Reihe von verbundenen buchsen für den Raum
room name here as first argument
ready
Nachricht geschoben werden, in ein array. Können die API verwenden, tun etwas, das in einer anderen Art und Weise?