Как работает на низком уровне Node.js и Angular?

Всем привет.
Я учился программить под веб в середине нулевых, и жестко привык к тому, что существуют всегда отдельные сущности:
1) Веб-сервер (Apache, nginx)
2) Какой-то язык обработчик на сервере (php, python)
3) Стек для верстки и динамики на стороне клиента (js, css, html)
4) Сервер базы данных

Веб сервер принимает запросы, серверный язык работает с данными и формирует html, а js и css на стороне клиента делают дизайн и какую-то динамику, ну в крайнем случае подтягиваются новые или обновленные данные через ajax.

Но вот к сожалению я плохо понимаю, как работаю современные технологии, взять тот же node.js, там уже встроен веб-сервер? Соединение с клиентом держится постоянно?
А что с Angular? Это не просто какая-то подключаемая на стороне клиента библиотека вроде jquery?
Меня интересует какая-то низкоуровневая реализация всего этого.
  • Вопрос задан
  • 4185 просмотров
Решения вопроса 2
@cluberr
думаю это Вам поможет Объясняем современный JavaScript динозавру
Как объяснить 10 лет веб-разработки путешественник...
NodeJs - это движок для JavaScript , который вынесли из браузера и добавили возможности , которые в браузерном JS были невозможны из-за безопасности , например работа с файловой системой и другие. Сам движок NODEJS называется V8 , написан на C++ и компилит JS в машинный код.

Вебсервер - это процесс который слушает определенный порт на HTTP запросы , принимает их , парсит и отдает назад ответ в зависимости от запроса. Раньше в этот ответ помещался готовый html код c данными , которые подтягивались из базы, что и было страницей.

Так как появилась возможность делать JS код вне браузера , то взяли и написали на нем веб-сервер , который все делает на JS . Что дало возможность написать и фронт и бэк сайта на одном языке

Сейчас же при запросе к серверу , сервер отдает сразу HTML код страницы с JS кодом и из этого js кода посылаются асинхронные запросы к бекенду (AJAX) на определенные url адреса сервера RESTip , которые отдают не готовые страницы , а только данные в чистом виде в формате JSON и JS парсит эти данные и вставляет в стандартные html узлы или же кастомные , которые зовутся WebComponets, но пока имеют слабую поддержку браузеров , страницы. Angular упрощает написание кастомных html узлов и внедрение в них данных плюс позволяет их реиспользовать.

Получается что у Вас может один раз прийти html + js код и потом вся работа с сайтом будет идти через одну страницу в которую javascript будет вставлять нужные данные, а при необходимости еще и обрабатывать их перед вставкой. Сайты , которые так работают называются SPA (Single Page Aplication).
Ответ написан
Комментировать
@xfg
У вас на сервере должен быть запущен постоянно работающий процесс, чтобы обрабатывать входящие запросы от клиентов. На PHP как правило пишут скрипты, которые не висят постоянно в памяти, а выполняются и умирают раз за разом. В таких условиях нужен посредник в виде постоянно работающего процесса. Поэтому вы используете apache, nginx, etc или пользуетесь встроенным php -S localhost:8080 mysite/index.php

В node.js можно несколько иначе. Скрипты висят в памяти. Чтобы с ними как-то взаимодействовать по сети, вы должны позаботиться об этом самостоятельно и реализовать некий протокол взаимодействия с вашей программой поверх tcp. Это может быть популярный и всем известный http протокол или что-то менее известное или даже придуманное вами.

Поскольку http протокол довольно популярен, то в node.js предоставили готовую реализацию в виде http модуля, который позволяет написать http сервер в несколько строк.

Строго говоря, вы это всё можете делать на любом языке, который умеет работать с сетью и PHP здесь не является исключением. Например вот одна из реализаций http сервера на PHP https://github.com/reactphp/http
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AlexMaxTM
@AlexMaxTM
Angular это просто фреймворк JS, но отличающийся от JQuery тем, что использует не императивный подход, а декларированый.
Node.js - это среда для работы JS, написанная на Си, и позволяющая в конечном итоге переводить JS-код в машинный код. Node.js не держит соединения постоянно с клиентом, (для постоянного соединения нужно использовать сокеты), но он предоставляет API для взаимодействия с устройствами ввода-вывода сервера.
Плюс в том, что вся тормоза интерпретируемых языков перемещается с сервера к клиенту, за счет чего, как правило, достигается прирост скорости. В Node.js много плюсов, но и появляются и минусы, главный образом связанных с тем, что поскольку всё это переместилось на фронтенд, то теперь программировать сайты стали те, кто раньше занимался версткой, со всеми вытекающими последствиями.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы