
So starten Sie schnell mit VUE3.0: Beginnen Sie mit dem Lernen.
Dies ist der erste Artikel in der Nodejs-Reihe. Viele von ihnen begannen mit IO, Puffer, Pfad, Ereignis, FS, Prozess und Node-Ereignisschleifenmechanismen sind in der Tat die Entwicklungsabhängigkeiten, auf denen die Node-Entwicklung basiert. Seit ich etwas über Node erfahren habe, bedeutet dies, dass Node das Backend ausführen kann Wenn ich über die Fähigkeiten spreche, die es hat, das heißt, wie man damit interagiert, fühle ich mich am Ende
sehr unwohl. Wenn ich also meine eigene Zusammenfassung schreibe, muss ich das Modul schreiben, das zwischen den Servern kommuniziert
und der Client muss sich zuerst wohl fühlen.wenn die Wissenspunkte des Event-Moduls und des FS-Moduls in den Prozess involviert sind, können Sie es vorerst beiseite legen und einfach verstehen, wie net die Kommunikation als Ganzes implementiert
Wenn Sie das Netzwerkkommunikationsmodell lernen möchten, müssen Sie es üben. Dies ist der Schwerpunkt des Interviews. Es gibt viele Inhalte in diesem Bereich, und ich möchte auch ein systematisches Studium durchführen. Hier ist nur eine kurze Erwähnung
.

Für unser Frontend müssen wir uns die Systemergebnisse der TCP/IP-Protokollsuite merken
: http (Port 80), FTP (21), SMTP (E-Mail senden), POP (E-Mail empfangen), DNS
-Transportschicht : TCP/UDP
Internetschicht: IP, ICMP (ein Nebenprotokoll der IP-Schicht)
Datenverbindungsschicht: PPP, SLIP
Physikalische Schicht: Das Netzwerk verfügt über Twisted Pair, Koaxialkabel, Glasfaser und andere Übertragungsmethoden gemäß der ISO2110-Spezifikation
von ICMP dazu Aus den an das IP-Protokoll angehängten Protokollen ist ersichtlich, dass man sich über die Schichtung der Netzwerkprotokolle offensichtlich keine allzu großen Gedanken machen muss, ICMP es ist auch als Netzwerkschicht geplant Unser korrektes Verständnis des OSI-Modells sollte meiner Meinung nach sinnvoller sein, das OSI-Modell zur Analyse von Problemen zu verwenden, als die sogenannte Schichtung von Protokollen zu verwenden.
Die TCP/IP-Protokollsuite bezieht sich nicht nur auf TCP und IP-Protokolle, aber da diese beiden Protokolle zu weit außerhalb des Kreises liegen, wird TCP gemeinsam verwendet. /IP bezieht sich auf die Sammlung von Protokollen im Zusammenhang mit dem Internet. Anders ausgedrückt: als Sammelbezeichnung für die Protokollfamilie, die im Internet verwendet wird Der Prozess der Verwendung des TCP/IP-Protokolls
ist wie folgt

Wenn die Rollen zu发送者und接受者werden, ist der Übertragungsablauf wie folgt:

Es ist ersichtlich, dass die erforderlichen Header-Informationen während des Übertragungsprozesses vom Sendeende aus hinzugefügt werden, ohne eine Protokollschicht und dann eine Kodierungsschicht zu durchlaufen
Das Gegenteil ist der Fall. Warten Sie einfach,
bis die endgültigen HTTP-Daten vorliegen.
Das obige Bild ist
das allgemeine Netzwerkprotokollmodell
An vielen Stellen werden die Ergebnisse des OSI-Systems in TCP/IP zusammengeführt. Wird der Name der Netzwerkschicht zur Internetschicht?

Erster Handshake: Der Client sendet das SYN-Flag (Sequenznummer ist J) an den Server und wechselt in den SYN_SENT-Status (wartet auf Bestätigung vom Server).
Zweiter Handshake: Der Server empfängt SYN J vom Client und der Server bestätigt Das Datenpaket hat das ACK-Flag-Bit (Sequenznummer ist J + 1) und das SYN-Flag-Bit (Sequenznummer ist K) empfangen und gesendet und wechselt dann in den SYN_REVD-Status (Anforderungsannahme und Warten auf Client-Bestätigungsstatus)
. Dritter Handshake:
Nachdem die Verbindung hergestellt wurde, wird vom Client das ACK-Flag-Bit (K+1
) an den Server gesendet, um zu bestätigen, dass der Client das ACK-Flag empfangen hat
K wird verwendet, um festzustellen, wer die Verbindung ist. Es gibt keinen Unterschied in der Struktur von SYN und ACK, aber die gesendeten Objekte sind unterschiedlich.
net模块ist die spezifische Implementierung der oben genannten TCP-Verbindung Zunächst
wird immer noch empfohlen, die offizielle Dokumentation zu lesen, um die API zu lernen.
Wenn ich Zeit habe, versuche ich, die neueste Version zu lesen Ich habe ein halbes Jahr lang darauf bestanden, aber jetzt kann ich das Unbehagen zurückhalten und es lesen. Der Fortschritt im Laufe der Zeit ist offensichtlich Das ist eine gute Sache. Denn der Mut, die eigene Komfortzone zu überschreiten, ist die Quelle des Fortschritts
. Als nächstes wollen wir die Kommunikation erlernen Objekte zum Simulieren des Clients und service.js Servers. Erstellen Sie über die Befehlszeile zwei Dateien client.js
touch client.js && touch service.js
führt das net ein und lässt das Der Server wechselt in den LISTENT Status, konfiguriert die Portnummer und die HOST-Adresse (überspringen Sie den DNS-Auflösungsprozess manuell) und wartet auf den Anruf des Clients.
const net = require("net");
const post = 3306;
const host = "127.0.0.1";
const server = net.createServer();
server.listen(post, host); Zu diesem Zeitpunkt entspricht der Server dem LISTEN Status in der TCP-Verbindung.
Dann hört er auf einige notwendige Ereignisse, die vom Server bereitgestellt werden (Gehört zum ereignisbezogenen Wissen). )
server.on("listening", ( ) => {
console.log("Der Server kann verbunden werden");
});
server.on("connection", (socket) => {
console.log("Ein Client ist zu Besuch");
});
server.on("close", () => {
console.log("Der Server ist heruntergefahren");
});
server.on("error", (error) => {
console.log listeningconnectionFehler
hat Fehlerinformationen});
close : Ausgelöst durch Server-Shutdown-error : Ausgelöst durch Server-FehlerIn Bezug auf close müssen wir darauf achten, dass der Hintergrundbruder normalerweise direkt
ps Kill -9 pid
wird durch das Beenden des Threads ausgeführt.
connection formale Parameter ist der Socket-Name, der in einem Stream durch einen Knoten gekapselt wird
server.on("connection", (socket) => { socket connection
console.log("Ein Client ist zu Besuch");
socket.on("data", (data) => {
console.log(data); //Vom Client gesendete Daten});
}); Da der Server die vom Client gesendeten Daten akzeptieren kann, kann er natürlich inStream wird in zukünftigen Artikeln eingeführt.
socket.on
socket.on (natürlich kann er auch außerhalb geschrieben werden).
(„Ich habe Ihren Server, Client erhalten“);
Wenn der Client den Empfang der Daten abgeschlossen und dann die Verbindung geschlossen hat, können wir sie auch über socket.on('close')
überwachen ("schließen", () => {
console.log("Der Client hat das andere Ende des Streams heruntergefahren");
}); Fügen Sie die Zusammenfassung der socket -Ereignisse in client.js ein. Zu diesem Zeitpunkt lautet der gesamte Inhalt von service.js wie folgt:
const net = require("net");
const post = 3306;
const host = "127.0.0.1";
const server = net.createServer();
server.listen(post, host);
server.on("listening", () => {
console.log("Der Server kann verbunden werden");
});
server.on("connection", (socket) => {
console.log("Ein Client ist zu Besuch");
socket.on("data", (data) => {
console.log(data); //Die vom Client gesendeten Daten socket.write("Ich habe sie von Ihrem Server, Client" erhalten);
});
socket.on("close", () => {
console.log("Der Client hat das andere Ende des Streams heruntergefahren");
server.close(); // Der Client benötigt die Daten nicht mehr, also schließen wir den Server});
});
server.on("close", () => {
console.log("Der Server ist heruntergefahren");
});
server.on("error", (error) => {
console.log("Der Server hat einen Fehler: ", error); // error has error information}); 3.2
Client-Teil ist viel einfacher.
const post = 3306;
const host = "127.0.0.1";
const socket = net.connect(post, host);
socket.on("connect", () => {
console.log("Bereits mit dem Server verbunden");
});
socket.write("Server, hier komme ich");
socket.on("data", (data) => {
console.log(data.toString());
socket.end();
});
socket.on("close", () => {
console.log("Die Verbindung wurde geschlossen");
}); Zusammenfassung der socket -Ereignisse
connect : Erfolgreiche Verbindung mit dem Server löstdata aus: Empfängt die vom Server gesendeten Parameterend : Nachdem die Daten empfangen wurden, kann dasclose ausgelöst werden: Das Schließen des Sockets löstservice.js und client.js
wurden geschrieben. Führen Sie sie aus, nachdem Sie zwei Terminals geöffnet haben:
node service.js node client.js
kann die gedruckten Ergebnisse im
Grunde selbst überprüfen. Natürlich ist die eigentliche Produktion weitaus mehr als das. Es muss sich auch mit Sticky-Paketen, Entpacken/Verpacken und Heartbeat-Paketen befassen. usw.
Dieser Artikel ist reproduziert von: https://juejin.cn/post/7084618854801866765
Autor: Ich bin Little Orange