ruby – Fork WEBrick并等待开始
发布时间:2020-12-17 03:22:54 所属栏目:百科 来源:网络整理
导读:我有以下代码,其中WEBrick实例是分叉的,我想等到webrick启动,然后继续其余的代码: require 'webrick'pid = fork do server = WEBrick::HTTPServer.new({:Port = 3333,:BindAddress = "localhost"}) trap("INT") { server.shutdown } sleep 10 # here is cod
我有以下代码,其中WEBrick实例是分叉的,我想等到webrick启动,然后继续其余的代码:
require 'webrick' pid = fork do server = WEBrick::HTTPServer.new({:Port => 3333,:BindAddress => "localhost"}) trap("INT") { server.shutdown } sleep 10 # here is code that take some time to setup server.start end # here I want to wait till the fork is complete or the WEBrick server is started and accepts connections puts `curl localhost:3333 --max-time 1` # then I can talk to the webrick Process.kill('INT',pid) # finally the webrick should be killed 那么我怎么能等到fork完成,甚至更好,直到WEBrick准备好接受连接?我发现了一段代码,它们处理IO.pipe,读者和作者.但这并不等待webrick加载. 不幸的是,我没有找到任何针对这个具体案例希望有人能提供帮助. 解决方法
WEBRick :: GenericServer有一些未记录的回调钩子(遗憾的是,事实上,整个webrick库记录很少!),例如
:StartCallback ,:StopCallback ,:AcceptCallback .您可以在初始化WEBRick :: HTTPServer实例时提供钩子.
因此,结合IO.pipe,您可以编写如下代码: require 'webrick' PORT = 3333 rd,wt = IO.pipe pid = fork do rd.close server = WEBrick::HTTPServer.new({ :Port => PORT,:BindAddress => "localhost",:StartCallback => Proc.new { wt.write(1) # write "1",signal a server start message wt.close } }) trap("INT") { server.shutdown } server.start end wt.close rd.read(1) # read a byte for the server start signal rd.close puts `curl localhost:#{PORT} --max-time 1` # then I can talk to the webrick Process.kill('INT',pid) # finally the webrick should be killed (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |