Возможно, это вопрос дампа, но я пытаюсь запустить два «сервера» Уэбрика. Один на порту 8080 и один на порту 8443. Я мог запустить два сервера в 2-х потоках, но я увидел это: https://github.com/ruby/webrick/blob/master/lib/webrick/httpserver.rb#L191 и подумал, что могу запустить один из порта 8443 как виртуальный хост с кодом, похожим наэто:
## build default server
svr = WEBrick::HTTPServer.new(
:Port => 8080,
:BindAddress => "0.0.0.0"
)
svr.mount_proc("/"){|req, res|
res.body = "This is default server!"
res['content-type'] = "text/plain"
}
## Build 'SSL' server
ssl_svr = WEBrick::HTTPServer.new(
#:DoNotListen => true, # don't forget!
:Port => 8443,
:BindAddress => "0.0.0.0",
)
ssl_svr.mount_proc("/"){|req, res|
res.body = "This is ssl server!"
res['content-type'] = "text/plain"
}
svr.virtual_host(ssl_svr)
svr.start
Однако, если я это сделаю, сервер, работающий на порту 8443, никогда не будет запущен и никогда не получит запросы. Это вывод:
[2019-10-18 12:07:23] INFO WEBrick 1.5.0
[2019-10-18 12:07:23] INFO ruby 2.6.3 (2019-04-16) [x86_64-darwin18]
[2019-10-18 12:07:23] INFO WEBrick 1.5.0
[2019-10-18 12:07:23] INFO ruby 2.6.3 (2019-04-16) [x86_64-darwin18]
[2019-10-18 12:07:23] INFO WEBrick::HTTPServer#start: pid=94091 port=8080
Обратите внимание на то, что сервер на порту 8443. Никогда не запускается.
Если я подключу Уэбрика к следующему:
def start
@vhost_threads = []
@virtual_hosts.each do |vhost|
puts "Starting vhost"
@vhost_threads << Thread.new { vhost.start }
end
super
end
def shutdown
@virtual_hosts.each do |vhost|
vhost.shutdown
end
@vhost_threads.each {|vt| vt.join }
super
end
end
ТеперьСервер, работающий на порту 8443, запускается и может получать запросы:
[2019-10-18 12:08:58] INFO WEBrick 1.5.0
[2019-10-18 12:08:58] INFO ruby 2.6.3 (2019-04-16) [x86_64-darwin18]
[2019-10-18 12:08:58] INFO WEBrick 1.5.0
[2019-10-18 12:08:58] INFO ruby 2.6.3 (2019-04-16) [x86_64-darwin18]
Starting vhost
[2019-10-18 12:08:58] INFO WEBrick::HTTPServer#start: pid=94134 port=8080
[2019-10-18 12:08:58] INFO WEBrick::HTTPServer#start: pid=94134 port=8443
Что-то не так с первой версией кода? Разве виртуальные хосты на Webrick не должны использоваться так, как я описал?