Просветленный
(26672)
8 лет назад
> Как можно с веб-страницы вызвать серверную функцию Node.js
Либо AJAX-запросом (протокол HTTP),
либо через WebSocket (протокол TCP): отправить серваку пакет, а он будет его асинхронно ждать, и когда сервак получит пакет, то у него выполнится обработчик события. После чего сервак может тоже послать нам пакет и мы так же его получим с помощью события.
TCP удобен для чатов: вместо того, чтобы все время делать запросы и следить, нету ли новых сообщений, мы просто открываем соединение и создаем обработчик события. Так же и со стороны сервака.
Обычный бек-енд для аякса, то есть REST API, без проблем реализуется и на PHP, и на Ruby, и на чем угодно еще.
А вот WebSocket - это уникальная фича NodeJS, хотя теоретически тоже возможно почти на чем угодно, но именно в NodeJS самые удобные средства для этого.
Ирэн Ницше
Искусственный Интеллект
(213135)
8 лет назад
Да как и везде в вебе. Сайт-то по-любому в браузере, и по-любому на HTML, CSS, JavaScript. Поэтому он ВСЕГДА отправляет на сервер запросы GET и POST, а серверные скрипты их выполняют, на чем бы они ни были написаны. А результат выводят или через аякс, или в них есть что-то для вывода вроде echo в php.
Просветленный (26672)
8 лет назад
> Поэтому он ВСЕГДА отправляет на сервер запросы GET и POST
НЕТ. Клиентский JS умеет еще и чистый протокол TCP (Raw Sockets).
Как выглядит HTTP-запрос?
1) Открывает соединение
2) Шлем серваку TCP-пакет, т. е. запрос (заголовки + тело)
3) Сервак тоже шлет нам TCP-пакет, т. е. ответ (заголовки + тело)
4) Закрываем соединение
А TCP в чистом виде позволяет постоянно держать соединение открытым, чтобы мы асинхронно ждали, пока сервак пришлет нам пакет (тогда у нас сработает событие), и сервак тоже ждал наших пакетов.
Применяется, например, в чатах: чтобы проверить нет ли новых сообщений, мы не шлем по запросу каждую секунду, а просто создаем обработчик события - и открываем соединение.
NodeJS наиболее удобен для реализации таких серваков - и для изучения протокола TCP в плане сниффинга))
p.s. Моё обучение чему то всегда носит практический характер)) Прошу не злиться, если кому то этот вопрос может показаться глупым.