【发布时间】:2011-10-08 17:33:41
【问题描述】:
我需要多次以编程方式启动和停止瘦服务器。我正在使用以下代码:
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 秒 (!?!?!) 后停止,第二次不会打印“Started” - 例如它不会第二次正确启动,但 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
而且它只是无限期地阻塞。如何正确停止和启动服务器?
【问题讨论】: