Maison >interface Web >js tutoriel >Utilisez socket pour créer des salles de discussion privées et publiques dans Node.js_node.js
Je vais d'abord vous montrer les rendus :
Dans l'article précédent, je vous ai présenté l'utilisation d'Angular, Nodejs et socket.io pour créer des salles de discussion et des salles de discussion multi-personnes Cet article continue de présenter l'utilisation des sockets dans Node. js pour créer des salles de discussion privées et publiques, veuillez voir ci-dessous pour plus de détails.
Parmi les applications de nodejs, socket devrait être plus remarquable. socket.io a des dizaines de milliers d'étoiles sur github. Son succès ne devrait pas être inférieur à celui d'express.
Pour des exemples, veuillez cliquer sur http://chat.lovewebgames.com/
Téléchargement du code sourcehttps://github.com/tianxiangbing/chat
Parce que je suis trop pauvre, le serveur et la base de données sont tous gratuits depuis l'étranger, et la vitesse d'accès peut être légèrement plus lente.
Permettez-moi d'abord de parler de ma compréhension de socket.io. Websocket s'apparente davantage à l'ouverture d'un service de port pour surveiller les communications passées. On peut donc s'appuyer sur le port 80 actuel du site pour démarrer le service socket, ou on peut le mettre sur d'autres ports, comme par exemple :
Il s'agit de surveiller le port 3000. Étant donné que le serveur gratuit que j'utilise n'a pas la permission d'ouvrir d'autres ports, j'en utilise toujours 80. Puisque 80 est déjà utilisé par express, je dois le transmettre lorsque express est utilisé.
Ensuite, j'ai écrit ceci dans msg.js
C'est harmonieux. db est la méthode pour créer une connexion mysql, qui n'est pas incluse dans cette section et est omise.
Voici comment cela fonctionne dans socket.io. Tout d'abord, créez une connexion au canal io, puis surveillez les événements du socket à l'intérieur de Nodejs. Le code est le suivant :
Tant qu'un utilisateur est connecté à ce moment-là, il entrera dans la connexion, et son paramètre est un socket S'il s'agit d'un chat public, nous pouvons l'utiliser directement
.Voici le formulaire. Mais nous avons une discussion privée ici, nous devons donc enregistrer temporairement cet objet socket dans le monde global, afin que la personne avec laquelle vous discutez en privé puisse l'utiliser pour trouver votre socket. En fait, le privé. le chat ici n'est pas complètement point à point, il passe toujours par le serveur, et le message est transmis au serveur qui trouve ensuite l'objet socket de la personne à qui vous souhaitez le transmettre et lui envoie. C'est tout le processus. Ici, j'utilise un objet de type tableau pour le stocker.
Comme j'ai besoin d'un nom d'utilisateur pour me connecter, j'utilise le nom d'utilisateur comme seul identifiant (ceci n'est qu'un exemple, ne me parlez pas de noms d'utilisateur en double ici, c'est l'avantage d'utiliser un formulaire de type tableau). Je n'ai pas besoin de faire une boucle. Vous pouvez également le trouver rapidement. Lorsque j'envoie un message privé à A, je le trouverai d'abord dans cet uscoket, puis j'appellerai son émission.
function sendUserMsg(data) { if (data.to in usocket) { console.log('================') console.log('to' + data.to, data); usocket[data.to].emit('to' + data.to, data); usocket[data.user].emit('to' + data.user, data); console.log('================') } }
La raison pour laquelle j'émets deux fois ici est que lorsque j'envoie le message à l'autre partie, je dois également recevoir le message moi-même et ensuite l'afficher. Pourquoi est-ce ? Premièrement, l'interface est unifiée et tout le contenu du chat provient du serveur. Deuxièmement, cela prouve que je l'ai envoyé avec succès.
Ensuite, lorsque j'écoutais le client, j'ai également utilisé mon propre nom d'utilisateur pour configurer un écouteur d'événements pour le nom d'utilisateur.
socket.on('to' + user, function(data) { //console.log(data); formatMsg(data); })
De cette façon, qu'il s'agisse d'un message que j'envoie ou d'un message que je reçois, il entrera dans cet événement. Enfin, n'oubliez pas de supprimer l'objet au départ de l'utilisateur.
socket.on('disconnect', function() { console.log('disconnect') if (username) { counter--; delete users[username]; delete usocket[username]; if (home.name == username) { homeLeave(username); } sendmsg({ type: 0, msg: "用户<b>" + username + "</b>离开聊天室", counter: counter, users: users }) } });
D'accord, vous avez terminé.