gpt4 book ai didi

ruby - 如何在 Sinatra 中运行 EventMachine 和服务页面?

转载 作者:数据小太阳 更新时间:2023-10-29 07:30:16 25 4
gpt4 key购买 nike

我正在构建一个使用 TweetStream 的 Sinatra 应用程序(它使用 EventMachine 监听推文)。我也希望该应用程序像普通 Sinatra 应用程序一样提供页面服务,但似乎 Sinatra 在“监听”推文时无法“监听”页面请求。

我可以通过使用不同的服务器或以不同的方式构建我的应用程序来解决这个问题吗?我试过使用 WebBrick 和 Thin。

这基本上是我正在做的:

class App < Sinatra::Base

# listening for tweets
@client = TweetStream::Client.new
@client.track(terms) do |status|
# do some stuff when I detect terms
end

get '/' do
"Here's some page content!"
end

end

最佳答案

您可以在 eventmachine 中安装 Sinatra 应用程序(为您提供一个支持 EM 即 Thin 的网络服务器)。然后,您应该可以从 Sinatra 应用程序完全访问 EM react 器循环,并允许任何其他 EM 插件运行。

Sinatra 食谱就是一个很好的例子:

http://recipes.sinatrarb.com/p/embed/event-machine

这是代码的精简版:

require 'eventmachine'
require 'sinatra/base'
require 'thin'

def run(opts)

EM.run do
server = opts[:server] || 'thin'
host = opts[:host] || '0.0.0.0'
port = opts[:port] || '8181'
web_app = opts[:app]

dispatch = Rack::Builder.app do
map '/' do
run web_app
end
end

unless ['thin', 'hatetepe', 'goliath'].include? server
raise "Need an EM webserver, but #{server} isn't"
end

Rack::Server.start({
app: dispatch,
server: server,
Host: host,
Port: port
})
end
end

class HelloApp < Sinatra::Base

configure do
set :threaded, false
end

get '/hello' do
'Hello World'
end

get '/delayed-hello' do
EM.defer do
sleep 5
end
'I\'m doing work in the background, but I am still free to take requests'
end
end

run app: HelloApp.new

关于ruby - 如何在 Sinatra 中运行 EventMachine 和服务页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20642717/

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