Ruby代码在独立的Sinatra上运行,但在Apache2上使用Passenger失败了

时间:2014-12-12 13:21:50

标签: ruby apache2 sinatra passenger

我为我的网站实施了一个longpoll机制,它保持与客户端的连接打开最多30秒,并且只有在请求的资源在这30秒内发生变化时才发送答案,否则它会发送状态400.

这是我用于机制的代码:(它是 Sinatra 服务器的一部分)

get '/longpoll' do
  state = Array.new( $callbacks )
  0.upto 60 do |i|
    if $callbacks != state
      return json $callbacks
    end
    sleep 0.5
  end
  400
end

$callbacks是一个全局数组,在发布新的回调或删除完成的回调时会更改。我的客户端只需要在新的回调到达或旧的回调消失时动态更新。在客户端a $.ajax() - 如果收到答复,呼叫请求资源并更新网站。否则它只是继续轮询。

当我自己执行Sinatra服务器时,一切正常。如果有任何变化,客户端会得到答案,或者30秒后错误“400”。

但是当我使用Passenger和Apache2开始整个事情时,它总是在30秒后以'400'响应,无论$回调是否改变。我的其余Sinatra代码在Apache2和Passenger中运行良好,当我手动检查$ callbacks对象时,它会显示更改。它只是不识别if语句中的变化。

0 个答案:

没有答案