Я немного новичок в EventMachine, поэтому есть вероятность, что я совершенно неправильно подхожу к этому. Что я пытаюсь сделать, так это создать EM-соединение (на самом деле поток Blather, но это EM::Connection) один раз при запуске приложения, которое я затем могу нажать, когда мне нужно. На данный момент единственный способ, которым я могу Блазер работать правильно в этом приложении Sinatra, — это каждый раз создавать новое соединение, которое заключено в блок EM.run.
Я пытался определить, поможет ли async_sinatra. Однако мне все равно, если запросы выполняются асинхронно. Я полагаю, это было бы неплохо, но я до сих пор не вижу, как сохранить связь между запросами.
Решение, которое кажется мне наиболее разумным, состоит в том, чтобы настроить соединение в блоке EM внутри блока конфигурации Sinatra, но тогда я не уверен, как получить к нему доступ в будущем. Хотя, возможно, я упускаю что-то основное.
p.s. В конечном итоге это будет работать на 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