2010-04-14 97 views
1

我正在研究Windows上的Ruby on Rails項目。我安裝了Ruby 1.86和Rails 2.35。直到我試圖實施彗星過程時,一切都很好。我編寫了下面的代碼來響應長查詢JavaScript請求。但每次調用此函數時,它都會掛起整個導航服務器,直到超時,纔會有第二個請求進入。 (我知道有juggernaut,但我喜歡首先自己實現一個:)紅寶石軌道循環導致服務器凍結

這是由於我的服務器設置?該項目將部署在一個Ngix和Passenger的Linux服務器上,它會遭受同樣的問題嗎?

def comet_hook 
    timeout(5) do 
     while true do 
     key = 'station_' + station_id.to_s + '_message_lastwrite'  
     if Rails.cache.exist?(key) 
      @cache_time = DateTime.parse(Rails.cache.read(key)) 
      if @cache_time > hook_start 
      @messages = @station.messages_posted_after(hook_start) 
      hook_start = @cache_time 
      break 
      end 
     end 
    end 
    ... 
end 
使用Rails的內存存儲高速緩存

而且,我不斷收到「不能修改凍結的對象」的錯誤,所以上面的腳本只是工作的我,當我切換到文件緩存。 :(

回答

0

你的Windows安裝程序可能包含單個或webrick例如mongrel可同時處理只有一個連接。

Passeger和nginx設置可以(並且通常會),當然,容納多個併發會話通過網絡服務器過程的集羣(可以是背後nginx一個mongrel簇,或乘客的Apache工作進程的集羣)中,如果被配置爲這樣做(mongrel集羣,MaxClients爲Apache /乘客的servers配置值。)

根據預期的流量(例如,流量)來擴展併發客戶端會話和/或系統內存的數量。如果您希望每秒處理10個請求(每個請求可能需要5秒或更長時間才能處理服務),則需要容納50個或更多客戶端連接,即羣集中有50個或更多的Mongrel服務器或者50個或更多的Apache工作進程 - 不平凡的內存要求。)