Podemos dizer que node.js é um servidor web?

95

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

Kit Ho
fonte
5
Tornado é um servidor web + um pequeno framework web. :) Acho que o ezpresso está certo. Node.js é na verdade um ambiente de tempo de execução muito parecido com o JRE do Java. Node.js está sendo usado cada vez mais para aplicativos que não são da web. Os programas que você escreve com Node.js não têm capacidade de servidor web, a menos que você o adicione. É verdade que o Node.js tem funções nativas de alto nível que permitem criar facilmente um servidor da web com http.CreateServer (...). Listen (80); mas não existe servidor web em seu programa, a menos que você o adicione. Portanto, o próprio Node.js não é um servidor da web. Em vez disso, você usa Node.js para criar um.
OCDev
1
Estritamente falando, você não precisa colocar um servidor da web no topo do Node.js - você pode escrever um pequeno servidor dentro do seu projeto Node e fazer com que ele lide com todas as solicitações de rotina do navegador, bem como aquelas específicas do aplicativo da web em questão. Mas coisas como mudanças de página da web são gerenciadas melhor por um servidor da web, por exemplo, Nginx. Portanto, embora você não precise envolver um servidor da Web com o Node, geralmente é mais inteligente fazê-lo.
Tronco de
C ++ é um servidor web? Não, é uma linguagem de programação que você pode usar para escrever um. Mesmo com node.js.
alfadog67

Respostas:

54

servidor web

O servidor da Web pode se referir ao hardware (o computador) ou ao software (o aplicativo do computador) que ajuda a fornecer conteúdo que pode ser acessado pela Internet. 1

A principal função de um servidor da web é entregar páginas da web na solicitação aos clientes. Isso significa entrega de documentos HTML e qualquer conteúdo adicional que possa ser incluído em um documento, como imagens, folhas de estilo e scripts.

Um servidor web é o básico para a entrega de solicitações / pagess aos clientes / usuários na internet

Framework da web

Uma estrutura de aplicativo da web é uma estrutura de software projetada para suportar o desenvolvimento de sites dinâmicos, aplicativos da web e serviços da web. O framework visa aliviar a sobrecarga associada às atividades comuns realizadas no desenvolvimento da web. Por exemplo, muitas estruturas fornecem bibliotecas para acesso ao banco de dados, estruturas de modelagem e gerenciamento de sessão, e muitas vezes promovem a reutilização de código.

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

Node.js é uma plataforma construída no tempo de execução JavaScript do Chrome para construir facilmente aplicativos de rede rápidos e escaláveis. O Node.js usa um modelo de E / S não bloqueante e orientado por eventos que o torna leve e eficiente, perfeito para aplicativos em tempo real com muitos dados que são executados em dispositivos distribuídos.

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.

Alfred
fonte
6
Node.js é um tempo de execução de JavaScript criado no mecanismo JavaScript V8 do Google ...
ozanmuyes
1
Como os servidores web (apache ou nginx) podem ser hardware?
shadow0359
Acho que a principal questão é se o Node.js escuta a porta HTTP por padrão. Nesse caso, ele também o classifica como um servidor HTTP.
Forsberg
1
Podemos dizer que o quadrado é um retângulo, mas não o contrário. você está dizendo que o Nodejs é mais do que apenas um servidor web? ou não representa um servidor web?
CME64
1
@ shadow0359 Um pouco tarde, mas para qualquer pessoa que leia isso, o servidor web não é apenas o software. Também pode significar o hardware físico, o computador onde o software está sendo executado
Christoffer
25

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" :

Node.js é parte do ambiente de tempo de execução e parte da biblioteca para construir aplicativos de rede usando JavaScript do lado do servidor. Ele usa o mecanismo de tempo de execução JavaScript do Chrome para executar o código JS diretamente, sem a necessidade da sandbox do navegador.

Além disso, a Enciclopédia PCMAG.COM fornece a seguinte definição de "mecanismo de tempo de execução":

Software do qual certos aplicativos dependem para serem executados no computador. O mecanismo de tempo de execução deve estar em execução no computador para que o aplicativo seja executado. Ele fornece rotinas e funções comuns que os aplicativos requerem e normalmente converte o programa, que está em uma linguagem intermediária e provisória, em linguagem de máquina.

Além disso, o artigo da Wikipedia intitulado "Sistema de tempo de execução" declara:

Um sistema de tempo de execução (também chamado de sistema de tempo de execução, ambiente de tempo de execução ou apenas tempo de execução) implementa o comportamento básico de uma linguagem de computador, seja a linguagem compilada, interpretada, incorporada de domínio específico ou invocada por meio de uma API assim como pthreads.

... Um sistema de tempo de execução pode implementar o comportamento de tarefas como desenhar texto na tela ou fazer uma conexão com a Internet. Ele também atua normalmente como uma camada de abstração que oculta a complexidade ou as variações nos serviços oferecidos pelo sistema operacional.

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.

ezpresso
fonte
Você ignora o propósito de ter aquele runtime em primeiro lugar - bem como a inutilidade de tê-lo sem todos os módulos [ nodejs.org/docs/latest-v9.x/api/] essenciais para torná-lo fazer algo realmente útil.
Tronco de
19

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

  1. [Ambiente de tempo de execução Javascript (mecanismo Chrome v8) + Node Library / APIs]
  2. Pode criar um servidor web, também pode ser descrito como um servidor de aplicativos

Expressar

  1. Estrutura da Web (usa o servidor da web do nodejs para servir arquivos)

Nginx

  1. servidor web

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.

Esakki Krishnan
fonte
1
mais um para mencionar que o NodeJS pode ser usado tanto para um servidor web quanto para um servidor de aplicativos, e para mencionar o Express.
Yahya
16

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.

cmv
fonte
1
Sim. Uma estrutura da web ajuda você a escrever um aplicativo da web, que usa HTML e JavaScript para a IU e se comunica por HTTP. Exemplos de uma estrutura da web seriam Express para node.js ou Django para Python.
cmv
A melhor resposta de todas as tentativas. +1.
Tronco de
Acho que colar o ngnix não seria uma solução adequada, podemos usar o proxy hs para a solução de balanceamento de carga
Kartikeya Sharma
@cmv desculpe, estou atrasado para a convenção !!! Você precisa colocar o nginx na frente do nó, mas um balanceador de carga nele? Posso apenas colocar o balanceador de carga na frente da instância EC2 e terminar com ele para permitir que ele seja encaminhado diretamente para o nó e expresse os pontos de extremidade?
lopezdp
5

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.

Tronco
fonte
2

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 !!

Codificador louco.
fonte
2
Mas o Node não inclui módulos (por exemplo, http) projetados para permitir que alguém codifique rapidamente seu próprio servidor?
Tronco de
1

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.

cslotty
fonte
0

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.

Rick Henderson
fonte
-1

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.

estagnado
fonte
1
Acho que essa resposta - embora tecnicamente verdadeira - é muito breve e não informativa para um novato.
Tronco de