2015-11-26 2 views
1

У меня есть сервер узла, который должен:Есть ли способ запустить задачу узла в дочернем процессе?

  1. Подавать веб-страниц
  2. Keep-опрос внешнего REST API и сохранять данные в базу данных и передачу данных клиентов для некоторых обновлений из REST API.

Задача 1 - это просто нормальные задачи узла. Но я не знаю, как реализовать задачу 2. Эта задача не будет выставлять какой-либо интерфейс снаружи. Это скорее фоновая задача.

Может ли кто-нибудь предложить? Благодарю.

ответ

1

Чтобы сделать второе приложение Node.js, который работает одновременно как ваш первый, вы можете просто создать другое приложение node.js, а затем запустить его с первого, используя child_process.spawn(). Он может регулярно запрашивать внешний REST API и обновлять базу данных по мере необходимости.

Часть о «Передача данных клиентов для некоторых обновлений из REST API» не так ясно, что вы пытаетесь сделать.

Если вы используете socket.io для отправки данных в подключенные браузеры, то браузеры должны быть подключены к вашему веб-серверу, который, как я полагаю, является вашим первым процессом node.js. Чтобы второй процесс node.js вызывал передачу данных через соединения socket.io в первом процессе node.js, вам нужен способ межпроцессного взаимодействия. Вы можете использовать stdout и stdin через child_process.spawn(), вы можете использовать некоторую функцию в своей базе данных или любой другой метод IPC.

Поскольку запрос API REST и обновление базы данных являются асинхронными операциями, они не занимают много центрального процессора процесса node.js. Таким образом, вам не нужно делать это в другом процессе node.js. У вас может быть только setInterval() в вашем основном процессе node.js, каждый раз запрашивать API, обновлять базу данных при получении результатов, а затем вы можете напрямую обращаться к соединениям socket.io для отправки данных клиентам без использования отдельный процесс и какой-то механизм МПК.

+0

Я собираюсь использовать socket.io для отправки данных клиенту (веб-странице). –

+0

@bagusflyer - я добавил некоторую информацию в свой ответ, если вы используете socket.io для отправки данных в подключенные браузеры. – jfriend00

+0

Спасибо @ jfriend00, хорошее предложение. –

1

Задача 1: Экспресс - это хороший способ выполнить эту задачу. Вы можете изучить: http://expressjs.com/

Задача 2:

Если вы сделали с Expressjs. Затем вы можете написать свою логику в Express Framework. Эта задача может быть выполнена с помощью модуля узла forever. Его простой инструмент, который запускает ваши фоновые скрипты навсегда. Вы можете использовать навсегда для запуска сценариев непрерывно (независимо от того, что написано в node.js или нет)

Посмотрите:
https://github.com/foreverjs/forever

+0

Возможно ли запустить эту задачу внутри одного и того же узла? –

+0

Я не понимаю, как навсегда ответ на этот вопрос. навсегда - это инструмент, который поддерживает процесс и автоматически перезапускает его, если он сработает. Это не инструмент для выполнения того, о чем спрашивает OP. – jfriend00

+0

@bagusflyer, если вы делаете это в одном и том же приложении. Вам нужно будет установить ** задание ** cron job для этого на вашем сервере согласно вашему требованию. – Junaid

Смежные вопросы