Rails 新人求助: loop 导致 server 阻塞了?

prothro · 2013年08月16日 · 最后由 prothro 回复于 2013年08月19日 · 2914 次阅读

我在 Controller 中的一个 Action 中定义了一个 loop

def test
 loop{
    if  条件
     break
    end
 }

然后我在浏览器中调用了一次该 action(if 条件不符合)后,再访问这个 Controller 就 感觉给阻塞了。这是怎么回事呢,该怎样解决?

是不是条件没符合呢?

我用火狐运行这个方法,if 不符合。我再打开 谷歌浏览器浏览 访问这个 Controller 里面的方法就不行了。

我这样访问不是相当与 进行了两次会话?前一次的会话怎么会影响到后面的会话呢

#1 楼 @iBachue

我用火狐运行这个方法,if 不符合。我再打开 谷歌浏览器浏览 访问这个 Controller 里面的方法就不行了。

我这样访问不是相当与 进行了两次会话?前一次的会话怎么会影响到后面的会话呢

Rails 单进程单线程。

#3 楼 @prothro 因为 development 模式下 Rack 服务器是单线程的 一旦死在循环里就没有其他线程来处理新的请求了 所以必须让那个线程从死循环里出来

#5 楼 @iBachue 那我怎样才能让在 development 模式下也可以多线程呢? 我需要这个循环。

#4 楼 @Rei 嗯嗯!新手,好多都不懂呢

#6 楼 @prothro 你可以直接rails s -e production进入 production 模式 这样比较直接

#8 楼 @iBachue 嗯嗯,我试试

#6 楼 @prothro 能不能说说你的需求 就算是 production 模式 所有线程都让你 loop 了以后 还是一样的卡死状态

#10 楼 @zj0713001 做网页聊天,好多都不懂

设计 loop 的时候都要考虑清楚退出条件,如果不确定退出条件是否发生的话,loop 加上最大次数限制,然后 raise error,看看到底为什么不执行。

#12 楼 @linjunhalida 嗯嗯!网络聊天到底应该怎么做呢。是怎样的一个思路

需要 登录 后方可回复, 如果你还没有账号请 注册新账号