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