Связь между Autobahn и Flask/Twisted

Я создаю довольно простое приложение с функциями Autobahn для WebSocket. Это очень похоже на чат-сервер, но мне нужно понять, как это сделать, — как по существу разделить ресурсы между объектом WebSocketServerFactory и моим приложением Flask. Пример здесь:

https://github.com/tavendo/AutobahnPython/tree/master/examples/twisted/websocket/echo_wsgi

показывает, как объединить Flask и Autobahn, но в моем конкретном случае я хочу иметь возможность динамически добавлять комнату чата при запуске авторизованным вызовом из компонента Flask. Есть ли какая-либо передовая практика в отношении того, как общаться между двумя компонентами в Autobahn?


person Richard Bender    schedule 26.02.2015    source источник


Ответы (1)


Flask основан на WSGI, фундаментально блокирующем API. Это плохо сочетается с Twisted или asyncio (двумя асинхронными сетевыми платформами, поддерживаемыми AutobahnPython).

Вот 2 варианта:

person oberstet    schedule 28.02.2015
comment
Мой вопрос действительно касается того, как поговорить с WebSocketServerFactory (чтобы добавить больше комнат, удалить комнаты) из сегмента Flask. Я смог поделиться ссылкой на WebSocketServerFactory при создании моего плана Flask, но мне было интересно, есть ли лучший способ. Тем не менее, вы правильно заметили, что используете блокирующий API. Я основывался на этом: github.com/ tavendo/AutobahnPython/blob/master/examples/twisted/ Следует ли переписать этот пример для использования Twisted Klein? - person Richard Bender; 28.02.2015
comment
Проблема не в том, чтобы получить ссылку на объект AutobahnPython из объекта Flask, а в том, что оба они живут в разных потоках. Причина, по которой Flask живет в пуле фоновых потоков, заключается в том, что он блокирует код. - person oberstet; 02.03.2015