Comment démarrer rapidement avec VUE3.0 : Commencez par apprendre.
Il s'agit du premier article de la série Nodejs. Lorsque j'ai lu des didacticiels auparavant, beaucoup d'entre eux ont commencé avec les E/S, le tampon, le chemin, l'événement, le fs, le processus et. Mécanismes de boucle d'événements de nœuds. Ce sont en effet les dépendances de développement sur lesquelles repose principalement le développement de nœuds. Mais depuis que j'ai découvert le nœud, cela signifie que le nœud peut faire le backend, mais la première moitié de ces cours le sont. parler des capacités dont il dispose, c'est-à-dire comment interagir avec lui au final. Introduction au module de communication client,
je me sens très mal à l'aise, donc quand j'écris mon propre résumé, je dois écrire le module qui communique entre le serveur. et le client se sent d'abord à l'aise. Même si les points de connaissance du module event et du module fs sont impliqués dans le processus, vous pouvez le mettre de côté pour l'instant et simplement comprendre comment net
implémente la communication dans son ensemble
Si vous souhaitez apprendre le module de communication, vous devez comprendre le modèle de communication réseau. Si vous souhaitez vous souvenir du modèle de communication réseau, vous devez le pratiquer. Pour aider la mémoire. Il y a beaucoup de contenu dans ce domaine. Je veux en avoir une compréhension approfondie, et cela nécessite également une étude systématique. Voici juste une brève mention.
Envoyez cette ancienne photo :
Pour notre front-end, nous devons mémoriser les résultats système de la suite de protocoles TCP/IP
couche de transport
DNS.
: Couche Internet TCP/UDP
: IP, ICMP (un protocole subsidiaire de la couche IP)
Couche liaison de données : PPP, SLIP
Couche physique : Le réseau est doté d'une paire torsadée, d'un câble coaxial, d'une fibre optique et d'autres méthodes de transmission, conformément à la spécification ISO2110
de ICMP
à cela On peut savoir d'après les protocoles attachés au protocole IP qu'il n'y a pas lieu de trop s'inquiéter de la superposition des protocoles réseau. ICMP
a évidemment besoin du protocole IP comme base, mais il est également prévu comme couche réseau. Notre compréhension correcte du modèle OSI devrait, je pense, être plus significative d'utiliser le modèle OSI pour analyser les problèmes que d'utiliser ce qu'on appelle la superposition de protocoles.
La suite de protocoles TCP/IP ne fait pas uniquement référence au TCP. et IP, mais comme ces deux protocoles sont trop éloignés du cercle, TCP est utilisé collectivement. /IP fait référence à l'ensemble des protocoles liés à Internet. Une autre façon de le dire est de désigner collectivement la famille de protocoles utilisée dans Internet. processus d'utilisation du protocole TCP/IP
Le flux de transmission du client et du serveur est le suivant.
Si les rôles deviennent发送者
et接受者
, le flux de transmission est le suivant :
On peut voir que pendant le processus de transmission, à partir de l'extrémité émettrice, les informations d'en-tête requises seront ajoutées sans passer par une couche de protocole et des couches de codage, puis lorsqu'il s'agira de l'extrémité réceptrice. fonctionne au contraire. Chaque couche passe par Supprimez les en-têtes correspondants. Attendez simplement que les données HTTP finales soient obtenues.
L'
image ci-dessus
.est tirée de "Illustrated HTTP"
De nombreux endroits fusionnent les résultats du système OSI dans TCP/IP ? Après le protocole à cinq couches, le nom de la couche réseau deviendra-t-il la couche Internet
Première poignée de main : le client envoie l'indicateur SYN (le numéro de séquence est J) au serveur et entre dans l'état SYN_SENT (en attente de confirmation du serveur).
Deuxième poignée de main : le serveur reçoit SYN J du client et le serveur confirmera. Le paquet de données a été reçu et envoyé le bit d'indicateur ACK (le numéro de séquence est J + 1) et le bit d'indicateur SYN (le numéro de séquence est K), puis entre dans l'état SYN_REVD (acceptation de la demande et état d'attente de confirmation du client)
troisième poignée de main : le client entre Une fois la connexion établie, le bit d'indicateur ACK (K+ 1) est envoyé au serveur pour confirmer que le client a reçu la connexion établie. Une fois que le serveur a reçu l'indicateur ACK, le serveur entre dans l'état de connexion établie
.J et
K sont tous deux utilisés pour établir qui est la connexion.Dans la demande, il n'y a pas de différence dans la structure de SYN et ACK, mais les objets envoyés sont différents.3.net
net模块
est l'implémentation spécifique de la connexion TCP ci-dessus.
abord
, il est toujours recommandé d'aller directement à la documentation officielle pour apprendre l'API. Le contenu de la documentation chinoise n'est pas la dernière version.
Quand j'étudie, j'essaie de lire les documents en anglais quand j'ai le temps. .J'insiste là-dessus depuis six mois. Je ne pouvais pas le supporter au début, mais maintenant je peux retenir l'inconfort et le lire. Les progrès au fil du temps sont évidents. C'est une bonne chose. Cela signifie que ce n'est pas votre zone de confort. Après tout, le courage de traverser votre zone de confort est la source du progrès
. Ensuite, allons droit au but. Puisque vous voulez apprendre la communication, alors nous en avons besoin de deux. Objets pour simuler le client et le serveur. Créez respectivement deux fichiers, client.js
et service.js
Créez via la ligne de commande :
touch client.js && touch service.js
introduit le module net
et laisse le le serveur entre dans l'état LISTENT
, configure le numéro de port et l'adresse HOST (ignore manuellement le processus de résolution DNS) et attend l'appel du client
const net = require("net"); poste const = 3306 ; hôte const = "127.0.0.1" ; const serveur = net.createServer(); server.listen(post, host);
À ce stade, le serveur correspond à l'état LISTEN
du serveur dans la connexion TCP.
Il écoute ensuite certains événements nécessaires, qui sont les hooks fournis par le serveur (appartient aux connaissances liées aux événements. )
server.on("écoute", ( ) => { console.log("Le serveur peut être connecté"); }); server.on("connexion", (socket) => { console.log("Un client est en visite"); }); serveur.on("fermer", () => { console.log("Le serveur est arrêté"); }); serveur.on("erreur", (erreur) => { console.log("Le serveur a une erreur : ", error); // l'erreur contient des informations d'erreur});
La chaîne de codes ci-dessus implique,
listening
: un événement déclenché après l'écoute de laconnection
du port : un événement déclenché lorsqu'un client visitesclose
: Déclenché parerror
d'arrêt du serveur : Déclenché par une erreur de serveurConcernant close
, nous devons faire attention au fait que le frère d'arrière-plan est généralement directement
ps Kill -9 pid
est effectué en tuant le thread.
Dans le chien connection
, le paramètre formel est le nom du socket. Sa traduction chinoise est un mot imbriqué, qui est encapsulé dans un flux par nœud. données envoyées par le client. En effet, les données elles-mêmes ont leur propre méthode. Je traite socket
dans connection
server.on("connection", (socket) => { console.log("Un client est en visite"); socket.on("données", (données) => { console.log(data); //Données envoyées par le client}); });
stream sera introduit dans les prochains articles.
Puisque le serveur peut accepter les données envoyées par le client, il peut naturellement répondre au client dans socket.on
(bien sûr, cela peut également être écrit à l'extérieur) :
socket.write. ("J'ai reçu votre serveur, client");
À ce moment, si le client a terminé de recevoir les données puis a fermé la connexion, nous pouvons également le surveiller via socket.on('close')
:
socket.on. ("fermer", () => { console.log("Le client a arrêté l'autre extrémité du flux"); });
Mettez le résumé des événements socket
dans client.js
. À l'heure actuelle, tout le contenu de service.js
est le suivant :
const net = require("net"); poste const = 3306 ; hôte const = "127.0.0.1" ; const serveur = net.createServer(); server.listen (poste, hôte); server.on("écoute", () => { console.log("Le serveur peut être connecté"); }); server.on("connexion", (socket) => { console.log("Un client est en visite"); socket.on("données", (données) => { console.log(data); //Les données envoyées par le client socket.write("Je les ai reçues de votre serveur, client"); }); socket.on("fermer", () => { console.log("Le client a arrêté l'autre extrémité du flux"); server.close(); // Le client n'a plus besoin des données, fermons donc le serveur}); }); serveur.on("fermer", () => { console.log("Le serveur est arrêté"); }); serveur.on("erreur", (erreur) => { console.log("Le serveur a une erreur : ", error); // l'erreur contient des informations d'erreur});3.2
client.js
partie client est beaucoup plus simple.
poste const = 3306 ; hôte const = "127.0.0.1" ; const socket = net.connect(post, hôte); socket.on("connecter", () => { console.log("Déjà connecté au serveur"); }); socket.write("Serveur, me voici"); socket.on("données", (données) => { console.log(data.toString()); socket.end(); }); socket.on("fermer", () => { console.log("La connexion a été fermée"); });
Résumé des événements socket
connect
: Une connexion réussie avec le serveur déclenchedata
: Reçoit les paramètres envoyés par le serveurend
Une fois les données reçues, elle peut déclencherclose
: La fermeture du socket déclencheservice.js
et client.js
ont été écrits. Exécutez-les après avoir ouvert deux terminaux :
node service.js. node client.js
peut vérifier les résultats imprimés par lui-même.
L'ensemble du cadre de connexion TCP est pratiquement terminé. Bien sûr, la production réelle est bien plus que cela, elle doit également gérer les paquets collants, le déballage/empaquetage, les paquets de battement de cœur, etc. etc.
Cet article est reproduit à partir de : https://juejin.cn/post/7084618854801866765
Auteur : Je suis Little Orange