Уведомления

Группа в Telegram: @pythonsu

#1 Май 27, 2014 13:24:24

andrew.spb
Зарегистрирован: 2014-05-27
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Каркас асинхронного сервера

Помогите спроектировать каркас приложения.
Уже месяц сижу, что-то не получается сделать. Читаю Лутца.
Отдельно все понятно, воедино соединить во что-то крисивое никак не выходит.
Не понимаю, как лучше это разбивать на пакеты, что использовать, процессы или потоки, как лучше организовать между ними взаимодействие. Искал примеры похожих серверов, но что-то не нашел. Одни банальные эхо серверы кругом.
Python 3

Описание будущего приложения:
Это сервер сообщений. Сообщения хранятся в СУБД. Сервер обрабатывает подключения клиентов, раздавая положенную им почту, по самодельному протоколу. Сервера сообщений будут взаимодействовать между собой (маршрутизация сообщений).
Что сейчас хочу от каркаса:
* Приложение должно работать как линукс-демон (демонизация не сложно делается, поэтому можно и без этого, если это не меняет ничего принципиального).
* Должна иметься система плагинов
* Два плагина журналирования (в файл и в СУБД). Соотвественно любой модуль, должен иметь возможность писать в этот журнал.
* Два плагина конфигурации (опции приложения из файла конфигурации или из СУБД). Аналогично, конфигурация должна быть доступна из любого места приложения.
* Просмотр и редактирование конфигурации сервера через веб-интерфейс (это на перспективу), планирую делать через HTTPServer и собственную обработку запросов.
* Должен запускаться сокет-сервер (главная часть приложения), принимать подключения (передавать ничего не нужно), просто соединения открывать/закрывать
* Формат взаимодействия с клиентами тоже хочется оформить как плагин

Только начал изучать питон, после прочтения трех книжек в голове образовалась каша из всего.
Буду рад любой помощи и советам. Может примерам.

Офлайн

#2 Май 27, 2014 15:59:34

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Каркас асинхронного сервера

Рекоменду урезать функционал и написать что-то простое и работающее. Затем уже добавлять требования и расширять систему (или даже с нуля переписать).

Сделайте это для начала: Это сервер сообщений. Сообщения хранятся в СУБД. Сервер обрабатывает подключения клиентов, раздавая положенную им почту, по самодельному протоколу. Сервера сообщений будут взаимодействовать между собой (маршрутизация сообщений)

Что такое плагин в вашем понимании я не знаю, но если можно, лучше от них вообще отказаться :)

Офлайн

#3 Май 27, 2014 16:10:42

andrew.spb
Зарегистрирован: 2014-05-27
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Каркас асинхронного сервера

lorien
Рекоменду урезать функционал и написать что-то простое и работающее.
Вот это простое работающее я и назвал каркасом. Это и есть минимальный функционал.
Затем уже добавлять требования и расширять систему (или даже с нуля переписать).Сделайте это для начала: Это сервер сообщений. Сообщения хранятся в СУБД. Сервер обрабатывает подключения клиентов, раздавая положенную им почту, по самодельному протоколу. Сервера сообщений будут взаимодействовать между собой (маршрутизация сообщений)
Проблема собственно и есть не в написании отдельных модулей, а в их взаимодействии в целом.
Например, даже если начать с простого, банальная система журналирования, каким образом ее сделать?
Если в потоке (или процессе) обрабатывающем подключение, надо записать что-то в лог (“клиент подключился”).
Как это сделать? Через queue?

Что такое плагин в вашем понимании я не знаю, но если можно, лучше от них вообще отказаться
Плагин - это некий модуль, который можно положить в директорию, который будет обнаружен приложением и использован. Возможно, в питоне это и не совсем актуально (идея перекочевала из qt-проекта) и тут используется какой-то другой подход.
Пример, плагины для разных протоколов. Добавив новый плагин, сервер может работать по новому протоколу.

Отредактировано andrew.spb (Май 27, 2014 16:11:29)

Офлайн

#4 Май 27, 2014 18:15:18

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Каркас асинхронного сервера

andrew.spb
Только начал изучать питон, после прочтения трех книжек в голове образовалась каша из всего.

andrew.spb
Каркас асинхронного сервера

Эммм…

Забыл написать. Гляньте в сторону Торнадо. Там уже много чего сделано за Вас. Может подойдет?

Отредактировано 4kpt_II (Май 27, 2014 18:18:12)

Офлайн

#5 Май 27, 2014 18:46:19

andrew.spb
Зарегистрирован: 2014-05-27
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Каркас асинхронного сервера

4kpt_II
Подойдет, и Twisted подойдет, и другие похожие фреймворки.
Проблема в том, что я не могу их использовать, поскольку ограничен только стандартными возможностями Python 3.2
А это сторонние пакеты, я не могу их взять, к сожалению

Офлайн

#6 Май 27, 2014 18:50:52

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Каркас асинхронного сервера

Тогда у Вас тяжелый и тернистый путь. Асинхронка сама по себе сложна. А если пилить все с нуля, тогда вообще хардкор. Могу пожелать только удачи и выдержки.

Если бы у меня стояла такая задача. Я бы смотрел в сторону Торнадо. Как у них там все это реализовано. Тем более, что вся информация доступна и нормально отсортирована и логично упакована. И, мне кажеться, одними средствами питона это будет реализовать очень и очень сложно…

Отредактировано 4kpt_II (Май 27, 2014 18:56:31)

Офлайн

#7 Май 27, 2014 22:39:13

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Каркас асинхронного сервера

andrew.spb
ограничен только стандартными возможностями Python 3.2

Странное ограничение. Бери Python 3.4, там в коробке есть asyncio



Офлайн

#8 Май 27, 2014 23:14:28

andrew.spb
Зарегистрирован: 2014-05-27
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Каркас асинхронного сервера

Budulianin
Я неспроста указал версию питона.

Офлайн

#9 Май 28, 2014 08:58:35

mgk
Зарегистрирован: 2014-05-27
Сообщения: 9
Репутация: +  1  -
Профиль   Отправить e-mail  

Каркас асинхронного сервера

Без использования сторонних библиотек на python 3.2 чистый асинхронный сервер реализовать очень трудоёмко.
Как вариант, можешь реализовать псевдоасинхронный сервер, в котором цикл постановки/обработки задач функционирует также, как в асинхронном сервере, но выполнение блокирующих задач (обращение к БД, ожидание ответа по сети и т.д.) происходит в потоках.

Офлайн

#10 Май 28, 2014 10:11:04

andrew.spb
Зарегистрирован: 2014-05-27
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Каркас асинхронного сервера

mgk
Без использования сторонних библиотек на python 3.2 чистый асинхронный сервер реализовать очень трудоёмко.
А если 2.7? А что вообще значит чистый асинхронный сервер?
mgk
Как вариант, можешь реализовать псевдоасинхронный сервер, в котором цикл постановки/обработки задач функционирует также, как в асинхронном сервере, но выполнение блокирующих задач (обращение к БД, ожидание ответа по сети и т.д.) происходит в потоках.
Вообще я так и планировал, сетевые соединения в отдельных потоках, БД тоже отдельным потоком. Связь через queue.

А вообще имеет ли смысл делать такой сервер на питоне? Может вернуться на qt?

Отредактировано andrew.spb (Май 28, 2014 10:11:58)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version