Форум сайта python.su
0
Помогите спроектировать каркас приложения.
Уже месяц сижу, что-то не получается сделать. Читаю Лутца.
Отдельно все понятно, воедино соединить во что-то крисивое никак не выходит.
Не понимаю, как лучше это разбивать на пакеты, что использовать, процессы или потоки, как лучше организовать между ними взаимодействие. Искал примеры похожих серверов, но что-то не нашел. Одни банальные эхо серверы кругом.
Python 3
Описание будущего приложения:
Это сервер сообщений. Сообщения хранятся в СУБД. Сервер обрабатывает подключения клиентов, раздавая положенную им почту, по самодельному протоколу. Сервера сообщений будут взаимодействовать между собой (маршрутизация сообщений).
Что сейчас хочу от каркаса:
* Приложение должно работать как линукс-демон (демонизация не сложно делается, поэтому можно и без этого, если это не меняет ничего принципиального).
* Должна иметься система плагинов
* Два плагина журналирования (в файл и в СУБД). Соотвественно любой модуль, должен иметь возможность писать в этот журнал.
* Два плагина конфигурации (опции приложения из файла конфигурации или из СУБД). Аналогично, конфигурация должна быть доступна из любого места приложения.
* Просмотр и редактирование конфигурации сервера через веб-интерфейс (это на перспективу), планирую делать через HTTPServer и собственную обработку запросов.
* Должен запускаться сокет-сервер (главная часть приложения), принимать подключения (передавать ничего не нужно), просто соединения открывать/закрывать
* Формат взаимодействия с клиентами тоже хочется оформить как плагин
Только начал изучать питон, после прочтения трех книжек в голове образовалась каша из всего.
Буду рад любой помощи и советам. Может примерам.
Офлайн
Рекоменду урезать функционал и написать что-то простое и работающее. Затем уже добавлять требования и расширять систему (или даже с нуля переписать).
Сделайте это для начала: Это сервер сообщений. Сообщения хранятся в СУБД. Сервер обрабатывает подключения клиентов, раздавая положенную им почту, по самодельному протоколу. Сервера сообщений будут взаимодействовать между собой (маршрутизация сообщений)
Что такое плагин в вашем понимании я не знаю, но если можно, лучше от них вообще отказаться :)
Офлайн
0
lorienВот это простое работающее я и назвал каркасом. Это и есть минимальный функционал.
Рекоменду урезать функционал и написать что-то простое и работающее.
Затем уже добавлять требования и расширять систему (или даже с нуля переписать).Сделайте это для начала: Это сервер сообщений. Сообщения хранятся в СУБД. Сервер обрабатывает подключения клиентов, раздавая положенную им почту, по самодельному протоколу. Сервера сообщений будут взаимодействовать между собой (маршрутизация сообщений)Проблема собственно и есть не в написании отдельных модулей, а в их взаимодействии в целом.
Что такое плагин в вашем понимании я не знаю, но если можно, лучше от них вообще отказатьсяПлагин - это некий модуль, который можно положить в директорию, который будет обнаружен приложением и использован. Возможно, в питоне это и не совсем актуально (идея перекочевала из qt-проекта) и тут используется какой-то другой подход.
Отредактировано andrew.spb (Май 27, 2014 16:11:29)
Офлайн
58
andrew.spb
Только начал изучать питон, после прочтения трех книжек в голове образовалась каша из всего.
andrew.spb
Каркас асинхронного сервера
Отредактировано 4kpt_II (Май 27, 2014 18:18:12)
Офлайн
0
4kpt_IIПодойдет, и Twisted подойдет, и другие похожие фреймворки.
Офлайн
58
Тогда у Вас тяжелый и тернистый путь. Асинхронка сама по себе сложна. А если пилить все с нуля, тогда вообще хардкор. Могу пожелать только удачи и выдержки.
Если бы у меня стояла такая задача. Я бы смотрел в сторону Торнадо. Как у них там все это реализовано. Тем более, что вся информация доступна и нормально отсортирована и логично упакована. И, мне кажеться, одними средствами питона это будет реализовать очень и очень сложно…
Отредактировано 4kpt_II (Май 27, 2014 18:56:31)
Офлайн
33
andrew.spb
ограничен только стандартными возможностями Python 3.2
Офлайн
0
BudulianinЯ неспроста указал версию питона.
Офлайн
1
Без использования сторонних библиотек на python 3.2 чистый асинхронный сервер реализовать очень трудоёмко.
Как вариант, можешь реализовать псевдоасинхронный сервер, в котором цикл постановки/обработки задач функционирует также, как в асинхронном сервере, но выполнение блокирующих задач (обращение к БД, ожидание ответа по сети и т.д.) происходит в потоках.
Офлайн
0
mgkА если 2.7? А что вообще значит чистый асинхронный сервер?
Без использования сторонних библиотек на python 3.2 чистый асинхронный сервер реализовать очень трудоёмко.
mgkВообще я так и планировал, сетевые соединения в отдельных потоках, БД тоже отдельным потоком. Связь через queue.
Как вариант, можешь реализовать псевдоасинхронный сервер, в котором цикл постановки/обработки задач функционирует также, как в асинхронном сервере, но выполнение блокирующих задач (обращение к БД, ожидание ответа по сети и т.д.) происходит в потоках.
Отредактировано andrew.spb (Май 28, 2014 10:11:58)
Офлайн