Que é o nó correcto.arquitectura js?

Estou um pouco confuso sobre a arquitectura do nó.js

Is this real one ?

enter image description here

O primeiro está correcto ou o segundo? Porque no segundo diagrama cada chamada passa pela V8 primeiro e depois pelo nó.ligações js, mas na primeira é vice-versa. Pode ajudar a compreender? Obrigado antecipadamente.

Author: Sagar, 2016-04-21

1 answers

Primeiro, ambos os gráficos estão correctos, embora o primeiro esteja um pouco desactualizado. A parte ascíncrona do nó.js costumava consistir de libev, libeio e libuv. No entanto, como libuv avançou ao longo dos últimos anos, "[in] the node-v0.9.0 version of libuv libev was removed", leaving libuv to take care of Node.processos I/O assíncronos inteiros da js (por conseguinte, incluindo, naturalmente, o ciclo de eventos). Então a versão moderna do nó.a arquitectura js substituiria o "libeio" e "libev" com "libuv" (como está na segunda imagem).

A razão pela qual os dois gráficos diferem na estrutura é que eles são organizados em relação a perspectivas diferentes. O gráfico 1 representa a classificação de diferentes partes do nó.a tecnologia js de alto nível para baixo nível( assim não implica um fluxo de trabalho); enquanto o gráfico 2 é o fluxo de trabalho real de um nó.operação js.

Para colocar isso em uma analogia: digamos que você tenta representar diferentes peças de um carro usando gráficos. Você pode fazer isso de muitas maneiras: você pode organizar as diferentes peças por suas classificações / funcionalidades( cenário a), assim:

  • Sistema de potência: motor, óleo, Arrefecimento, escape, etc.
  • Sistema de transmissão: caixa de velocidades, Eixo, conjunto de embraiagem, diferencial, etc.
  • Sistema de suspensão: braço de comando, amortecedor, componentes de direcção, etc.
  • ......

Ou também podes organizar as peças pelo fluxo de trabalho (cenário b):

  • óleo -- > motor -- > transmissão -- > diferencial -- > suspensão -- > etc.
Não sei muito sobre carros. O nome das peças e o fluxo de trabalho real pode estar errado. Só está listado para ajudar na compreensão.) Agora porque os meios pelos quais você organiza as peças são diferentes, a ordem que elas aparecem também será diferente. O cenário A é semelhante ao seu gráfico 1 e o cenário B é semelhante ao gráfico 2.
Não tenho a certeza do quanto entendes o nó do caminho.js funciona então eu vou fornecer uma breve visão geral das diferentes peças que se encaixam no nó.js arquitetura antes de seguir em frente para explicar a forma como eles interagem uns com os outros:
  • V8 - O motor JavaScript de código aberto do Google que reside nos navegadores Chrome/Chromium. Em vez de interpretar o código JavaScript na mosca como os navegadores web típicos fazem, V8 traduz o seu código JS em código de máquina de modo que está a arder rapidamente. V8 é escrito em C++. Leia mais sobre como o V8 funciona aqui.

  • Libuv - libuv é originalmente desenvolvido para fornecer I/o assíncrono que inclui sockets TCP & UDP assíncronos, (famoso) circuito de eventos, resolução DNS assíncronos, leitura/escrita do sistema de arquivos, e etc. libuv é escrito em C. Aqui está um bom vídeo para verificar para saber mais sobre libuv.

  • Outros componentes de Baixo Nível - tais como: C-ares, analisador de http, OpenSSL, zlib , e etc, escrito principalmente em C/C++.

  • Aplicação - Aqui está o seu código, módulos e nó.js ' built in modules , written in JavaScript (or compiled to JS through TypeScript, CoffeeScript, etc.)

  • Binding - uma binding é basicamente um invólucro em torno de uma biblioteca escrita numa língua e expõe a biblioteca a códigos escritos noutra língua, de modo que códigos escritos em diferentes línguas podem se comunicar.

Agora o primeiro grafo deve fazer sentido: no topo está a sua aplicação (, módulos e nó central.js built-in modules) escrito em JavaScript; no fundo são Nodo.componentes internos js escritos em C/C++. Para ligá-los para que eles possam se comunicar, você precisa de ligações. Então é aí que o nodo.ligações js sit: entre aplicações de alto nível e componentes de nó de baixo nível. Estes gráficos não representam necessariamente fluxo de trabalho; é apenas uma classificação de nó diferente.js peças de acordo com suas relações/funcionalidades entre si.

O segundo grafo representa o fluxo de trabalho real de um nó.aplicação js. O código escrito em sua aplicação é compilado por V8. O código comunica com um nó de baixo nível.componentes js via ligações. Todos os eventos escritos em seu código são registrados com Nodo.js. Uma vez que os eventos são despoletados, eles são colocados na fila de eventos de acordo com a ordem que eles são accionados. Enquanto ainda houver eventos remanescentes na fila de eventos, o loop de eventos continua pegando-os, chamando suas funções de callback, e enviá-los para threads de trabalhadores para processamento. Uma vez que uma função de callback é executada, sua callback é mais uma vez enviado para a fila de eventos, esperando para ser pego pelo loop de Evento novamente.

Parte da tua confusão pode vir da escolha dos termos técnicos usados no segundo gráfico. Se você olhar de perto, abaixo do "nó".JS BINDINGS " says "(NODE API)", que, infelizmente, são duas coisas diferentes. nó.js API é a interface de suas bibliotecas incorporadas, enquanto ligações, na perspectiva da programação de software, são pontes entre códigos escritos em diferentes linguagens.

Espero que isto ajude.

Uma representação mais precisa do nó.a estrutura interna da js é esta:: Node.js Architecture (descarreguei esta foto de uma fonte na Internet há uns tempos e esqueci-me. de onde é. Se a imagem pertence a você, por favor comente e eu vou adicionar crédito abaixo! Obrigado!)


Editar: Eu escrevi recentemente um artigo mais abrangente no explaining Node.a arquitetura de js com uma analogia fácil de entender. Quem me dera que pudesse ajudar!

 53
Author: Aren Li, 2016-06-05 01:33:40