Descobri que estou confuso entre a estrutura da web e o servidor da web.
Apache is a web server.
Tornado is a web server written in Python.
Nginx is a web server written in C
Zend is a web framework in php
Flask/Bottle is a web framework in Python
RoR is a web framework written in Ruby
Express is a web framework written in JS under Node.JS
Podemos dizer que node.js é um servidor web ??? Estou tão confuso entre servidor / estrutura da web.
Se de alguma forma o node.js é uma espécie de servidor web, não webframework (o Express faz), por que precisamos colocar todo o node.js em cima do servidor Nginx em uma prática útil? Pergunta sobre SO
Quem pode ajudar???
Kit
node.js
webserver
web-frameworks
Kit Ho
fonte
fonte
Respostas:
servidor web
Um servidor web é o básico para a entrega de solicitações / pagess aos clientes / usuários na internet
Framework da web
Uma estrutura da web usa um servidor da web para entregar as solicitações ao cliente, mas não é o servidor da web.
Node.js
Mas, novamente, você também pode criar aplicativos CLI, então acho que você deve vê-lo mais como uma plataforma para escrever programas javascript para rodar em seu servidor (computador) usando a linguagem de programação Javascript em vez de apenas no navegador como no início. Eu acho que você poderia ver isso como ??
Javascript++
Você também pode escrever um servidor web com node.js, como você pode ver na página inicial do node.js. No início, Ryan disse que você poderia colocar o Nginx na frente do node.js por causa da estabilidade do projeto. O projeto era e ainda é muito jovem. Nginx é um servidor da web comprovado que continuará em execução enquanto o node.js pode travar. Então, novamente, muitos usuários usam node.js para isso.
fonte
Eu diria que Node.js é um Runtime Environment ou um Runtime Engine.
Provavelmente, a melhor definição que encontrei até agora vem de um artigo de Rob Gravelle intitulado "An Intro to Node.js" :
Além disso, a Enciclopédia PCMAG.COM fornece a seguinte definição de "mecanismo de tempo de execução":
Além disso, o artigo da Wikipedia intitulado "Sistema de tempo de execução" declara:
Bem, existe algum ambiente de execução (ou mesmo plataformas de software) como Node.js por aí? Acho que o JRE é um bom exemplo de tal ambiente. Node.js e JRE - eles têm muitos em comum. Todos eles têm (uma espécie de) máquina virtual, uma biblioteca de classes e uma estrutura para implementar vários tipos de aplicativos, incluindo os CLI.
Então, voltando à sua pergunta, podemos dizer que o Node.js é um servidor web? Vamos trocar "Node.js" por "JRE" e responder se JRE é um servidor web. A resposta é não.
Tudo o que podemos dizer é que Node.js é um ambiente de execução que pode ser usado para implementar um servidor web. Bem, essa é minha opinião.
fonte
Dizer que o node é um servidor web é como dizer que o javacript só pode ser executado dentro de um navegador, você pode dizer isso, mas também pode fazer muitas outras coisas.
NodeJS
Expressar
Nginx
Na produção, a maioria das pessoas usa o Nginx na frente do servidor de nó como um servidor proxy para servir arquivos estáticos e outros vários elementos como cache, roteamento, etc.
fonte
Eu classificaria node.js como uma estrutura de servidor, com pacotes disponíveis que podem fazer uso dele como um servidor HTTP, ou um servidor WebSocket, ou seu próprio protocolo personalizado, etc.
O motivo pelo qual você pode colocar o nginx na frente de seu servidor node.js é para balanceamento de carga HTTP e proxy reverso em várias máquinas que executam seu aplicativo de servidor.
fonte
Como sinto sua dor!
Como muitos, achei difícil chegar à essência do Node.js porque a maioria das pessoas apenas escreve / fala sobre a parte do Node que consideram útil - e a parte que consideram interessante é geralmente um benefício secundário do Node, em vez de seu principal objetivo. Devo dizer que acho loucura as pessoas dizerem que o Node é apenas um runtime de JavaScript. O uso de JavaScript pelo Node - e sua seleção do tempo de execução V8 - são simplesmente meios para um fim , as melhores ferramentas para o problema que os desenvolvedores do Node queriam resolver.
O objetivo principal do Node era tornar o gerenciamento de eventos do usuário em um aplicativo da web mais eficiente. Então Node é esmagadoramenteusado no back-end de um aplicativo da web. O gerenciamento de eventos exige que algo esteja escutando na máquina do servidor para esses eventos do usuário. Portanto, um servidor http deve ser configurado para rotear cada evento para seu script de tratamento apropriado. O Node fornece uma estrutura para configurar rapidamente um servidor para ouvir em uma porta dedicada as solicitações do usuário. O Node usa JavaScript para manipulação de eventos porque JavaScript tem funções de retorno de chamada: isso permite que uma tarefa seja suspensa até que o resultado de uma tarefa dependente seja retornado. Poucas outras linguagens têm esse recurso e aquelas que têm podem não ter um intérprete tão eficiente quanto o tempo de execução V8 do Google. A maioria dos desenvolvedores da web conhece JavaScript, portanto, não há aprendizagem adicional de linguagem com o Node. Além do mais, ter funções de retorno de chamada permite colocar todas as tarefas do usuário em um único threadsem ter bloqueio explícito aplicado a tarefas que exigem acesso ao banco de dados ou sistema de arquivos. E é isso que leva à eficiência de execução superior do Node sob uso intenso e simultâneo - o objetivo principal de seu desenvolvimento.
Para ajudar os usuários do Node a escrever código back-end rapidamente, os desenvolvedores do Node também organizaram uma biblioteca JS integrada para tarefas de rotina (por exemplo, questões relacionadas a solicitações HTTP, string (des) codificação, fluxos, etc.) e o repositório NPM (Node Package Manager) : este é um conjunto de pacotes de script de código aberto mantido pelo usuário para várias funções padrão e personalizadas. Todos os projetos Node permitem a importação de pacotes NPM para um projeto por meio do comando npm install estabelecido .
As solicitações do usuário tratadas via Node serão coisas necessárias para o aplicativo web, como autenticação, consulta de banco de dados, gerenciamento de conteúdo (Strapi CMS), etc. Tudo isso será enviado para a porta do Node. (Onde a análise de dados obtidos de um banco de dados consome muito tempo de CPU, este tipo de processo é melhor colocado em um thread separado para não retardar as solicitações mais simples do usuário.) Outros tipos de solicitação do usuário, por exemplo, para carregar outra página da web , baixar arquivos CSS / JS / imagem, etc, continuará a ser enviado pelo navegador para a (s) porta (s) padrão na máquina do servidor onde o programa do servidor da web (Apache, NGinx, etc) os tratará.
Portanto, na prática , o Node é principalmente uma estrutura para criação rápida de servidor e tratamento de eventos, mas que substitui apenas algumas das funções do programa de servidor da web.
Outros usos não backend do Node simplesmente exploram um ou outro de seus recursos, por exemplo, o motor V8. Por exemplo, as ferramentas de construção de front-end Grunt e Gulp usam Node.js para processar um script de construção que pode ser codificado para converter SASS em CSS, reduzir arquivos CSS / JS, otimizar tamanho / carregamento de imagem etc. Mas esse tipo de trabalho é realmente apenas o uso de subproduto do Node, não seu uso principal, que é para fazer processos de back-end eficientes para aplicativos da web.
fonte
Servidor Web é algo que atende seus clientes por meio de protocolos da Internet e Web Framework é algo que chamamos de compilador. Ele consiste em todas as bibliotecas necessárias, regras de sintaxe, etc.
E node.js é um framework !!
fonte
Acho que o problema é que a terminologia de "servidor web" ou "servidor de aplicativos web" é dominada pelo mundo JEE, e produtos, que não são tão modularizados como o mundo Javascript de hoje de frameworks, que por sua vez podem ser combinados mais ou menos livremente.
Não vejo razão para que uma tecnologia, que pode servir a aplicativos complexos na web, não deva ser chamada de servidor da web ou servidor de aplicativos da web!
Se você combinar, digamos Nuxt como um front-end, com Feathers como um back-end - você terá um back-end servindo uma API REST e uma IU renderizada do lado do servidor!
Claro, você poderia (mal) usar isso para servir conteúdo estático - então eu o chamaria de servidor da web, ou você poderia usá-lo para fazer e servir um aplicativo completo - então eu o chamaria de servidor de aplicativos da web.
São as características ou qualidades combinadas que se somam para servir a um propósito - certo? - Recursos como estabilidade, escalabilidade e outros são IMHO algo que será adicionado a essas tecnologias, com o tempo. Por enquanto, eles ainda são muito novos.
fonte
Acabei de usar o Node.js pela primeira vez para criar um bot Discord. Meu pensamento foi "Uau, Node.js é um servidor? Achei que fosse uma biblioteca JS!" Ou talvez eu pudesse ter pensado nisso como uma estrutura.
É um servidor web? Não, mas você pode fazer um com isso. É um servidor? Como no software que recebe consultas e veicula o resultado? Sim.
No meu caso, dei o comando:
node index.js
E agora o Node.js está esperando por solicitações para responder (por meio do meu bot). É um servidor, mas não está servindo páginas da web.
fonte
Não, é um ambiente de execução ... portanto, não é um servidor da web, mas não precisa de um para ser executado. Então, provavelmente é por isso que pode ser confuso. Ele pode ser executado de forma autônoma sem a necessidade de qualquer servidor da web porque é um tempo de execução em si, mas, novamente, não é um servidor da web.
fonte