gpt4 book ai didi

ruby - 如何从 Sinatra 配置瘦网络服务器?

转载 作者:数据小太阳 更新时间:2023-10-29 08:56:43 24 4
gpt4 key购买 nike

这是我的网络应用:

class Front < Sinatra::Base
configure do
set :server, :thin
end
get '/' do
'Hello, world!'
end
end

我是这样开始的:

Front.start!

效果很好,但我想将 Thin 配置为“线程化”。根据their documentation,我知道这是可能的.但我不知道如何将 threaded: true 参数传递给 Thin。我试过这个但它不起作用:

configure do
set :server_settings, threaded: true
end

最佳答案

当以您描述的方式启动时,瘦网络服务器默认是线程化的。

# thin_test.rb
require 'sinatra/base'

class Front < Sinatra::Base
configure do
set :server, :thin
end

get '/' do
'Hello, world!'
end

get '/foo' do
sleep 30
'bar'
end
end

Front.start!

开始于:

ruby thin_test.rb

确认:

# will hang for 30 seconds while sleeping
curl localhost:4567/foo

# will complete successfully while the other request is pending
curl localhost:4567
Hello, world!

this answer 中有更多关于 Sinatra 如何使用其他网络服务器的详细信息。

如果由于某种原因这不起作用,则可以使用 server_settings 选项组合一些东西,这通常只对 WEBrick 有用,除非你使用一些未记录的方法来强制它:

require 'sinatra/base'
require 'thin'

class ThreadedThinBackend < ::Thin::Backends::TcpServer
def initialize(host, port, options)
super(host, port)
@threaded = true
end
end

class Front < Sinatra::Base
configure do
set :server, :thin

class << settings
def server_settings
{ :backend => ThreadedThinBackend }
end
end
end

get '/' do
'Hello, world!'
end

get '/foo' do
sleep 30
'foobar'
end
end

Front.start!

我很难判断这个例子是否是它被线程化的原因,因为它默认以线程模式启动。也就是说,它不会引发异常并且会以线程模式运行:

# will hang for 30 seconds while sleeping
curl localhost:4567/foo

# will complete successfully while the other request is pending
curl localhost:4567
Hello, world!

有关 server_settings 的更多信息可以在 hereherehere 中找到。

关于ruby - 如何从 Sinatra 配置瘦网络服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53067147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com