
Cómo comenzar rápidamente con VUE3.0: comience a aprender.
Este es el primer artículo de la serie de Nodejs. Cuando leí los tutoriales antes, muchos de ellos comenzaron con IO, búfer, ruta, evento, fs, proceso y. Mecanismos de bucle de eventos de nodo. Estas son de hecho las dependencias de desarrollo en las que se basa principalmente el desarrollo de nodos. Pero desde que aprendí sobre el nodo, significa que el nodo puede hacer el backend. Hablando de las capacidades que tiene, es decir, cómo interactuar con él al final. Introducción al módulo de comunicación del cliente,
me siento muy incómodo, así que cuando escribo mi propio resumen, debo escribir el módulo que se comunica entre el servidor. Y el cliente es el primero en sentirse cómodo. Incluso si los puntos de conocimiento del módulo de eventos y del módulo fs están involucrados en el proceso, puede dejarlo a un lado por ahora y simplemente comprender cómo net implementa la comunicación en su conjunto
Si desea aprender el módulo de comunicación, debe comprender el modelo de comunicación de red. Si desea recordar el modelo de comunicación de red, debe practicarlo para ayudar a la memoria. Hay mucho contenido en esta área. Quiero comprenderlo en profundidad y también requiere un estudio sistemático. Aquí hay una breve mención
:

Para nuestro front-end, debemos recordar los resultados del sistema del conjunto de protocolos TCP/IP:
capa de transporte
DNS.
: TCP/UDP
Capa de Internet: IP, ICMP (un protocolo subsidiario de la capa IP)
Capa de enlace de datos: PPP, SLIP
Capa física: La red tiene par trenzado, cable coaxial, fibra óptica y otros métodos de transmisión, siguiendo la especificación ISO2110
de ICMP a esto Se puede saber por los protocolos adjuntos al protocolo IP que no hay necesidad de preocuparse demasiado por la superposición de protocolos de red. ICMP obviamente necesita el protocolo IP como base, pero también está planificado como una capa de red. Creo que nuestra comprensión correcta del modelo OSI debería ser. Es más significativo utilizar el modelo OSI para analizar problemas que utilizar las llamadas capas de protocolos.
El conjunto de protocolos TCP/IP no se refiere simplemente a TCP. e IP, pero debido a que estos dos protocolos están demasiado fuera del círculo, TCP se usa /IP colectivamente se refiere a la colección de protocolos relacionados con Internet. Otra forma de decirlo es como un nombre colectivo para la familia de protocolos utilizados en Internet. El proceso de uso del protocolo TCP/IP
El flujo de transmisión del cliente y el servidor es el siguiente.

Si los roles se convierten en发送者y接受者, el flujo de transmisión es el siguiente:

Se puede ver que durante el proceso de transmisión, comenzando desde el extremo emisor, se agregará la información de encabezado requerida sin pasar por una capa de protocolo, capas de verificación y capas de codificación, y luego, cuando llegue al extremo receptor. Por el contrario, cada capa pasa por Quitar los encabezados correspondientes. Solo espere hasta que se obtengan los datos HTTP finales.
La imagen dearriba
.es de "HTTP ilustrado"
Pregunta: ¿Por qué los libros? En muchos lugares, los resultados del sistema OSI se fusionan en TCP/IP. Después del protocolo de cinco capas, ¿el nombre de la capa de red se convertirá en la capa de Internet?

Primer apretón de manos: el cliente envía el indicador SYN (el número de secuencia es J) al servidor e ingresa al estado SYN_SENT (esperando la confirmación del servidor).
Segundo apretón de manos: el servidor recibe SYN J del cliente y el servidor lo confirmará. El paquete de datos ha sido recibido y enviado el bit de bandera ACK (el número de secuencia es J + 1) y el bit de bandera SYN (el número de secuencia es K), y luego ingresa al estado SYN_REVD (aceptación de solicitud y estado de espera de confirmación del cliente)
tercer protocolo de enlace: El cliente ingresa Una vez establecida la conexión, el bit de indicador ACK (K + 1) se envía al servidor para confirmar que el cliente ha recibido la conexión establecida. Después de que el servidor recibe el indicador ACK, el servidor ingresa al estado de conexión establecida
. Ambos se utilizan para establecer quién es la conexión. No hay diferencia en la estructura de SYN y ACK, pero los objetos enviados son diferentes.
net模块es la implementación específica de la conexión TCP anterior. En
primer lugar, todavía se recomienda ir directamente a la documentación oficial para aprender la API. El contenido de la documentación china no es la última versión.
Cuando estudio, intento leer documentos en inglés cuando tengo tiempo. He estado insistiendo en esto durante medio año. No podía soportarlo al principio, pero ahora puedo contener el malestar y leerlo. El progreso con el tiempo es evidente. es algo bueno, significa que esta no es tu zona de confort. Después de todo, el coraje para cruzar tu zona de confort es la fuente del progreso
. A continuación, vayamos al grano. objetos para simular el cliente y el servidor. Cree dos archivos, client.js y service.js respectivamente. Cree a través de la línea de comando:
touch client.js && touch service.js
introduce el módulo net y deja que el servidor ingresa al estado LISTENT , configura el número de puerto y la dirección HOST (omite manualmente el proceso de resolución de DNS) y espera la llamada del cliente
const net = require("net");
publicación constante = 3306;
host constante = "127.0.0.1";
servidor constante = net.createServer();
server.listen(post, host); en este momento, el servidor corresponde al estado LISTEN del servidor en la conexión TCP y
luego escucha algunos eventos necesarios, que son los enlaces proporcionados por el servidor (pertenece al conocimiento relacionado con eventos). )
servidor.on("escuchando", ( ) => {
console.log("El servidor se puede conectar");
});
servidor.on("conexión", (socket) => {
console.log("Un cliente está visitando");
});
servidor.on("cerrar", () => {
console.log("El servidor está apagado");
});
servidor.on("error", (error) => {
console.log("El servidor tiene un error: ", error); // el error tiene información de error}); La cadena de códigos anterior implica
listening : un evento desencadenado después de escuchar laconnection del puerto: un evento desencadenado cuando un cliente visitasclose : Activado porerror de apagado del servidor: Activado por error del servidorCon respecto al close , debemos prestar atención al hecho de que el hermano en segundo plano generalmente
psdirectamente
Kill -9 pid
se realiza matando el hilo
en el perro connection , el parámetro formal es el nombre del socket. Su traducción al chino es una palabra anidada, que se encapsula en una secuencia por nodo. datos enviados por el cliente. Esto se debe a que los datos en sí tienen su propio método. Proceso socket en connection
server.on("conexión", (socket) => {
console.log("Un cliente está visitando");
socket.on("datos", (datos) => {
console.log(data); //Datos enviados por el cliente});
}); la transmisión se presentará en artículos futuros.
Dado que el servidor puede aceptar los datos enviados por el cliente, naturalmente puede responder al cliente en socket.on (por supuesto, también se puede escribir fuera):
socket.write. ("He recibido su servidor, cliente"); En este momento, si el cliente completó la recepción de los datos y luego cerró la conexión, también podemos monitorearla a través socket.on('close') :
socket.on. ("cerrar", () => {
console.log("El cliente cerró el otro extremo de la transmisión");
}); Coloque el resumen de eventos socket en client.js . En este momento, todo el contenido de service.js es el siguiente:
const net = require("net");
publicación constante = 3306;
host constante = "127.0.0.1";
servidor constante = net.createServer();
servidor.escuchar(publicación, host);
servidor.on("escuchando", () => {
console.log("El servidor se puede conectar");
});
servidor.on("conexión", (socket) => {
console.log("Un cliente está visitando");
socket.on("datos", (datos) => {
console.log(data); //Los datos enviados por el cliente socket.write("Los he recibido de su servidor, cliente");
});
socket.on("cerrar", () => {
console.log("El cliente cerró el otro extremo de la transmisión");
server.close(); // El cliente ya no necesita los datos, así que cerremos el servidor});
});
servidor.on("cerrar", () => {
console.log("El servidor está apagado");
});
servidor.on("error", (error) => {
console.log("El servidor tiene un error: ", error); // el error tiene información de error}); 3.2 client.js
parte del cliente es mucho más simple.
publicación constante = 3306;
host constante = "127.0.0.1";
const socket = net.connect(publicación, host);
socket.on("conectar", () => {
console.log("Ya conectado al servidor");
});
socket.write("Servidor, allá voy");
socket.on("datos", (datos) => {
console.log(data.toString());
socket.end();
});
socket.on("cerrar", () => {
console.log("La conexión se ha cerrado");
}); Resumen de eventos socket
connect : la conexión exitosa con el servidor activadata : recibe los parámetros enviados por elend del servidor: después de recibir los datos, puede activarclose : el cierre del socket activaservice.js y client.js han sido escritos Ejecútelos después de abrir dos terminales:
node service.js. Node client.js
puede verificar los resultados impresos por sí mismo.
Básicamente, todo el marco de conexión TCP se ha completado. Por supuesto, la producción real es mucho más que eso. También necesita lidiar con paquetes adhesivos, desempaquetado/empaquetado, paquetes de latidos. etc.
Este artículo está reproducido de: https://juejin.cn/post/7084618854801866765
Autor: Soy Little Orange