Node.js
Как установить общение PHP и Node.js: HTTP API, очередь или отдельный процесс
Короткий ответ: PHP и Node.js обычно связывают через HTTP API. Один сервис поднимает endpoint, второй отправляет запрос и получает ответ. Если задача сложнее, используют очередь сообщений, общую базу или отдельный процесс, но начинать лучше с простого HTTP-взаимодействия
Запрос «как установить общение php и node js» часто появляется, когда у человека уже есть сайт на PHP, но хочется добавить Node.js для чата, real-time событий, парсинга, очередей, WebSocket или отдельной backend-задачи. Важно не пытаться “встроить Node.js внутрь PHP” — чаще это два отдельных процесса, которые разговаривают друг с другом
Самый простой вариант: Node.js как API
Node.js-сервис
const express = require("express");
const app = express();
app.use(express.json());
app.post("/api/calculate", (request, response) => {
const first = Number(request.body.first);
const second = Number(request.body.second);
response.json({
sum: first + second
});
});
app.listen(3000, () => {
console.log("Node.js API запущен: http://localhost:3000");
});
PHP может отправить запрос к этому API
<?php
$data = [
"first" => 10,
"second" => 15
];
$options = [
"http" => [
"header" => "Content-Type: application/json",
"method" => "POST",
"content" => json_encode($data)
]
];
$context = stream_context_create($options);
$result = file_get_contents("http://localhost:3000/api/calculate", false, $context);
echo $result;
Ожидаемый ответ
{"sum":25}
Когда Node.js должен обращаться к PHP
Можно сделать наоборот: PHP отдает API, а Node.js отправляет запрос через fetch
const response = await fetch("https://example.com/api/user.php");
const data = await response.json();
console.log(data);
Суть та же: один процесс публикует endpoint, другой обращается к нему по HTTP
Когда использовать общую базу
Иногда PHP и Node.js не должны напрямую дергать друг друга. Например, PHP записывает заказ в базу, а Node.js читает новые задачи и отправляет уведомления. Это работает, но требует аккуратности: блокировки, статусы, повторные попытки, ошибки
Для первого проекта HTTP API понятнее. Общая база подходит, когда у вас уже есть понятная схема данных и задача действительно асинхронная
Когда нужна очередь
Очередь полезна, если задача долгая: отправка писем, парсинг, генерация файлов, обработка видео. PHP кладет задачу в очередь, Node.js забирает и выполняет. Это надежнее, чем держать HTTP-запрос открытым слишком долго
Но очередь — следующий уровень. Если вам нужно просто передать параметры и получить ответ, начните с HTTP API
Как не смешать процессы
PHP обычно запускается через веб-сервер, например Apache или Nginx + PHP-FPM. Node.js запускается как отдельный процесс: node server.js, PM2, Docker, systemd или платформа хостинга
Не нужно ожидать, что PHP сам “поднимет Node.js” при каждом запросе. Это будет медленно и нестабильно. Node.js-сервис должен быть уже запущен
Мини-практика
Создайте Node.js API /api/calculate, запустите его на localhost:3000, затем напишите PHP-скрипт, который отправляет два числа и получает сумму. После этого поменяйте числа и проверьте, что ответ меняется
Если эта схема понятна, можно переходить к реальному сценарию: PHP-сайт отправляет событие, Node.js обрабатывает его и возвращает результат
Частые ошибки
Node.js не запущен PHP отправляет запрос, но сервис на localhost:3000 не отвечает. Сначала запустите Node.js-процесс
Неправильный Content-Type Если Node.js ждет JSON, PHP должен отправить Content-Type: application/json и JSON-тело
localhost на разных серверах Если PHP и Node.js на разных машинах, localhost у каждого свой. Используйте реальный адрес Node.js-сервиса
Слишком долгая задача через HTTP Для долгих задач лучше очередь, иначе PHP-запрос может ждать слишком долго и оборваться
Что почитать дальше по Node.js
Если нужен общий маршрут по теме, откройте рубрику Node.js. Для соседних задач пригодятся эти разборы:
- Node.js + MySQL: REST API для первых данных
- Как запустить backend на Node.js на хостинге: порт, env и процесс
- Как запустить сервер Node.js: простой HTTP-сервер и Express
- Как создать простейший HTTP-сайт на Node.js и Express