Heim Web-Frontend js-Tutorial NodeJS-Studiennotizen zum Netzwerk programming_node.js

NodeJS-Studiennotizen zum Netzwerk programming_node.js

May 16, 2016 pm 04:40 PM
nodejs 网络编程

Node bietet eine Fülle von Netzwerkprogrammierungsmodulen

Node模块 协议
net TCP
dgram UDP
http HTTP
https HTTPS

TCP-Dienstereignisse sind in die folgenden zwei Kategorien unterteilt

(1), Serverereignis

Für einen Server, der über net.createServer() erstellt wurde, handelt es sich um eine EventEmitter-Instanz. Es gibt die folgenden Arten von benutzerdefinierten Ereignissen:

Listening: Wird nach dem Aufruf von listen() ausgelöst, um einen Port oder Domain-Socket zu binden, abgekürzt als server.listen(port, listener), übergeben über den zweiten Parameter.

Verbindung: Wird ausgelöst, wenn jeder Client-Socket eine Verbindung zum Server herstellt. Die einfache Methode zum Schreiben ist net.createServer() und der letzte Parameter wird übergeben.

close: Wird ausgelöst, wenn der Server geschlossen wird. Der Server akzeptiert keine neuen Socket-Verbindungen mehr, behält aber die aktuell bestehenden Verbindungen bei. Dieses Ereignis wird ausgelöst, nachdem alle Verbindungen getrennt wurden.

Fehler: Dieses Ereignis wird ausgelöst, wenn eine Ausnahme auf dem Server auftritt.

(2), Verbindungsereignis

Der Server kann Verbindungen mit mehreren Clients gleichzeitig aufrechterhalten und ist für jede Verbindung ein typisches beschreibbares und lesbares Stream-Objekt. Das Stream-Objekt kann für die Kommunikation zwischen dem Server und dem Client verwendet werden. Es kann Daten von einem Ende vom anderen Ende über das Datenereignis lesen oder Daten von einem Ende zum anderen Ende über die Methode write() senden.

Daten: Wenn ein Ende write() aufruft, um Daten zu senden, löst das andere Ende das Datenereignis aus, und die vom Ereignis übergebenen Daten sind die von write() gesendeten Daten

Ende: Dieses Ereignis wird ausgelöst, wenn eines der Enden der Verbindung FIN-Daten sendet.

connect: Dieses Ereignis wird für den Client verwendet und ausgelöst, wenn der Socket erfolgreich mit dem Server verbunden ist.

drain: Wenn eines der Enden write() aufruft, um Daten zu senden, löst das aktuelle Ende dieses Ereignis aus.

Fehler: Wird bei Ausnahme

gesendet

Schließen: Wird ausgelöst, wenn der Socket vollständig geschlossen ist

Timeout: Wenn die Verbindung nach einer bestimmten Zeit nicht mehr aktiv ist, wird dieses Ereignis ausgelöst, um den Benutzer darüber zu informieren, dass die Verbindung inaktiv ist.

TCP verfügt über eine bestimmte Optimierungsstrategie für kleine Datenpakete im Netzwerk: den Nagle-Algorithmus, der erst ausgelöst wird, wenn die Daten eine bestimmte Menge erreichen.

UDP-Dienst

UDP heißt User Datagram Protocol und ist kein verbindungsorientierter Dienst. UDP in Node ist nur eine EventEmitter-Instanz, keine Stream-Instanz und verfügt über die folgenden benutzerdefinierten Ereignisse:

(1) Nachricht: Wird ausgelöst, wenn der UDP-Socket den Netzwerkkarten-Port abhört und eine Nachricht empfängt. Die vom Trigger übertragenen Daten sind das Nachrichtenpufferobjekt und eine Remote-Adressinformation.

(2) Abhören: Dieses Ereignis wird ausgelöst, wenn der UDP-Socket mit dem Abhören beginnt.

(3) close: Dieses Ereignis wird ausgelöst, wenn die Methode close () aufgerufen wird, und das Nachrichtenereignis wird nicht mehr ausgelöst. Wenn Sie das Nachrichtenereignis erneut auslösen müssen, müssen Sie es erneut binden.

(4) Fehler: Wird ausgelöst, wenn eine Ausnahme auftritt. Wenn sie nicht überwacht wird, wird sie direkt ausgelöst, um den Prozess zu beenden.

HTTP-Dienst

Das http-Modul in Node wird vom TCP-Server (Net-Modul) geerbt. Es kann Verbindungen mit mehreren Clients aufrechterhalten, da es nicht für jede Verbindung Threads erstellt und eine sehr geringe Speichernutzung aufrechterhält, wodurch eine hohe Parallelität erreicht werden kann. Der Unterschied zwischen HTTP-Dienst und TCP-Dienst besteht darin, dass nach der Aktivierung von Keepalive eine TCP-Sitzung für mehrere Anforderungen und Antworten verwendet werden kann. TCP-Dienste werden in Verbindungseinheiten und HTTP-Dienste in Anforderungseinheiten bereitgestellt. Das http-Modul kapselt den Prozess von der Verbindung bis zur Anfrage.

Das http-Modul abstrahiert das Lesen und Schreiben des für die Verbindung verwendeten Sockets in ServerRequest- und ServerResponse-Objekte, die Anforderungs- bzw. Antwortvorgängen entsprechen.

(1) HTTP-Anfrage

Für Lesevorgänge auf TCP-Verbindungen kapselt das http-Modul diese als ServerRequest-Objekte. Der Header-Teil ist beispielsweise req.method, req.url, req.headers, und der Nachrichtentext-Datenteil wird als schreibgeschütztes Stream-Objekt abstrahiert. Wenn die Geschäftslogik die Daten im Nachrichtentext lesen muss, ist dies der Fall Der Datenfluss muss abgeschlossen sein, bevor er ausgeführt werden kann.

(2) HTTP-Antwort

Die HTTP-Antwort kapselt den Schreibvorgang der zugrunde liegenden Verbindung und kann als beschreibbares Stream-Objekt betrachtet werden.

Methoden für Antwortnachrichten-Header-Informationen: Methoden res.setHeader() und res.writeHeader(). Sie können setHeader mehrmals verwenden, aber Sie müssen writeHeader aufrufen, um die Verbindung zu schreiben, damit sie wirksam wird.

Teil der Nachrichtentextmethoden: res.write()- und res.end()-Methoden

(3) HTTP-Serverereignisse

Verbindung: Wenn der Client eine TCP-Verbindung mit dem Server aufbaut, wird ein Verbindungsereignis ausgelöst

Anfrage: Nach dem Herstellen einer TCP-Verbindung abstrahiert die unterste Ebene des http-Moduls die HTTP-Anfrage und die HTTP-Antwort aus dem Datenfluss. Wenn die Anfragedaten an den Server gesendet werden, wird das Ereignis nach dem Parsen des HTTP-Anfrageheaders ausgelöst ; in res.end() Danach steht die TCP-Verbindung für die nächste Anfrage zur Verfügung.

close: Rufen Sie die Methode server.close auf, um den Empfang neuer Verbindungen zu stoppen. Dieses Ereignis wird ausgelöst, wenn alle bestehenden Verbindungen getrennt werden.

checkContinue: Wenn einige Clients große Datenmengen senden, senden sie zunächst eine Anfrage mit Expect: 100-continue im Header an den Server, und der Dienst löst dieses Ereignis aus;

connect: Wird ausgelöst, wenn der Client eine CONNECT-Anfrage initiiert

Upgrade: Wenn der Client ein Upgrade des Verbindungsprotokolls anfordert, muss er mit dem Server verhandeln, und der Client bringt das Feld „Updagrade“ in den Anforderungsheader

clientError: Der verbundene Client sendet einen Fehler und wenn der Fehler an den Server übertragen wird, wird dieses Ereignis ausgelöst

(4) HTTP-Client

Das http-Modul stellt http.request(options, connect) zum Erstellen von HTTP-Clients bereit.

Der HTTP-Client ähnelt dem Server. Sein Ereignis wird als Antwort bezeichnet. Wenn ClientRequest die Antwortnachricht analysiert, wird das Antwortereignis ausgelöst, sobald der Antwortheader analysiert wird, und ein Antwortobjekt wird als ClientResponse bezeichnet Nachfolgende Antwortnachrichten werden als schreibgeschützter Stream bereitgestellt.

(5) HTTP-Client-Ereignisse

Antwort: Dieses Ereignis wird ausgelöst, wenn der Client, der dem Anforderungsereignis des Servers entspricht, nach Ausgabe der Anforderung eine Antwort erhält.

Socket: wird ausgelöst, wenn eine im zugrunde liegenden Verbindungspool hergestellte Verbindung dem aktuellen Anforderungsobjekt zugewiesen wird;

Verbinden: Wenn der Client eine CONNECT-Anfrage an den Server sendet und der Server mit dem Statuscode 200 antwortet, löst der Client dieses Ereignis aus.

Upgrade: Wenn der Client eine Upgrade-Anfrage an den Server sendet und der Server mit dem Status „101 Switching Protocols“ antwortet, löst der Client dieses Ereignis aus.

continue: Nachdem der Client einen Expect: 100-continue-Header an den Server gesendet hat, versucht er, größere Daten zu senden. Wenn der Server mit einem 100 continue-Status antwortet, löst der Server dieses Ereignis aus

WebSocket-Dienst

WebSocket erschien erstmals als wichtige Funktion von HTML5 und bietet im Vergleich zu HTTP die folgenden Vorteile:

(1) Der Client und der Server stellen nur eine TCP-Verbindung her, sodass weniger Verbindungen verwendet werden können

(2) Der WebSocket-Server kann Daten an den Client übertragen, was weitaus flexibler und effizienter ist als der HTTP-Request-Response-Modus

(3) Leichterer Protokollheader, der die Datenübertragung reduziert

Es gibt keine integrierte WebSocket-Bibliothek in Node, aber das ws-Modul der Community kapselt die zugrunde liegende Implementierung von WebSocket, wie zum Beispiel das berühmte socket.io

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was sind die C++-Open-Source-Bibliotheken? Was sind die C++-Open-Source-Bibliotheken? Apr 22, 2024 pm 05:48 PM

C++ bietet einen umfangreichen Satz an Open-Source-Bibliotheken, die die folgenden Funktionen abdecken: Datenstrukturen und Algorithmen (Standard Template Library), Multithreading, reguläre Ausdrücke (Boost), lineare Algebra (Eigen), grafische Benutzeroberfläche (Qt), Computer Vision (OpenCV), maschinelles Lernen (TensorFlow) Verschlüsselung (OpenSSL) Datenkomprimierung (zlib) Netzwerkprogrammierung (libcurl) Datenbankverwaltung (sqlite3)

Gibt es einen großen Unterschied zwischen NodeJS und Java? Gibt es einen großen Unterschied zwischen NodeJS und Java? Apr 21, 2024 am 06:12 AM

Die Hauptunterschiede zwischen Node.js und Java sind Design und Funktionen: Ereignisgesteuert vs. Thread-gesteuert: Node.js ist ereignisgesteuert und Java ist Thread-gesteuert. Single-Threaded vs. Multi-Threaded: Node.js verwendet eine Single-Threaded-Ereignisschleife und Java verwendet eine Multithread-Architektur. Laufzeitumgebung: Node.js läuft auf der V8-JavaScript-Engine, während Java auf der JVM läuft. Syntax: Node.js verwendet JavaScript-Syntax, während Java Java-Syntax verwendet. Zweck: Node.js eignet sich für I/O-intensive Aufgaben, während Java für große Unternehmensanwendungen geeignet ist.

So verbinden Sie NodeJS mit der MySQL-Datenbank So verbinden Sie NodeJS mit der MySQL-Datenbank Apr 21, 2024 am 06:13 AM

Um eine Verbindung zu einer MySQL-Datenbank herzustellen, müssen Sie die folgenden Schritte ausführen: Installieren Sie den MySQL2-Treiber. Verwenden Sie mysql2.createConnection(), um ein Verbindungsobjekt zu erstellen, das die Hostadresse, den Port, den Benutzernamen, das Passwort und den Datenbanknamen enthält. Verwenden Sie „connection.query()“, um Abfragen durchzuführen. Verwenden Sie abschließend Connection.end(), um die Verbindung zu beenden.

Wie verarbeiten C++-Funktionen DNS-Abfragen in der Netzwerkprogrammierung? Wie verarbeiten C++-Funktionen DNS-Abfragen in der Netzwerkprogrammierung? Apr 27, 2024 pm 06:39 PM

Die C++-Standardbibliothek stellt Funktionen zur Verarbeitung von DNS-Abfragen in der Netzwerkprogrammierung bereit: gethostbyname(): Hostinformationen basierend auf dem Hostnamen finden. gethostbyaddr(): Hostinformationen basierend auf der IP-Adresse finden. dns_lookup(): Löst DNS asynchron auf.

Wie implementieren C++-Funktionen Netzwerksicherheit in der Netzwerkprogrammierung? Wie implementieren C++-Funktionen Netzwerksicherheit in der Netzwerkprogrammierung? Apr 28, 2024 am 09:06 AM

C++-Funktionen können Netzwerksicherheit bei der Netzwerkprogrammierung erreichen: 1. Verwendung von Verschlüsselungsalgorithmen (openssl) zur Verschlüsselung der Kommunikation; 2. Verwendung digitaler Signaturen (cryptopp) zur Überprüfung der Datenintegrität und Absenderidentität; ( htmlcxx) zum Filtern und Bereinigen von Benutzereingaben.

Vom Einstieg in die Java-Grundlagen bis zur praktischen Anwendung: Wie gelingt der schnelle Einstieg? Vom Einstieg in die Java-Grundlagen bis zur praktischen Anwendung: Wie gelingt der schnelle Einstieg? May 08, 2024 am 08:30 AM

Java-Einstieg in die Praxis: einschließlich grundlegender Syntaxeinführung (Variablen, Operatoren, Kontrollfluss, Objekte, Klassen, Methoden, Vererbung, Polymorphismus, Kapselung), Kernbibliotheken von Java-Klassen (Ausnahmebehandlung, Sammlungen, Generika, Eingabe-/Ausgabeströme, Netzwerkprogrammierung, Datums- und Zeit-API), praktische Fälle (Taschenrechneranwendung, einschließlich Codebeispiele).

Welche Beziehung besteht zwischen NodeJS und NPM? Welche Beziehung besteht zwischen NodeJS und NPM? Apr 21, 2024 am 06:09 AM

Node.js ist eine JavaScript-Laufzeitumgebung und npm ist ihr Paketmanager. Die beiden arbeiten zusammen, um Entwicklern das Schreiben serverseitiger Programme in JavaScript, die Verwendung von Modulen von Drittanbietern und die einfache Verwaltung von Modulen zu ermöglichen.

Für welche Projekte ist NodeJS geeignet? Für welche Projekte ist NodeJS geeignet? Apr 21, 2024 am 05:45 AM

Node.js eignet sich für die folgenden Projekttypen: Netzwerk- und Serveranwendungen, ereignisgesteuerte Anwendungen, Echtzeitanwendungen, datenintensive Anwendungen, Befehlszeilentools und Skripte, leichte Microservices

See all articles