Разветвите процесс и отправьте в него данные внутри Rails - PullRequest
0 голосов
/ 31 марта 2010

Я делаю приложение на Rails. В одном действии мне нужно создать длительный процесс. Это не является проблемой. Я могу раскошелиться на новый процесс, используя spawn gem или какой-то другой. Но через некоторое время после того, как процесс был создан, пользователь должен иметь возможность передавать дополнительные данные этому процессу.

Конечно, я могу разветвить процесс, который будет прослушивать сокет UNIX, сохранить адрес сокета в сеансе HTTP и общаться с этим процессом, используя протокол drb, когда пользователю потребуется передать новые данные для обработки. Но я думаю, что это не лучшее решение, и это будет проблемой для развертывания приложения на хостинге.

Какой самый простой способ сделать это?

Ответы [ 3 ]

0 голосов
/ 01 апреля 2010

Я предлагаю пойти на уровень выше. Используйте delayed_job для обработки нереста и начальной настройки параметров для вашей работы.

Вы можете изменить модель dbms delayed_job, добавив поля для дополнительной информации, которую вы хотите позже отправить на работу.

Тогда ваш поток будет:

  1. Отправить с использованием delayed_job. Сохраните идентификатор таблицы заданий. Если stock de; ayed_job не дает вам идентификатор задания, то при необходимости измените delayed_job.

  2. Добавить дополнительные данные в поле в таблице заданий

Если вашему основному заданию нужны данные обратно из разветвленного задания, то для этого также могут быть поля db.

Вы должны попытаться спроектировать свое приложение так, чтобы минимизировать количество необходимых сообщений. В противном случае вам нужно будет разработать протокол сообщений. Можно сделать, но это работа, которую вы должны стараться избегать.

0 голосов
/ 01 апреля 2010

Разве вы не можете использовать поток и общаться с ним через две очереди, одну для ввода в поток и одну для ответов потока?

0 голосов
/ 31 марта 2010

Могут ли дополнительные данные войти в базу данных, и процесс проверит там "новые данные"?

...