Créer une liste de Clients Connectés à l'aide d'une douille.io
Voici 2 questions connexes. Poster ensemble fait plus de sens.
Question 1
J'ai un node.js application qui émet un événement pour tous les clients, et tous les clients vont réagir avec un ready
émettent. Comment puis-je créer une liste de tous les clients qui ont répondu à la première émettent, et quel type d'identification peuvent être utilisés pour distinguer les clients?
Question2:
Ce que je suis en train de faire après collecter une liste de clients connectés, pour ensuite accéder à une base de données MySQL table de N
nombre de lignes et d'attribuer à chaque client X
lignes chacune. Ces lignes sera émise à leurs clients respectifs. Comment cela peut-il être fait?
Code actuel pour Qn 1
Nœud 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);
Côté Client, le Code 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
});
});
});
Code actuel pour Qn 2
Le code fonctionne pour un seul client, mais comment puis-je faire une boucle par tous les clients connectés et effectuer la même mise à jour de la colonne et de la sélection de lignes?
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
});
});
});
OriginalL'auteur Nyxynyx | 2011-11-27
Vous devez vous connecter pour publier un commentaire.
Vous aurez besoin de garder la trace des clients connectés vous-même. La manière la plus simple de le faire serait d'utiliser un tableau:
Ensuite, vous pouvez les références que
clients
tableau sur le serveur où vous en avez besoin, dans votreready
gestionnaire d'événement ou quoi que ce soit. Quelque chose comme:Le
getListings
appel est juste un exemple de code que j'ai sorti de la question d'origine. Je n'ai aucune idée de ce qu'il contient ou de la façon dont il est mis en œuvre.Je vois, parce que je suis le stockage des clients en tableau et quand j'essaie de les récupérer avec la hepl de
foreach
oufor
boucles je viens seulement de le la première enregistré dans nom d'utilisateur du client dans le navigateur.OriginalL'auteur rossipedia
Socket.io vous fournit une api publique pour que, si au lieu de piratage quelque chose comme Bryan suggèrent que vous pouvez utiliser:
Qui retourne un tableau de tous les clients connectés.
Si vous souhaitez que tous les clients connectés à un certain espace de noms:
Mais vous pouvez même filtrer encore plus.. si vous voulez avoir toutes les prises dans une chambre:
Retournera un tableau de sockets connectées pour la salle de
room name here as first argument
ready
message pour être poussé dans un tableau. Pouvez utiliser l'API de faire quelque chose qui d'une manière différente?En fait légèrement piratage avec l'api serait mieux tout ce que vous avait à faire était quelque chose comme support.isReady = true; quand est prêt est reçu et que vous le feriez vous-même sauvé de maintenir une autre liste 😛
C'est le chemin à parcourir! Merci 🙂
Vous êtes l'auteur de nœud-memcached? Je suis à l'aide bien 🙂
Je crois que la fonctionnalité de cette réponse est déprécié en 1.0
OriginalL'auteur 3rdEden