Ruby / RoR и многие подпроцессы - PullRequest
0 голосов
/ 18 ноября 2009

Я пытаюсь создать бесплатное веб-приложение, используя ruby ​​/ rails. Оно должно иметь возможность отправлять смс через онлайн-формы различных операторов мобильной связи. (вроде этот ).

Итак, мне нужно

  • дождитесь пользователя, который хочет отправить смс через мой сайт.
  • установить соединение с сайтом оператора. Возможно, используя Mechanize.
  • получить капчу
  • показать капчу пользователю
  • разрешить пользователю вводить сообщение и капчу
  • отправить заявку на сайте оператора (с сообщением, кодом, номером телефона)

Соединение с веб-сайтом оператора должно быть активным в течение всего этого процесса (в противном случае капча будет меняться). Насколько я понимаю, мне нужно создавать (под) процесс каждый раз при отправке смс. Не могли бы вы посоветовать, как лучше всего справиться с этим в rails \ ruby?

Я все еще довольно новичок в веб-разработке ... Должен ли я использовать темы? вилки? POPEN? используя PTY? какой-то внешний драгоценный камень? Как мне общаться с моим процессом?

Ответы [ 2 ]

2 голосов
/ 18 ноября 2009

Если на веб-сайте оператора нет ничего особенного, нет, вам не нужно поддерживать соединение в течение всего процесса. Вообще говоря, формы на веб-страницах работают следующим образом: вы посещаете URL, ваш веб-браузер загружает страницу с формой на ней. В вашем случае он также будет иметь тег imageили аналогичный для отображения CAPTCHA. Как только ваш браузер загрузил страницу, соединение разрывается. После того, как вы заполните форму и нажмете «Отправить», ваш веб-браузер откроет новое соединение с сервером и отправит данные, а сервер отправит свой ответ (какая страница отображается после нажатия кнопки «Отправить»).

Все, что ваша программа должна сделать, это подражать этому опыту. Итак: 1) Загрузите страницу с формой на ней. Очистите поля формы (убедитесь, что вы не пропустили ни одного скрытого поля - с CAPTCHA, вероятно, будут некоторые) и CAPTCHA. 2) Создайте страницу, чтобы показать вашему пользователю, что включает в себя CAPTCHA и форму со всеми полями, которые необходимо заполнить. Если в исходной форме были скрытые поля, убедитесь, что вы также включили их значения (как скрытые поля в своей форме), потому что, когда пользователь отправляет вашу форму, они вам понадобятся. 3) Затем, когда пользователь отправляет вашу форму, отправьте данные, включая скрытые значения и то, что пользователь ввел для CAPTCHA, оператору. 4) Наконец, проверьте, указал ли оператор успех, и создайте страницу, чтобы сообщить об этом своему пользователю.

Если вы делаете это в Rails, у вас, вероятно, будет два метода в вашем контроллере: один называется например. 'show' (шаги 1 и 2 выше), которые будут счищать CAPTCHA и другую информацию с сайта оператора и показывать пользователю ваш вид формы, а другой называется, например, «отправить» (шаги 3 и 4 выше), на который будет отправлена ​​форма, и которая возьмет свои данные и отправит их на веб-сайт оператора, соберет ответ и сообщит своему пользователю, был ли он успешным или нет.

Примечание: Вы должны прочитать условия обслуживания операторов, прежде чем пытаться что-либо из этого. Я вполне уверен, что подобные вещи будут против их TOS, и если они заметят, что ваш сервер отправляет множество запросов в их направлении, они довольно быстро заблокируют вас.

1 голос
/ 18 ноября 2009

Чтобы ответить на другой ваш вопрос, вы можете использовать DRb или background_job (он же BJ), чтобы фактически выполнить отправку в фоновом режиме, чтобы после того, как ваш пользователь отправил капчу, ему не нужно ждать ответа. Или вы можете обернуть это в ajax, и процесс DRb / BJ уведомит вас, когда произошла отправка смс, чтобы вы могли уведомить пользователя об успехе или о любых проблемах.

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

...