So implementieren Sie eine lange Verbindung in NodeJS

PHPz
Freigeben: 2023-04-06 10:36:55
Original
2236 Leute haben es durchsucht

Node.js ist eine sehr beliebte serverseitige JavaScript-Laufzeitumgebung. Es zeichnet sich durch Netzwerkprogrammierung aus, insbesondere durch die Implementierung langlebiger Verbindungen.

In der Netzwerkprogrammierung bezieht sich eine lange Verbindung auf einen Zustand, in dem Client und Server die Heartbeat-Aktivität aufrechterhalten und die Verbindung nicht schließen. Im Vergleich zum herkömmlichen HTTP-Anfrage-Antwort-Modell können lange Verbindungen die Netzwerkeffizienz und Systemleistung verbessern. Wenn beispielsweise Daten über eine lange Verbindung zwischen dem Client und dem Server gesendet und empfangen werden, kann der Aufwand für den Verbindungsaufbau und die Verbindungstrennung reduziert und die daraus resultierende Netzwerkverzögerung und Systemressourcenverschwendung vermieden werden.

Wie implementiert man also lange Verbindungen in Node.js?

1. WebSocket verwenden

WebSocket ist ein Protokoll, das auf dem TCP-Protokoll basiert, um eine Vollduplex-Kommunikation zu erreichen. Es bietet eine Möglichkeit, eine lange Verbindung zwischen dem Client und dem Server herzustellen und ermöglicht so eine bidirektionale Kommunikation statt nur einer Client-Anfrage-Server-Antwort.

In Node.js können Sie die ws-Bibliothek verwenden, um WebSocket-Verbindungen zu implementieren. Hier ist ein einfaches WebSocket-Beispiel:

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
  console.log('client connected');

  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
  });

  ws.on('close', function close() {
    console.log('client disconnected');
  });
});
Nach dem Login kopieren

In diesem Beispiel erstellen wir einen WebSocket-Server, der Port 8080 überwacht. Wenn ein Client eine Verbindung zum Server herstellt, ruft der WebSocket-Server die Verbindungsrückruffunktion über den Ereignishandler auf. In dieser Rückruffunktion können wir einen Nachrichtenereignishandler registrieren, um vom Client gesendete Nachrichten zu empfangen. Außerdem haben wir einen Close-Ereignishandler registriert, der verarbeitet, wenn der Client die Verbindung trennt.

2. TCP-Socket verwenden

TCP Socket ist ein Basismodul in Node.js, das zur Implementierung der Socket-Kommunikation des TCP-Protokolls verwendet wird. In Node.js können Sie das Netzmodul verwenden, um TCP Socket zu betreiben.

Das Folgende ist ein einfaches TCP-Socket-Beispiel:

const net = require('net');

const server = net.createServer(function(socket) {
  console.log('client connected');

  socket.on('data', function(data) {
    console.log('received: ' + data);
  });

  socket.on('end', function() {
    console.log('client disconnected');
  });
});

server.listen(8080, function() {
  console.log('server started');
});
Nach dem Login kopieren

In diesem Beispiel erstellen wir einen TCP-Socket-Server, der Port 8080 überwacht. Wenn der Client eine Verbindung zum Server herstellt, geben wir ein Protokoll aus und registrieren dann den Datenereignishandler, um die vom Client gesendeten Daten zu empfangen. Wenn die Verbindung endet, geben wir ein weiteres Protokoll aus.

3. HTTP-Long-Polling verwenden

HTTP-Long-Polling ist eine Technologie, die lange Verbindungen in Webanwendungen aufbaut. Es wird über den langen Verbindungsmechanismus des HTTP-Protokolls implementiert, der es dem Server ermöglicht, Daten an den Client zu übertragen.

In Node.js können wir selbst HTTP-Long-Polling-Verbindungen implementieren. Hier ist ein einfaches HTTP-Long-Polling-Beispiel:

const http = require('http');
const messages = [];

http.createServer(function(req, res) {
  console.log('client connected');

  if (req.method === 'POST') {
    let chunks = '';

    req.on('data', function(chunk) {
      chunks += chunk;
    });

    req.on('end', function() {
      messages.push(chunks);
      console.log('message received: ' + chunks);
    });
  } else if (req.method === 'GET') {
    res.writeHead(200, { 'Content-Type': 'text/plain', 'Connection': 'keep-alive', 'Cache-Control': 'no-cache' });

    let lastMessageIndex = 0;

    function checkForNewMessages() {
      if (lastMessageIndex < messages.length) {
        res.write(messages.slice(lastMessageIndex).join('\n') + '\n');
        lastMessageIndex = messages.length;
      }
    }

    setInterval(checkForNewMessages, 1000);
    checkForNewMessages();
  }
}).listen(8080);
Nach dem Login kopieren

In diesem Beispiel erstellen wir einen HTTP-Server, der Port 8080 überwacht. Durch Überprüfen der Methode der Anfrage (GET oder POST) können wir die Anfrage in einen Long-Polling-Mechanismus umwandeln. Bei einer Long-Polling-Anfrage senden wir einen 200-Antwortcode, einen Connection-Header und einen Cache-Control-Header an den Client, um anzuzeigen, dass wir die Verbindung aufrechterhalten. Anschließend verwenden wir die Funktion „setInterval“ und die Funktion „checkForNewMessages“, um kontinuierlich nach den neuesten Nachrichten zu suchen und diese, falls neue Nachrichten vorhanden sind, an den Client zu senden.

Zusammenfassung

In Node.js können lange Verbindungen mithilfe verschiedener Technologien wie WebSocket, TCP Socket und HTTP Long Polling implementiert werden. Die konkrete Wahl hängt von den Anwendungsanforderungen und dem Design ab. Natürlich gibt es auch andere fortschrittlichere Technologien wie Socket.IO usw., die mehr Funktionen und Flexibilität bieten können.

Das obige ist der detaillierte Inhalt vonSo implementieren Sie eine lange Verbindung in NodeJS. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!