[問題] Rails handle multiple requests
環境:
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
08/02 19:52, 1F
→
08/03 12:38, , 2F
08/03 12:38, 2F
討論串 (同標題文章)
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章