红宝石轨道循环导致服务器冻结

红宝石轨道循环导致服务器冻结

问题描述:

我正在研究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的内存存储高速缓存

而且,我不断收到“不能修改冻结的对象”的错误,所以上面的脚本只是工作的我,当我切换到文件缓存。 :(

你的Windows安装程序可能包含单个或webrick例如mongrel可同时处理只有一个连接。

Passeger和nginx设置可以(并且通常会),当然,容纳多个并发会话通过网络服务器过程的集群(可以是背后nginx一个mongrel簇,或乘客的Apache工作进程的集群)中,如果被配置为这样做(mongrel集群,MaxClients为Apache /乘客的servers配置值。)

根据预期的流量(例如,流量)来扩展并发客户端会话和/或系统内存的数量。如果您希望每秒处理10个请求(每个请求可能需要5秒或更长时间才能处理服务),则需要容纳50个或更多客户端连接,即群集中有50个或更多的Mongrel服务器或者50个或更多的Apache工作进程 - 不平凡的内存要求。)