Я хочу разработать приложение на стороне сервера, которое будет предоставлять услуги через websocket, а также HTTP клиентам, использующим браузер и другие не браузерные клиенты.
Объем моей заявки охватывает следующее :
- Обеспечение веб-сокета и службы http через один порт t
- Обеспечить хороший механизм аутентификации (желательно, как JWT)
- Будет несколько операций RPC и несколько операций чтения / записи небольших файлов вместе с редкой загрузкой / загрузкой файлов.
- Нужно иметь паб / саб через websocket
- Приложению необходимо будет взаимодействовать с сервером Java, работающим на другом порту.
- Скорость и низкий объем памяти очень важны. (Макс. 60 МБ памяти потребление разрешено)
- клиентская нагрузка будет очень меньше (максимум 5 одновременно)
- Целевой версией будет python 3.5 +
Проблема, с которой я столкнулся, заключается в выборе правильной технологии для этого варианта использования.
Autobahn | Python имеет хороший веб-сокет для asyncio и витой, но с websocket & asyncio я не могу эффективно запустить http-службу также через тот же порт.
Autobahn | python wamp выглядит хорошо, но не существует хорошего примера для службы http, а главное - нет примера http с websocket для asyncio.
Автобан | python , скрученный с веб-сокетом и http (wsgi через скрипт rpy) - это единственное, что я мог бы заставить работать . Но поскольку чтение по сети искажено, оно раздутое и занимает много места в памяти, и большинство предложений говорят о том, что оно не подходит для простого веб-сервиса.
я благодарен @oberstet (автору автобана) за полезные примеры, которые я нашел :) до сих пор
посмотрел на aiohttp , но не нашел пример того, что мне нужно.
asyncio сам по себе не включает в себя сервер wsgi, который может работать через веб-сокеты с auth и pub / sub.
Я также искал другие варианты, но либо существует проблема асинхронной синхронизации, либо websocket / http, не предлагаемый на том же порту, либо pub / sun не поддерживается "из коробки".
Я надеялся, что некоторые эксперты по Python помогут мне выбрать правильную технологию фреймворка / сервера для этого. Или даже предложить комбинацию отдельных компонентов, которые могут помочь достичь этого. Я довольно плохо знаком с Python, но прочитал кое-что хорошее об этом.