gpt4 book ai didi

ruby - 在 Sinatra 应用程序中维护单一、持久的 EM 连接

转载 作者:太空宇宙 更新时间:2023-11-03 16:34:54 25 4
gpt4 key购买 nike

我是 EventMachine 的新手,所以我有可能完全错误地处理这个问题。我想要做的是在应用程序启动时创建一个 EM 连接(实际上是一个 Blather 流,但那是一个 EM::Connection),然后我可以在需要时点击它。现在,我想让 Blather 在此 Sinatra 应用程序中正常工作的唯一方法是每次都创建一个新连接,该连接包含在 EM.run block 中。

我一直在尝试确定 async_sinatra 是否有帮助。不过,我实际上并不关心请求是否异步发生。我想这会很好,但我仍然不知道如何保持请求之间的连接。

在我看来最有意义的解决方案是在 Sinatra 配置 block 内的 EM block 中设置连接,但我不确定以后如何访问它。不过,也许我缺少一些基本的东西。

附注这最终将在 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

最佳答案

这里是开始的地方:

require 'rack'
require 'sinatra/base'
require 'eventmachine'

class EMHandler < EM::Connection
attr_reader :data

def initialize(obj)
@obj = obj
@data = ""
end

def receive_data(data)
@data << data
end
end

class PersistentConnection
def initialize(app, options = {})
@app = app
EM::next_tick do
@server = EM::connect('127.0.0.1', 4000, EMHandler, self)
end
end

def call(env)
env['my_connection'] = @server
@app.call(env)
end
end

class Dashboard < Sinatra::Base
get '/' do
env['my_connection'].data
end
end

use PersistentConnection
run Dashboard

这将打开与本地主机上端口 4000 上的服务器的持久连接,它将存储从它接收到的任何内容,并在通过 Web 浏览器请求索引页面时显示它。

将其保存在“config.ru”文件中并运行:

$ thin start -V

在我的例子中,端口 4000 上的服务器是(我在 mac os x 上,linux 也有):

$ nc -l 4000

把我打开的连接换成你想要的就可以了。

关于ruby - 在 Sinatra 应用程序中维护单一、持久的 EM 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9366868/

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