2010-09-03 2 views
4

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

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

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

+0

«один источник данных»! = «Может управлять несколькими приборами» – katrielalex

+0

В моих целях это не имеет значения, поскольку каждый потребитель будет рассматривать все данные в целом. Вроде бы, если вы настроили ничто не кластер RDMBS, это все равно единственный источник данных. – Novikov

ответ

4

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

+0

сельдерей выглядит как решение высокого уровня, моя проблема, спасибо много :) – Novikov

Смежные вопросы