我有一个sinatra
应用程序正在thin
用作它的网络服务器。我通过ActiveRecord
.
如果在端点中,我会这样做:
get '/test' do
Model.create(.....)
end
是否Model.create(.....)
阻塞事件循环(eventmachine
内部使用稀薄)?如果是这样,这有多糟糕,有什么替代方案?
谢谢
我有一个sinatra
应用程序正在thin
用作它的网络服务器。我通过ActiveRecord
.
如果在端点中,我会这样做:
get '/test' do
Model.create(.....)
end
是否Model.create(.....)
阻塞事件循环(eventmachine
内部使用稀薄)?如果是这样,这有多糟糕,有什么替代方案?
谢谢
我的理解是thin
默认情况下是线程化的,除非你禁用它。因此,您的请求处理程序可以使用Eventmachine::Defer
.
是的,正如@user2246674 的评论所说,如果您的处理程序在反应器线程中执行,那么它将阻塞所有内容。
至于替代方案,我刚刚搜索了谷歌,ActiveRecord and Eventmachine
第一个点击是这篇带有一些代码的帖子:http: //www.mikeperham.com/2010/03/30/using-activerecord-with-eventmachine/。您可能会发现查看支持ActiveRecord
.
这也是我自己关于相关主题的问题:使用 sinatra 流 API 的异步请求那里我使用 Sinatra 的流 API 来实现异步请求处理。
我个人会使用我的 Sinatra 应用程序中的直接数据库访问。这就是我一直在做的事情。ActiveRecord
对我来说太重了。
是的,它确实阻塞了。如果您在 Mysql 上,您可以使用 mysql2 gem 发出请求,它支持异步请求。 https://github.com/brianmario/mysql2