[問題] Rails handle multiple requests

看板Ruby作者 (4/9 熱舞成發在新體! 4/9)時間13年前 (2011/08/02 13:02), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串1/3 (看更多)
環境: 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)

08/02 19:52, , 1F
用Passenger就有mutli processes 可以解決你的問題了
08/02 19:52, 1F

08/03 12:38, , 2F
喔喔喔喔!!! 好!!! 太棒了!! 感謝!!!
08/03 12:38, 2F
文章代碼(AID): #1EDuJIM2 (Ruby)
文章代碼(AID): #1EDuJIM2 (Ruby)