作者lintingy (4/9 热舞成发在新体! 4/9)
看板Ruby
标题[问题] Rails handle multiple requests
时间Tue Aug 2 13:02:07 2011
环境:
Ruby 1.8.7
Rails 3.0.7
状况:
在做一个可以让使用者输入帐号密码,
而系统会立刻去fetch使用者部份的email内容,
而fetch完後,就会把处理後的结果显示在网页上。
然後因为种种原因,fetch的部份现在是用python写的,
而rails和python之间是用xmlrpc在做沟通。
现在fetch的部份,也就是call python的地方会花比较长的时间。
所以就发现,rails似乎是single thread在处理所有使用者的request的?
因为当call python处理一个使用者资料的这段时间,
另外的使用者会完全没有办法连上网站,
必须一直等到call python的部份结束後,其他使用者才有办法连上网站。
python部份的multithread已经确认是没问题的,
所以想问问看,
有什麽办法可以让rails这边也是multithread处理user request?
如此一来让在fetch一个使用者资料时,网站还可以继续让其他使用者浏览,
而且也可以让python那边mutithread的去fetch多个使用者的资料?
网路上有看到一些参考资料,
一种是会建议这类型需要长时间处理的直接丢到background去做,
这样子应该也可以解决问题。
感觉这样似乎会是比较好的处理方式?
只是这样子代表rails一样是single thread再处理request,
这感觉实在是很奇怪...
另一种则是建议使用Passenger, unicorn 或是mongrel cluster这些方式,
模拟或实做出multithread的rails server。
因为对於这些部份实在是很不熟悉,
所以总结问题如下:
1. rails default使用single thread的原因是什麽?
要能够让很多使用者同时使用网站但却用single thread,这不会很矛盾吗?
2. 丢到background去处理,跟想办法让rails server变成multithread,
这两种方式有哪一种会比较建议吗?
3. 那如果用background执行的方式,要怎麽样知道他已经处理完了?
(因为处理完後要马上给使用者feedback)
(而之前有用过fork处理类似问题,
但是这麽一来就没有办法知道他已经处理完了,
後续的显示就不知道该怎麽接上...)
4. 最後则是说,如果要实做rails server的multithread,
有没有建议的方式?
抱歉,第一次问问题就问了一大堆,也还希望有人可以协助解答,
感谢非常!!!!!!!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.168.135.248
※ 编辑: lintingy 来自: 118.168.135.248 (08/02 18:16)
1F:→ ihower:用Passenger就有mutli processes 可以解决你的问题了 08/02 19:52
2F:→ lintingy:喔喔喔喔!!! 好!!! 太棒了!! 感谢!!! 08/03 12:38