Исходник доступен в репозитории sources-ownport. Мне очень нравится код, длина которого не превышает 100-200 строк, но который при своем небольшом размере, является законченными, функциональным приложением. Такой код легко поддерживать, легко вспомнить спустя время как же он все-таки работает :)
Сервер крайне прост. Клиент делает GET или POST запрос на сервер и получает результат в JSON формате. Логика строится на основании списка шаблонов, представленных в виде регулярных выражений и соответствующим им функциям. Определяется по аналогии с django переменной url_patterns. Важный момент: для передачи переменных в функцию необходимо использовать именованные переменные (?P<var_name>).
Например:
url_patterns = ( (r'/(?P<object_type>)/get/(?P<object_id>)/', get_object), )
В приведенном примере, для запрашиваемого URL http://localhost:8080/person/get/123/ будет вызвана функция get_object и переданы переменные в виде словаря { 'object_type': 'person', 'object_id': '123' }
Все функции должны возвращать словарь значений, так как сервер обрабатывает этот словарь и возвращает результат клиенту в json формате.
Одной из причин, кроме простоты, почему я написал этот сервер, была необходимость в использовании нескольких потоков или процессов при обработке функций. Выбор режима работы сервера определяется с помощью передачи параметра server_type при вызове сервера, например:
appserver.run_server(port=8081,server_type=appserver.THREADED_SERVER)
Переменная server_type может приниматься в настоящий момент два значения: THREADED_SERVER для использования потоков и FORKED_SERVER для использования процессов
Следует предостеречь, что у данного сервера совершенно нет защиты от внешнего воздействия. Т.е. доступ к данным сервера могут получить все, кто может сделать хотя бы пинг на этот хост. Поэтому его следует запускать только в доверительных сетях.
В своем следующем посте я приведу пример реально работающего приложения на базе этого сервера - TQueueSrv (Очередь задач). Это маленький сервис выполняющий функции аналогичные Queue из стандартной библиотеки python, только с возможностью получать доступ к задачам через сеть, позволяя тем самым разнести задачи многопоточности между несколькими хостами.



исходный код сервера приложений перенесен в директорию servers репозитория http://code.google.com/p/sources-ownport/source/browse/parallel/servers/appserver.py
ОтветитьУдалить