gpt4 book ai didi

ruby-on-rails - 将 EventMachine 与 Thin 一起使用

转载 作者:行者123 更新时间:2023-12-04 06:00:03 24 4
gpt4 key购买 nike

我最近在升级到 rails 3 时从 mongrel 切换到 Thin。在切换之前,我们一直在使用 EventMachine 没有任何问题。切换到瘦后,每当调用 EventMachine 时,服务器都会轰炸并说我们返回的变量是 nil。

据我了解,thin 使用 EventMachine,这可能会导致与 Mongrel 使用的实现发生冲突。我使用 EventMachine 的次数不多,但似乎我需要在另一个实例中运行 EventMachine 以将其与 Thin 使用的 EventMachine 分开。我在正确的 rails 上吗?我将如何立即将其运行在与 Thin 的 EventMachine 分开的自己的进程中?

这是我们目前已经实现的 EventMachine 的片段

def connect
EventMachine.run {
args, options = {
:query => @options[:query],
:head => @options[:headers]
}, {
:connect_timeout => @options[:timeout],
:inactivity_timeout => @options[:timeout]
}

args[:body] = @options[:data] if allow_body?
args[:redirects] = @options[:redirects] if @options[:redirects]

http = EventMachine::HttpRequest.new(@uri, options).send(@options[:method], args)

http.errback {
@response = HttpConnection::Response.new(http, false, @options[:logger])

EventMachine.stop
}

http.callback {
@response = HttpConnection::Response.new(http, true, @options[:logger])

EventMachine.stop
}
}

return @response
end

最佳答案

Thin 已经提供并管理了一个 EventMachine react 器,因此您无需单独设置一个。我认为您不需要将此代码嵌入到 EventMachine.run {} 中。 block 的初学者。

您的方法在这里存在一些问题。首先,返回的@response变量将始终为零,因为 EventMachine::HttpRequest异步发生,在你点击 http.callback {} 之前不会给你任何数据堵塞。其次,在每个 EventMachine::HttpRequest回调,您正在调用 EventMachine.stop .这将产生停止 thin 的效果。网络服务器,这可能就是您看到服务器轰炸的原因。

如果您尝试在 Rails 应用程序中运行此类代码,您可能需要找到一种异步处理调用的方法,以便应用程序在等待长时间运行的进程发生时不会挂起。我为此使用的一个好方法是使用 Sinatra,它有一个 async插件,允许您保持打开的长时间运行的请求。然后,您可以使用 rails metal 将其包含在您的 rails3 应用程序中,以便将对您的 async/eventmachine 代码的请求路由到 sinatra。

关于ruby-on-rails - 将 EventMachine 与 Thin 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9022991/

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