Node fournit une multitude de modules de programmation réseau
Node模块 | 协议 |
net | TCP |
dgram | UDP |
http | HTTP |
https | HTTPS |
Les événements du service TCP sont divisés dans les deux catégories suivantes
(1), Événement serveur
Pour un serveur créé via net.createServer(), il s'agit d'une instance EventEmitter. Il existe les types d'événements personnalisés suivants :
écoute : déclenché après l'appel de Listen() pour lier un port ou un Domain Socket, en abrégé server.listen(port, Listener), transmis via le deuxième paramètre.
connexion : déclenchée lorsque chaque socket client se connecte au serveur. La manière concise de l'écrire est via net.createServer(), et le dernier paramètre est passé.
close : Déclenché lorsque le serveur est fermé. Après avoir appelé server.close(), le serveur cessera d'accepter de nouvelles connexions socket, mais conservera les connexions actuellement existantes. Cet événement sera déclenché une fois toutes les connexions déconnectées.
erreur : Cet événement sera déclenché lorsqu'une exception se produit sur le serveur.
(2), Événement de connexion
Le serveur peut maintenir des connexions avec plusieurs clients en même temps et constitue un objet Stream typique inscriptible et lisible pour chaque connexion. L'objet Stream peut être utilisé pour la communication entre le serveur et le client. Il peut lire des données d'une extrémité à l'autre via l'événement data, ou envoyer des données d'une extrémité à l'autre via la méthode write().
données : lorsqu'une extrémité appelle write() pour envoyer des données, l'autre extrémité déclenchera l'événement de données et les données transmises par l'événement sont les données envoyées par write()
end : cet événement sera déclenché lorsque l'une des extrémités de la connexion envoie des données FIN.
connect : Cet événement est utilisé pour le client et est déclenché lorsque le socket est connecté avec succès au serveur.
drain : lorsque l'une des extrémités appelle write() pour envoyer des données, la fin actuelle déclenche cet événement.
erreur : Envoyé en cas d'exception
fermer : Déclenché lorsque la prise est complètement fermée
timeout : Lorsque la connexion n'est plus active après un certain temps, cet événement est déclenché pour avertir l'utilisateur que la connexion est inactive.
TCP a une certaine stratégie d'optimisation pour les petits paquets de données dans le réseau : l'algorithme Nagle, qui se déclenche uniquement lorsque les données atteignent une certaine quantité.
Service UDP
UDP est appelé User Datagram Protocol, qui n'est pas un service orienté connexion. UDP dans Node est simplement une instance EventEmitter, pas une instance Stream, et comporte les événements personnalisés suivants :
(1) message : déclenché lorsque le socket UDP écoute le port de la carte réseau et reçoit un message. Les données transportées par le déclencheur sont l'objet Buffer du message et une information d'adresse distante.
(2) écoute : Cet événement est déclenché lorsque le socket UDP commence à écouter.
(3) close : Cet événement est déclenché lorsque la méthode close() est appelée, et l'événement message ne sera plus déclenché. Si vous devez déclencher à nouveau l'événement de message, vous devez le lier à nouveau.
(4) erreur : déclenchée lorsqu'une exception se produit. Si elle n'est pas surveillée, elle sera lancée directement pour provoquer la sortie du processus.
Service HTTP
Le module http de Node est hérité du serveur TCP (module net). Il peut maintenir des connexions avec plusieurs clients. Parce qu'il ne crée pas de threads pour chaque connexion et maintient une très faible utilisation de la mémoire, il peut atteindre une concurrence élevée. La différence entre le service HTTP et le service TCP réside dans le fait qu'une fois Keepalive activé, une session TCP peut être utilisée pour plusieurs requêtes et réponses. Les services TCP sont fournis dans des unités de connexion et les services HTTP sont fournis dans des unités de requête. Le module http encapsule le processus depuis la connexion jusqu'à la requête.
Le module http résume la lecture et l'écriture du socket utilisé pour la connexion aux objets ServerRequest et ServerResponse, qui correspondent respectivement aux opérations de requête et de réponse.
(1) Requête HTTP
Pour les opérations de lecture sur les connexions TCP, le module http les encapsule sous forme d'objets ServerRequest. Par exemple, la partie en-tête est req.method, req.url, req.headers et la partie données du corps du message est abstraite en tant qu'objet de flux en lecture seule. Si la logique métier doit lire les données dans le corps du message, elle est extraite. doit terminer le flux de données avant de pouvoir fonctionner.
(2) Réponse HTTP
La réponse HTTP encapsule l'opération d'écriture de la connexion sous-jacente et peut être considérée comme un objet de flux inscriptible.
Méthodes d'informations d'en-tête du message de réponse : méthodes res.setHeader() et res.writeHeader(), vous pouvez définirHeader plusieurs fois, mais vous devez appeler writeHeader pour écrire la connexion et prendre effet.
Une partie des méthodes du corps du message : méthodes res.write() et res.end()
(3) événements du serveur HTTP
Connexion : Lorsque le client établit une connexion TCP avec le serveur, un événement de connexion est déclenché
requête : après avoir établi une connexion TCP, la couche inférieure du module http extrait la requête HTTP et la réponse HTTP du flux de données. Lorsque les données de la requête sont envoyées au serveur, l'événement est déclenché après avoir analysé l'en-tête de la requête HTTP. ; dans res.end() Après cela, la connexion TCP est disponible pour la prochaine requête.
close : Appelez la méthode server.close pour arrêter de recevoir de nouvelles connexions. Cet événement est déclenché lorsque toutes les connexions existantes sont déconnectées.
checkContinue : Lorsque certains clients envoient des données volumineuses, ils envoient d'abord une requête avec Expect : 100-continue dans l'en-tête au serveur, et le service déclenche cet événement
;connect : déclenché lorsque le client initie une requête CONNECT
mise à niveau : lorsque le client demande la mise à niveau du protocole de connexion, il doit négocier avec le serveur, et le client apportera le champ Updagrade dans l'en-tête de la demande
clientError : Le client connecté envoie une erreur, et lorsque l'erreur est transmise au serveur, cet événement est déclenché
(4) Client HTTP
Le module http fournit http.request(options, connect) pour construire des clients HTTP.
Le client HTTP est similaire au serveur. Dans l'objet ClientRequest, son événement est appelé réponse Lorsque ClientRequest analyse le message de réponse, l'événement de réponse est déclenché dès que l'en-tête de réponse est analysé, et un objet de réponse ClientResponse est. transmis pour opération. Les messages de réponse suivants sont fournis sous forme de flux en lecture seule.
(5) Événements clients HTTP
réponse : Cet événement est déclenché lorsque le client correspondant à l'événement de requête du serveur reçoit une réponse après l'émission de la requête.
socket : déclenché lorsqu'une connexion établie dans le pool de connexions sous-jacent est affectée à l'objet de requête actuel
;connect : lorsque le client envoie une requête CONNECT au serveur, si le serveur répond avec un code d'état 200, le client déclenchera cet événement.
mise à niveau : lorsque le client envoie une demande de mise à niveau au serveur, si le serveur répond avec l'état 101 Switching Protocols, le client déclenchera cet événement.
continue : une fois que le client a envoyé un en-tête Expect: 100-continue au serveur, il tente d'envoyer des données plus volumineuses. Si le serveur répond avec un statut 100 continue, le serveur déclenchera cet événement
.Service WebSocket
WebSocket est apparu pour la première fois comme une fonctionnalité importante du HTML5. Par rapport au HTTP, il présente les avantages suivants :
(1) Le client et le serveur n'établissent qu'une seule connexion TCP, donc moins de connexions peuvent être utilisées
(2) Le serveur WebSocket peut transmettre des données au client, ce qui est bien plus flexible et efficace que le mode de réponse aux requêtes HTTP
(3) En-tête de protocole plus léger, réduisant la transmission de données
Il n'y a pas de bibliothèque WebSocket intégrée dans Node, mais le module ws de la communauté encapsule l'implémentation sous-jacente de WebSocket comme le fameux socket.io