【发布时间】:2012-02-28 21:22:44
【问题描述】:
我是一个 EventMachine 新手,所以我有可能完全错误地处理这个问题。我要做的是在应用程序启动时创建一个 EM 连接(实际上是一个 Blather 流,但那是一个 EM::Connection),然后我可以在需要时点击它。现在,我可以在这个 Sinatra 应用程序中正常工作的唯一方法是每次都创建一个新连接,该连接被包装在一个 EM.run 块中。
我一直在尝试确定 async_sinatra 是否会有所帮助。不过,我实际上并不关心请求是否异步发生。我想这会很好,但我仍然没有看到如何保持请求之间的连接。
在我的脑海中似乎最有意义的解决方案是在 Sinatra 配置块内的 EM 块中设置连接,但是我不知道以后如何访问它。不过,也许我缺少一些基本的东西。
附言这最终将在 Heroku 上运行,因此虽然我非常感谢任何见解,但已知可在 Heroku 上运行的解决方案将是最有用的。
编辑:
这似乎在做我想做的事,至少在本地:
class Dashboard < Sinatra::Base
configure do
Thread.start do
EM.run do
@@xmpp_stream = Blather::Client.setup('jid', 'password')
@@xmpp_stream.connect
end
end
end
end
【问题讨论】:
-
你打算如何运行这个应用程序?如果您使用多个工人,您将为每个工人获得一个连接,这是一个问题吗?
-
部署应用时,别忘了使用 Cedar 堆栈,因为 EventMachine 仅在该堆栈上受支持。
标签: ruby heroku sinatra eventmachine