我正在尝试构建一个免费的web应用程序,使用ruby/rails,它应该能够通过各种移动运营商的在线形式发送sms。(如这一个 (俄文))。
所以,我需要
在所有这些过程中,到操作员网站的连接应该是活动的(否则captcha会改变)。据我所知,每次发送sms时,我都需要创建一个(子)进程。请您建议在rails\ruby中处理这个问题的最佳方法是什么?
我对网络开发还是很陌生的.我应该使用线程吗?叉子?波芬?利用PTY?一些外部宝石?我应该如何与我的过程沟通?
发布于 2009-11-18 15:26:09
假设操作员的网站没有什么特别之处,不,您不需要在整个过程中保持连接活动。一般来说,网页上的表单是这样工作的:访问URL,web浏览器下载带有表单的页面。在您的示例中,它还将有一个标记或类似的标记来显示CAPTCHA。一旦浏览器下载了该页面,连接就会被切断。填写表单并单击Submit后,web浏览器打开到服务器的新连接并发送数据,服务器发送其响应(单击Submit后显示的任何页面)。
你的程序所要做的就是模仿这种经历。因此: 1)下载带有表单的页面。刮掉表单字段(确保不会漏掉任何隐藏字段--使用CAPTCHA,可能会有一些)和CAPTCHA。2)构建一个显示用户的页面,其中包括CAPTCHA和一个包含他们需要填写的所有字段的表单。如果原始表单中有隐藏字段,请确保还包括它们的值(作为表单中的隐藏字段),因为当用户提交表单时,您将需要它们。3)然后,当用户提交表单时,将数据(包括隐藏的值和用户为CAPTCHA输入的内容)发送给操作员。4)最后,检查操作员是否表示成功,并构建一个页面来告诉用户。
如果您在Rails中这样做,您的控制器中可能有两种方法:一种是名为“show”(上面步骤1和2),它将从操作员的站点刮取CAPTCHA和其他信息,并显示您的表单视图,另一种方法称为“send”(上面的步骤3和4),它将接收他们的数据并将其发送到操作员的网站,收集响应,并告诉用户表单是否成功。
备注:,您需要先阅读运营商的服务条款,然后再考虑这些内容。我相当肯定,这类事情将违背他们的TOSes,如果他们注意到您的服务器发送大量请求,他们会很快阻止您。
发布于 2009-11-18 16:34:33
要回答您的另一个问题,您可以使用DRb或background_job (又名BJ)在后台实际完成发送,这样在用户提交captcha之后,他们就不必等待响应。或者,您可以将其包装在ajax中,让DRb/BJ进程在sms发送发生时通知您,这样您就可以将成功或任何问题通知用户。
通常,在Ruby中打开线程是要避免的,因为有很多伟大的宝石可以满足我们的需要。并不是说您不应该使用线程,只是在大多数情况下,它可能已经做得很好了。
https://stackoverflow.com/questions/1756658
复制相似问题