我需要在Rails应用程序中实现Web客户端。现有的Web服务是SOAP,通常需要几秒钟来响应请求。使用SOAP4R,请求阻止。
直接从rails控制器调用这些阻塞方法是否可以接受?如果没有,那么rails控制器是否应该使用可以处理SOAP命令和回复的单独服务来缓冲命令。还有第三种更好的方法吗?
答案 0 :(得分:3)
这取决于 - 它们是否需要实时处理(例如,当用户点击GO时它应该实际触发?)。如果你正在使用mongrel,请记住任何正在做“某事”的杂种会阻塞,从并发的角度来看这是很糟糕的(除非你有大量的杂种)。如果您正在使用乘客,只要您打开备用乘客实例,长时间运行的控制器动作的命中也不是问题。
对于可以在带外发生的事情(并且有一些延迟,例如报表处理或视频转换)我有一个名为“JOBS”的模型,然后使用脚本/运行程序(与cron结合)来调用作业.process_jobs每隔几分钟。
或者,您可以创建一个小脚本并将其放在脚本/脚本中,并且每隔几分钟调用一次。
还有第三种选择,使用drb进程,但是 - 根据我的经验 - 我发现它比仅仅每隔几分钟发射一次cron(或者甚至只是让控制器放置)更多“移动部件”除非我真的需要(例如雪貂),否则我倾向于避免它。