ruby – 如何在Sinatra中运行EventMachine并提供页面服务?
发布时间:2020-12-17 02:39:57 所属栏目:百科 来源:网络整理
导读:我正在构建一个使用TweetStream的Sinatra应用程序(使用EventMachine侦听推文).我也希望该应用程序像普通的Sinatra应用程序一样提供页面,但似乎Sinatra在“倾听”推文时无法“收听”页面请求. 这是我可以通过使用不同的服务器或以不同的方式构建我的应用程序
我正在构建一个使用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 解决方法
您可以在事件机器中安装Sinatra应用程序(为您提供支持EM的瘦客户机,即Thin).然后,您应该可以从Sinatra应用程序完全访问EM反应器循环,以及允许任何其他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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |