Mat*_*tty 12 ruby ruby-on-rails blocking
我正在考虑用Rails编写Web应用程序.用户做出的每个请求都取决于被调用的外部API.这个外部API可以随机非常慢(2-3秒),因此显然会影响单个请求.
在代码等待外部API返回的这段时间内,是否会阻止进一步的用户请求?
只是为了进一步澄清,因为似乎有些混乱,这是我期待的模型:
Ruby(1.9.3)解释器(或Rails 3.x框架中的某些东西)是否会阻止Bob的请求,要求他等到Alice的请求完成后?
如果您只使用一个单线程,非事件服务器(或者不使用带有事件服务器的事件I/O),是的.使用Thin和EM-Synchrony的其他解决方案将避免这种情况.
根据您的更新进行阐述:
不,Ruby和Rails都不会导致您的应用程序被阻止.但是你遗漏了那部分:Web服务器.您需要多个进程,多个线程或一个事件服务器,以及使用事件I/O库执行Web服务请求.
@alexd描述了使用多个进程.我个人支持一个事务服务器,因为我不需要提前知道/猜测我可能有多少并发请求(或使用基于负载来旋转进程的东西.)nginx面向单个thin进程的单个进程可以服务器大量的并行请求.