如何启动和停止Ruby Thin服务器?

时间:2011-10-08 17:33:42

标签: ruby thin

我需要以编程方式多次启动和停止瘦服务器。我使用以下代码:

require "thin"

def running?
  !TCPSocket.new('127.0.0.1', 3000).close
rescue Exception
  # not running
end

loop do
    server = Thin::Server.new('0.0.0.0', 3000, lambda {|env| [200, {}, ""]})
    thread = Thread.new {server.start}
    t = Time.now
    until running?
      sleep 0.1
    end
    puts "Started in #{Time.now - t}"

    server.stop!

    t = Time.now
    while running?
      sleep 0.1
    end
    puts "Stopped in #{Time.now - t}"
end

我希望 Thin :: Server#running?会告诉我服务器何时不再运行,但我错了,不得不创建自己的#running?方法

此外,它将在第一次大约 11-12秒(!?!?!)停止,并且不会第二次打印“已启动” - 例如它不会第二次正常启动,但Thin会打印熟悉的线条,好像一切都会好的。这是我从这个脚本得到的输出:

Thin web server (v1.2.11 codename Bat-Shit Crazy)
Maximum connections set to 1024
Listening on 0.0.0.0:3000, CTRL+C to stop
Started in 0.002001
Stopping ...
Stopped in 11.441654
Thin web server (v1.2.11 codename Bat-Shit Crazy)
Maximum connections set to 1024
Listening on 0.0.0.0:3000, CTRL+C to stop

它只是无限期地阻止。如何正确停止和启动服务器?

1 个答案:

答案 0 :(得分:0)

哈阿!似乎我通过使用EventMachine 1.0.0.beta 4.1设法解决了这个问题:)

速度快,我可以使用Thin :: Server#运行吗?而不是我的#running?方法