Шаблон проектирования для нескольких потребителей и единого источника данных - PullRequest
4 голосов
/ 04 сентября 2010

Я разрабатываю веб-интерфейс для определенного аппаратного устройства, которое предоставляет собственный настраиваемый API.Указанный веб-интерфейс может управлять несколькими устройствами одновременно.Данные извлекаются из устройства посредством опроса с помощью пользовательского API, поэтому было бы предпочтительно сделать его асинхронным.

Самая очевидная вещь - это иметь поток опроса, который опрашивает данные, сохраняет в одноэлементном процессе всего процесса с семафорами, а затем потоки веб-сервера извлекают данные из указанного синглтона и показывают их.Я не большой поклонник синглетонов или сшитых друг с другом конструкций, поэтому я подумал о том, чтобы отделить источник данных poller от веб-сервера, вернуть его обратно на локальный интерфейс и использовать что-то вроде XML-RPC для потребления данных.

Приложение не обязательно должно быть «корпоративным» или масштабируемым на самом деле, так как оно будет доступно максимум нескольким пользователям одновременно, но я бы предпочел сделать его устойчивым, не смешивая два вида логики.В Python есть текущая реализация с использованием CherryPy, и это самая большая путаница ужасного дизайна, которую я когда-либо видел.Я чувствую, что, если я выберу самый очевидный дизайн, я просто переверну то же самое ужасное по-своему.

1 Ответ

4 голосов
/ 04 сентября 2010

Если вы используете Django и celery , вы можете создать проект Django в качестве веб-интерфейса и задание сельдерея, которое будет выполняться в фоновом режиме и в опросе.В этой работе вы можете импортировать свои модели Django, чтобы можно было очень просто сохранить результаты опроса.

...