Heim >Web-Frontend >js-Tutorial >Verwenden Sie Socket, um private und öffentliche Chatrooms in Node.js_node.js zu erstellen

Verwenden Sie Socket, um private und öffentliche Chatrooms in Node.js_node.js zu erstellen

WBOY
WBOYOriginal
2016-05-16 15:31:051950Durchsuche

Ich zeige Ihnen zuerst die Renderings:

Im vorherigen Artikel habe ich Ihnen die Verwendung von Angular, Nodejs und socket.io zum Erstellen von Chatrooms und Mehrpersonen-Chatrooms vorgestellt. In diesem Artikel wird weiterhin die Verwendung von Sockets in Node vorgestellt. js, um private und öffentliche Chatrooms zu erstellen. Weitere Informationen finden Sie weiter unten.

Unter den Anwendungen von nodejs sollte socket.io Zehntausende von Sternen auf Github haben, um die Nutzung des gesamten socket.io zu erleichtern.

Für Beispiele klicken Sie bitte auf http://chat.lovewebgames.com/

Quellcode-Downloadhttps://github.com/tianxiangbing/chat

Da ich zu arm bin, sind der Server und die Datenbank alle kostenlos aus dem Ausland und die Zugriffsgeschwindigkeit kann etwas langsamer sein.

Lassen Sie mich zunächst über mein Verständnis von socket.io sprechen. Websocket ähnelt eher dem Öffnen eines Portdienstes zur Überwachung vergangener Kommunikation. Wir können uns also auf den aktuellen Site-Port 80 verlassen, um den Socket-Dienst zu starten, oder wir können ihn auf andere Ports legen, wie zum Beispiel:

Code kopieren Der Code lautet wie folgt:

require('socket.io').listen(3000);

Dies dient zur Überwachung von Port 3000. Da der von mir verwendete freie Server keine Berechtigung zum Öffnen anderer Ports hat, verwende ich immer noch 80. Da 80 bereits von Express verwendet wird, muss ich ihn bei Verwendung von Express übergeben.

Code kopieren Der Code lautet wie folgt:

var server = http.createServer(app);
var socket = require(‘./socket/msg’)(server);

Dann habe ich das in msg.js geschrieben

Code kopieren Der Code lautet wie folgt:

var db = require('../db/mysql');
var sio = require('socket.io');
var IO = function(server) {
var io = sio.listen(server)

Dies ist eine harmonische Methode zum Erstellen einer MySQL-Verbindung, die in diesem Abschnitt nicht enthalten ist und weggelassen wird.

So funktioniert es in socket.io. Erstellen Sie zunächst eine Verbindung zum io-Kanal und überwachen Sie dann die Ereignisse des Sockets in Nodejs. Der Code lautet wie folgt:

Code kopieren Der Code lautet wie folgt:

io.on('connection', function(socket) {
console.log('ein Benutzer verbunden.');
​​​​ socket.on('disconnect', function() {
console.log('Benutzerverbindung getrennt.');
        });
})

Solange ein Benutzer zu diesem Zeitpunkt verbunden ist, tritt er in die Verbindung ein und sein Parameter ist ein Socket. Wenn es sich um einen öffentlichen Chat handelt, können wir ihn direkt verwenden

Code kopieren Der Code lautet wie folgt:

io.emit('chat message', {});

Dies ist das Formular. Aber wir führen hier einen privaten Chat, daher müssen wir dieses Socket-Objekt vorübergehend in der globalen Welt speichern, damit die Person, mit der Sie privat chatten, es verwenden kann, um Ihren Socket zu finden. Das ist tatsächlich sehr kompliziert Der Chat erfolgt hier nicht vollständig Punkt-zu-Punkt. Die Nachricht wird dann an den Server übertragen. Der Server findet dann das Socket-Objekt der Person, an die Sie sie senden möchten. Das ist der ganze Prozess. Hier verwende ich ein Array-ähnliches Objekt zum Speichern.

Code kopieren Der Code lautet wie folgt:

var Benutzer = {},
usocket = {};
socket.on('user join', function(data) {
Benutzer[Benutzername] = Benutzername;
usocket[Benutzername] = socket;
})

Da ich zum Anmelden einen Benutzernamen benötige, verwende ich den Benutzernamen als einzige Kennung (dies ist nur ein Beispiel, sprechen Sie mir nicht über doppelte Benutzernamen an). Der Vorteil der Verwendung eines Array-ähnlichen Formulars besteht darin Ich brauche keine Schleife. Sie können es auch schnell finden. Wenn ich eine private Nachricht an A sende, finde ich sie zuerst in diesem Uscoket und rufe dann ihren Emit auf.

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('================')
 }
}

Der Grund, warum ich hier zweimal sende, ist, dass ich die Nachricht auch selbst empfangen und dann anzeigen muss, wenn ich sie an die andere Partei sende. Erstens ist die Schnittstelle vereinheitlicht und der gesamte Inhalt im Chat kommt vom Server. Zweitens beweist es, dass ich ihn erfolgreich gesendet habe.

Als ich dann den Client abhörte, habe ich auch meinen eigenen Benutzernamen verwendet, um einen Ereignis-Listener für den Benutzernamen einzurichten.

socket.on('to' + user, function(data) {
 //console.log(data);
 formatMsg(data);
})

Auf diese Weise wird unabhängig davon, ob es sich um eine Nachricht handelt, die ich sende, oder um eine Nachricht, die ich empfange, in dieses Ereignis aufgenommen. Vergessen Sie nicht, das Objekt zu löschen, wenn der Benutzer es verlässt.

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
 })
 }
});

Okay, du bist fertig.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn