Здравствуйте
Хотел бы попросить у вас помощи.
Имеется сайт и node.js, которые стоят на vps
Как можно связать сайт с node.js
Допустим. Сайт записывает данные в mysql и отправляет их (Например: id, name)
Node.js принимает их, проводит манипуляции и после успешного завершения процесса отправляет запрос на сайт (id, name, true) к примеру тем же get запросом и соотвественно эти данные далее записываются в бд
И такие манипуляции проводятся не один раз, а с интервалом от 1 минуты до нескольких дней, т.е. неизвестно когда придется это все повторять
Организуйте шину данных на каком RabbitMQ/ZeroMQ. И все. PHP паблишит в очередь сообщение - нода обрабатывает - паблишит в другую очередь другое сообщение - PHP принимает.
Взаимодействие можно осуществить используя как обычные GET/POST-запросы, так и используя разделяемые ресурсы вроде общей БД или Redis. C Redis все будет проще, т.к. нода умеет работать с событийной моделью.
Philipp T: Спасибо. Разбираюсь с redis, добавляю с сайта значения с хэшем:
send.member.$id, hash1, $value1
send.member.$id, hash2, $value2
send.member.$id, hash3, $value3
Все добавляется, но не могу понять как принять значение на node, то есть нужно присвоить эти значения, для последующий манипуляций, пример:
var $val1 = $value1,
$val2 = $value2,
$val3 = $value3;
И сделать это так, чтобы сервер работал в фоне, не отключался при отправке 1 запроса, а работал дальше с другими запросами от пользователей
Подскажите пожалуйста как это реализовать
Сложилось впечатление, что вы немного не поняли.
У вас есть канал. Ваш php-код публикует событие, в канал the_channel.
Node-server непрерывно слушает канал the_channel для ловли событий.
Могу вам подсказать, что можно в качестве сообщения передавать не просто текст, а JSON-структуру. Ее легко превратить в строку на PHP. Грубо говоря, вы создаете массив, потом сериализуете его через json_encode и публикуете в канал. После этого нода принимает это сообщение и десериализует его через JSON.parse. Если вам нужно организовать потоковую обработку, то вы просто создаете серию каналов. Т.е. запрос поступает в первый канал, потом результаты передаются во второй и т.д. С таким подходом можно реализовать потоковую обработку данных с разнесением функционала и т.п.
Например, если у вас видео-хостинг, то в первый канал поступает информация, что видеофайл загружен. После этого запускается первый обработчик, он достает мета-данные и передает генератору превьюшки. Генератор превьюшек находится на том же сервере, что и загружаемый файл. Кроме превьюшки можно запостить сообщение в канал, который запустит обработчик копирующий файл на ферму, занимающуюся перекодированием файлов. При этом это может быть совершенно другое приложение, запущенное на другом сервере, но использующее Redis в качестве транспорта управляющих команд (шина управления). Есть более совершенные модели, вроде RabbitMQ, ZMQ, Celery - их много на самом деле.