Я пытаюсь интегрировать ответчик RESTful в приложение Crossbar, для которого лучше всего подходит служба WSGI. В идеале этот сервис должен быть частью остальной инфраструктуры pub/sub, имея возможность получать WAMP, с одной стороны, и отвечать на HTTP-запросы, с другой.
Сложность состоит в том, чтобы запустить цикл событий, который допускает асинхронные события веб-сокетов и дополнительно предлагает компонент, совместимый с WSGI. Мне кажется, что Pulsar должен уметь это делать, но я не смог понять Как его настроить, ни один из доступных примеров не демонстрирует именно этот вариант использования.
value = None
class Foo(ApplicationSession):
def onJoin(self, details):
yield self.subscribe(self.bar, 'bar')
def bar(self, data):
value = data
app = Flask(__name__)
@app.route('/')
def baz():
return value
if __name__ == '__main__':
runner = ApplicationRunner('ws://127.0.0.1:8080', 'test')
runner.run(Foo, start_reactor=False)
# now what?
Вышеприведенное демонстрирует две части: клиент Autobahn WAMP и компонент Flask WSGI. Как мне запустить оба из них параллельно, позволяя одному потоку получать события как через HTTP, так и через веб-сокет? Меня не особенно волнует версия Python или базовая библиотека (Twisted, asyncio, Pulsar, Flask), я просто хочу, чтобы это как-то работало.