NodeJS-Studiennotizen zum Netzwerk programming_node.js
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
gesendetSchließ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 initiiertUpgrade: 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

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

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)

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.

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.

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.

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.

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).

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.

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