Como começar rapidamente com o VUE3.0: Comece a aprender
Este é o primeiro artigo da série Nodejs. Quando li os tutoriais antes, muitos deles começaram com IO, buffer, path, event, fs, process e. mecanismos de loop de eventos do nó. Essas são, de fato, as dependências de desenvolvimento das quais o desenvolvimento do nó depende principalmente. Desde que aprendi sobre o nó, isso significa que o nó pode fazer o backend, mas a primeira metade desses cursos é. falando sobre as capacidades que ele possui, ou seja, como interagir com ele no final Introdução ao módulo de comunicação com o cliente
me sinto muito desconfortável, então quando escrevo meu próprio resumo, devo escrever o módulo que se comunica entre o servidor.
e o cliente primeiro se sente confortável.que os pontos de conhecimento do módulo de evento e do módulo fs estejam envolvidos no processo, você pode deixar isso de lado por enquanto e entender como net
implementa a comunicação como um todo.
Se você quiser aprender o módulo de comunicação, terá que entender o modelo de comunicação de rede. Se quiser lembrar o modelo de comunicação de rede, terá que praticá-lo. Há muito conteúdo nesta área. Quero ter um conhecimento profundo sobre ele e também requer um estudo sistemático. Aqui está apenas uma breve menção
.
Para nosso front-end, precisamos lembrar os resultados do sistema do conjunto de protocolos TCP/IP
camada de transporte
DNS.
: TCP/UDP
Camada Internet: IP, ICMP (um protocolo subsidiário da camada IP)
Camada de enlace de dados: PPP, SLIP
Camada física: A rede possui par trançado, cabo coaxial, fibra óptica e outros métodos de transmissão, seguindo a especificação ISO2110
de ICMP
para isso Pode-se saber pelos protocolos anexados ao protocolo IP que não há necessidade de se preocupar muito com as camadas dos protocolos de rede. ICMP
obviamente precisa do protocolo IP como base, mas também é planejado como uma camada de rede. Acredito que nosso entendimento correto do modelo OSI deveria ser: É mais significativo usar o modelo OSI para analisar problemas do que usar a chamada camada de protocolos.
O conjunto de protocolos TCP/IP não se refere apenas ao TCP. e protocolos IP, mas como esses dois protocolos estão muito fora do círculo, TCP é usado /IP refere-se coletivamente à coleção de protocolos relacionados à Internet. Outra maneira de dizer isso é como um nome coletivo para a família de protocolos usada na Internet. processo de uso do protocolo TCP/IP
O fluxo de transmissão do cliente e do servidor é o seguinte.
Se as funções passarem a ser发送者
e接受者
, o fluxo de transmissão será o seguinte:
Pode-se observar que durante o processo de transmissão, a partir do terminal de envio, as informações de cabeçalho necessárias serão adicionadas sem passar por uma camada de protocolo. Camadas de verificação e camadas de codificação, então, quando chegar ao terminal de recebimento, isso acontecerá.
funciona ao contrário.Cada
camada passa pelos cabeçalhos correspondentes. Apenas espere até que os dados HTTP finais sejam obtidos.
A imagemacima
.é de "HTTP ilustrado"
muitos lugares mesclam os resultados do sistema OSI em TCP/IP Após o protocolo de cinco camadas, o nome da camada de rede se tornará a camada de Internet
Primeiro handshake: O cliente envia o sinalizador SYN (o número de sequência é J) para o servidor e entra no estado SYN_SENT (aguardando confirmação do servidor).
Segundo handshake: O servidor recebe SYN J do cliente e o servidor confirmará
).O pacote de dados foi recebido e enviado o bit do sinalizador ACK (o número de sequência é J + 1) e o bit do sinalizador SYN (o número de sequência é K) e, em seguida, entra no estado SYN_REVD (aceitação da solicitação e aguardando o estado de confirmação do cliente)
terceiro handshake: cliente entra Depois que a conexão é estabelecida, o bit do sinalizador ACK (K + 1) é enviado ao servidor para confirmar que o cliente recebeu a conexão estabelecida. Após o servidor receber o sinalizador ACK, o servidor entra no estado de conexão estabelecida
J e. K são usados para estabelecer quem é a conexão. Na solicitação, não há diferença na estrutura de SYN e ACK, mas os objetos enviados são diferentes.
net模块
é a implementação específica da conexão TCP acima.
,
ainda é recomendável ir diretamente à documentação oficial para aprender a API. O conteúdo da documentação em chinês não será a versão mais recente.
Quando estudo, tento ler documentos em inglês quando tenho tempo. Há meio ano que venho insistindo nisso, não aguentei no início, mas agora consigo conter o desconforto e ler por meio ano. O progresso ao longo do tempo é óbvio. é uma coisa boa. Isso significa que esta não é a sua zona de conforto. Afinal, a coragem de cruzar sua zona de conforto é a fonte do progresso
. objetos para simular o cliente e o servidor. Crie dois arquivos, client.js
e service.js
respectivamente. Crie através da linha de comando:
touch client.js && touch service.js
apresenta o módulo net
e deixa o. servidor entre no estado LISTENT
, configure o número da porta e o endereço HOST (ignore manualmente o processo de resolução de DNS) e aguarde a chamada do cliente
const net = require("net"); postagem constante = 3306; host const = "127.0.0.1"; servidor const = net.createServer(); server.listen(post,host);
Neste momento, o servidor corresponde ao status LISTEN
do servidor na conexão TCP.
Em seguida, ele escuta alguns eventos necessários, que são os ganchos fornecidos pelo servidor. )
server.on("ouvindo", ( ) => { console.log("O servidor pode ser conectado"); }); server.on("conexão", (soquete) => { console.log("Um cliente está visitando"); }); server.on("fechar", () => { console.log("O servidor está desligado"); }); server.on("erro", (erro) => { console.log("O servidor tem um erro: ", erro); // o erro tem informações de erro});
A sequência de códigos acima envolve
listening
: um evento acionado após escutar aconnection
da porta: um evento acionado quando um cliente visitasclose
: acionadas porerror
de desligamento do servidor: acionadas por erro do servidorEm relação ao close
, precisamos prestar atenção ao fato de que o irmão de fundo geralmente
psdiretamente
Kill -9 pid
é executado matando o thread.
No cão connection
, o parâmetro formal é o nome do soquete. Sua tradução chinesa é uma palavra aninhada, que é encapsulada em um fluxo por nó. dados enviados pelo cliente. Isso ocorre porque os próprios dados possuem seu próprio método, eu processo socket
na connection
server.on("connection", (socket) => {. console.log("Um cliente está visitando"); socket.on("dados", (dados) => { console.log(dados); //Dados enviados pelo cliente}); });
stream
será introduzido em artigos futuros.
socket.on
o servidor pode aceitar os dados enviados pelo cliente, ele pode responder naturalmente ao cliente.
("Recebi seu servidor, cliente");
Neste momento, se o cliente tiver concluído o recebimento dos dados e então fechado a conexão, também podemos monitorá-lo através socket.on('close')
:
socket.on. ("fechar", () => { console.log("O cliente desligou a outra extremidade do stream"); });
Coloque o resumo dos eventos socket
em client.js
. Neste momento, todo o conteúdo de service.js
é o seguinte:
const net = require("net"); postagem constante = 3306; host const = "127.0.0.1"; servidor const = net.createServer(); server.listen (postagem, host); server.on("ouvindo", () => { console.log("O servidor pode ser conectado"); }); server.on("conexão", (soquete) => { console.log("Um cliente está visitando"); socket.on("dados", (dados) => { console.log(data); //Os dados enviados pelo cliente socket.write("Recebi do seu servidor, cliente"); }); socket.on("fechar", () => { console.log("O cliente desligou a outra extremidade do stream"); server.close(); // O cliente não precisa mais dos dados, então vamos fechar o servidor}); }); server.on("fechar", () => { console.log("O servidor está desligado"); }); server.on("erro", (erro) => { console.log("O servidor tem um erro: ", erro); // erro tem informações de erro});3.2
client.js
parte do cliente é muito mais simples.
postagem constante = 3306; host const = "127.0.0.1"; soquete const = net.connect (postagem, host); socket.on("conectar", () => { console.log("Já conectado ao servidor"); }); socket.write("Servidor, aí vou eu"); socket.on("dados", (dados) => { console.log(data.toString()); soquete.end(); }); socket.on("fechar", () => { console.log("A conexão foi encerrada"); });
Resumo de eventos socket
connect
: Conexão bem-sucedida com o servidor acionadata
: Recebe os parâmetros enviados pelo servidorend
: Após o recebimento dos dados, ele pode acionarclose
: O fechamento do soquete acionaservice.js
e client.js
foram escritos. Execute-os após abrir dois terminais:
node service.js. node client.js
pode verificar os resultados impressos por si só.
Toda a estrutura de conexão TCP foi basicamente concluída. É claro que a produção real é muito mais do que isso. etc.
Este artigo foi reproduzido de: https://juejin.cn/post/7084618854801866765
Autor: I am Little Orange