Der Knoten bietet reichhaltige Netzwerkprogrammiermodule
| Knotenmodul | Protokoll |
| netto | TCP |
| DGRAM | UDP |
| http | Http |
| https | Https |
TCP -Serviceereignisse sind in die folgenden zwei Kategorien unterteilt
(1) Serverereignis
Für Server, die über Net.CreateServer () erstellt wurden, handelt es sich um eine EventEmitter -Instanz, und es gibt mehrere benutzerdefinierte Ereignisse:
Hören: Ausgelöst nach dem Aufrufen von Hören (), um den Port- oder Domänen -Socket zu binden, abgekürzt als Server.Listen (Port, Listener), über den zweiten Parameter übergeben.
Verbindung: Ausgelöst, wenn jeder Client -Socket mit dem Server verbunden ist. Der einfache Weg besteht darin, den letzten Parameter über net.CreateServer () zu übergeben.
Schließen: Ausgelöst, wenn der Server geschlossen ist. Nach dem Aufrufen von server.close () hört der Server auf, neue Socket -Verbindungen zu akzeptieren. Halten Sie jedoch die derzeit vorhandenen Verbindungen und warten Sie, bis alle Verbindungen getrennt werden. Dieses Ereignis wird ausgelöst.
Fehler: Dieses Ereignis wird ausgelöst, wenn eine Ausnahme auf dem Server auftritt.
(2) Verbindungsereignis
Der Server kann Verbindungen mit mehreren Clients gleichzeitig verwalten, ein typisch beschreibbares und lesbares Stream -Objekt für jede Verbindung. Stream -Objekte können für die Kommunikation zwischen dem Server und dem Client verwendet werden. Sie können Daten, die von einem Ende von einem Ende über Datenereignisse gesendet wurden, Daten lesen oder Daten von einem Ende an das andere Ende über Write () -Methode senden.
Daten: Wenn eine Seite auf Schreiben () zum Senden von Daten aufruft, löst die andere Seite das Datenereignis aus. Die vom Ereignis übergebenen Daten sind die von write () gesendeten Daten.
Ende: Dieses Ereignis wird ausgelöst, wenn ein Ende der Verbindung FIN -Daten sendet.
Connect: Dieses Ereignis wird für den Client verwendet und wird abgefeuert, wenn der Socket erfolgreich mit dem Server verbunden ist.
Drain: Wenn beide beendet sein, schreiben Sie () zum Senden von Daten, das aktuelle Ende löst das Ereignis aus.
Fehler: Wenn die Ausnahme gesendet wird
Schließen: Von der Steckdose abgefeuert
Timeout: Wenn die Verbindung nach einem bestimmten Zeitraum nicht mehr aktiv ist und das Ereignis auslöst, um den Benutzer darüber zu informieren, dass die Verbindung im Leerlauf ist.
TCP verfügt über bestimmte Optimierungsstrategien für kleine Datenpakete im Netzwerk: Nagle -Algorithmus, der nur ausgelöst wird, wenn die Daten einen bestimmten Betrag erreichen.
UDP -Dienste
UDP wird als Benutzerpaketprotokoll bezeichnet und ist kein verbindungsorientierter Service. UDP im Knoten ist nur eine Eventemitter -Instanz, keine Stream -Instanz mit den folgenden benutzerdefinierten Ereignissen:
(1) Nachricht: Wenn der UDP -Socket den Netzwerkkartenport überwacht und die Nachricht empfängt, sind die vom Trigger übertragenen Daten das Meldungspufferobjekt und eine Remote -Adressinformationen.
(2) Hören: Dieses Ereignis wird ausgelöst, wenn der UDP -Socket anfängt zuzuhören.
(3) Close: Dieses Ereignis wird ausgelöst, wenn die Close () -Methode aufgerufen wird und das Meldungsereignis nicht mehr ausgelöst wird. Wenn das Nachrichtenereignis erneut ausgelöst werden muss, muss es wiederhergestellt werden.
(4) Fehler: Ausgelöst, wenn eine Ausnahme auftritt. Wenn es nicht angehört wird, wird es direkt geworfen, wodurch der Prozess beendet wird.
HTTP -Service
Das HTTP -Modul im Knoten erbt vom TCP -Server (NET -Modul), das die Verbindung zu mehreren Clients aufrechterhalten kann. Da es keine Threads für jede Verbindung erstellt und einen sehr geringen Speicherpfundwerk beibehält, kann es eine hohe Parallelität erreichen. Der Unterschied zwischen dem HTTP -Dienst und dem TCP -Dienst besteht darin, dass nach der Aktivierung von Keepalive eine TCP -Sitzung für mehrere Anforderungen und Antworten verwendet werden kann. Der TCP -Dienst wird als Einheit für die Verbindung verwendet, und der HTTP -Dienst wird als Einheit zur Anforderung verwendet. Das HTTP -Modul soll den Vorgang der Verbindung zur Anforderung zusammenfassen.
Das HTTP -Modul wird die Lesen und Schreiben der Socket abstrahiert, die zur Verbindung zu ServerRequest- und ServerResponse -Objekten verwendet wird, die den Anforderungs- bzw. Antwortoperationen entsprechen.
(1) HTTP -Anfrage
Für den Lesevorgang der TCP -Verbindung umfasst das HTTP -Modul es als ServerRequest -Objekt. Zum Beispiel wird der Header-Teil Req.Method, Req.url, Req.headerers, der Datenteil des Nachrichtensystems in ein schreibgeschütztes Stream-Objekt abstrahiert. Wenn die Geschäftslogik Daten im Nachrichtensystem lesen muss, muss der Datenstrom abgeschlossen sein, bevor der Vorgang ausgeführt werden kann.
(2) HTTP -Antwort
Die HTTP -Antwort verkauft den Schreibbetrieb der zugrunde liegenden Verbindung, die als beschreibbares Stream -Objekt angesehen werden kann.
Die Header Informationsmethoden des Antwortpakets: res.setheader () und res.writeHeader () -Methoden. Sie können mehrmals für die Einstellung Setheader Setheader, aber Sie müssen WritHeHeader anrufen, um in die Verbindung zu schreiben, bevor sie wirksam werden.
Teilweise der Nachricht: res.write () und res.end () Methoden
(3) HTTP -Serverereignis
Verbindung: Wenn der Client eine TCP -Verbindung mit dem Server herstellt, wird ein Verbindungsereignis ausgelöst
Anforderung: Nach der Erstellung einer TCP -Verbindung abstraktiert das HTTP -Modul die HTTP -Anforderung und die HTTP -Antwort aus dem Datenstrom ab. Wenn die Anforderungsdaten an den Server gesendet werden, wird das Ereignis ausgelöst, nachdem der HTTP -Anforderungsheader analysiert wurde. Nach res.end () kann die TCP -Verbindung für die nächste Anfrage verwendet werden.
Schließen: Aufrufen der Server.Close -Methode Um nicht mehr neue Verbindungen zu empfangen, und dieses Ereignis auszulösen, wenn alle vorhandenen Verbindungen getrennt werden.
checkContinue: Wenn einige Clients größere Daten senden, senden sie zunächst eine Anfrage mit Erwartung: 100-kontinuieren im Header an den Server, und der Service löst das Ereignis aus;
Verbindung: Ausgelöst, wenn der Client eine Connect -Anforderung initiiert
Upgrade: Wenn der Client ein Upgrade des Verbindungsprotokolls benötigt, muss er mit dem Server verhandeln. Der Kunde bringt das Feld Updagrade in den Anforderungsheader.
ClientError: Der angeschlossene Client sendet einen Fehler und der Fehler wird an den Server übertragen und das Ereignis wird ausgelöst.
(4) HTTP -Client
Das HTTP -Modul bietet HTTP.Request (Optionen, Connect) für den Bau von HTTP -Clients.
Der HTTP -Client ähnelt dem Server. Im ClientRequest -Objekt heißt das Ereignis als Antwort. Wenn der ClientRequest die Antwortmeldung analysiert, wird das Antwortereignis ausgelöst, sobald der Antwortheader analysiert wird. Gleichzeitig wird ein Antwortobjekt ClientResponse für den Betrieb weitergegeben. Die nachfolgende Antwortnachricht wird in einem schreibgeschützten Stream bereitgestellt.
(5) HTTP -Client -Ereignisse
Antwort: Der Client, der dem Anforderungsereignis auf dem Server entspricht, löst das Ereignis aus, wenn die Anfrage nach Ausgabe der Anfrage beantwortet wird.
Socket: Entlassen, wenn die im zugrunde liegende Verbindungspool festgelegte Verbindung dem aktuellen Anforderungsobjekt zugewiesen ist;
Connect: Wenn der Client eine Connect -Anforderung an den Server sendet und der Server auf 200 Statuscode antwortet, löst der Client das Ereignis aus.
Upgrade: Wenn der Client die Upgrade -Anforderung genießt, wenn der Client den Server genießt, sendet eine Upgrade -Anforderung. Wenn der Server auf den Status "101" -Swechsel -Protokolle reagiert, löst der Client das Ereignis aus.
Fortsetzung: Nachdem der Client die Erwartung initiiert hat: 100-kontinierende Header-Informationen an den Server, versucht es, größere Daten zu senden. Wenn der Server auf den 100 -Fortsetzung des Status reagiert, löst der Server das Ereignis aus
Websocket -Dienste
WebSocket erschien zunächst als wichtiges Merkmal von HTML5 und hat die folgenden Vorteile gegenüber HTTP:
(1) Der Client und der Server stellen nur einmal die TCP -Verbindung her, und weniger Verbindungen können verwendet werden
(2) WebSocket -Server kann Daten an den Client weitergeben, was viel flexibler und effizienter ist als der HTTP -Anforderungsantwortmodus
(3) Leichterer Protokollheader zur Reduzierung der Datenübertragung
Es gibt keine Bibliotheksbibliothek im Node integriert, aber das WS-Modul der Community umfasst die zugrunde liegende Implementierung von WebSocket wie den berühmten Socket.io.