0

我有一个sinatra应用程序正在thin用作它的网络服务器。我通过ActiveRecord.

如果在端点中,我会这样做:

get '/test' do
  Model.create(.....)
end

是否Model.create(.....)阻塞事件循环(eventmachine内部使用稀薄)?如果是这样,这有多糟糕,有什么替代方案?

谢谢

4

2 回答 2

0

我的理解是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对我来说太重了。

于 2013-05-25T04:36:43.440 回答
0

是的,它确实阻塞了。如果您在 Mysql 上,您可以使用 mysql2 gem 发出请求,它支持异步请求。 https://github.com/brianmario/mysql2

于 2013-05-25T05:02:52.413 回答