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