Python-сервер для аппаратного контроля (возможно, с Twisted?) - PullRequest
3 голосов
/ 28 апреля 2011

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

Моя первоначальная идея состояла в том, чтобы написать собственный протокол для обработки связи, но после размышлений о том, как обрабатывать фрагментацию TCP и кодирование данных, я наткнулся на Twisted, и похоже, что большая часть работы уже выполнена, если яиспользуйте перспективный брокер для обмена данными и вызова методов сервера напрямую от клиентов.Это решение могло бы быть немного излишним, но для меня это казалось очевидным, что вы думаете?

Моя главная проблема прошла, когда я подумал о клиентах.В основном мне нужны два типа клиентов: один, который просто отображает длины волн (это должно быть прямо), а второй, который может изменять настройки устройства и получать обратную связь при его изменении.Моя идея состояла в том, чтобы создать единого клиента, способного на оба варианта, но мысль о том, чтобы объединить его с нашей предыдущей системой, заставила меня задуматься ... Второй клиент должен управляться из уже довольно сложной среды Python, которая управляет большим количеством независимого оборудования с относительно строгимВ этом последовательном коде должны быть вызваны временные требования и настройки измерителя длины волны.Теперь дело в том, как мне смешать это с клиентом Twisted?Как я понимаю, Twisted не является потокобезопасным, поэтому я не могу просто создать новый поток, на котором запущен реактор, и затем взаимодействовать с ним из моего основного потока, могу ли я?

Любые предложения по написанию этой инфраструктуры сервера / клиента черезприветствуются другие средства, чем Twisted!

Спасибо

Ответы [ 2 ]

4 голосов
/ 28 апреля 2011

Вы можете запустить реактор в выделенном потоке, а затем вызвать его с помощью blockingCallFromThread из существующего «последовательного» кода.

Также я бы порекомендовал AMP для протокола, а не PB, поскольку AMP в большей степени поддается гетерогенным средам ( см. Amp-protocol.net для получения информации о независимых протоколах ), и, похоже, у вас есть значительное количестводругие технологии, которые вы, возможно, захотите интегрировать с этой системой.

0 голосов
/ 15 февраля 2012

Вы пробовали zeromq ?

Это библиотека, которая упрощает работу с сокетами.Он может работать по протоколу TCP и реализует несколько топологий, таких как издатель / подписчик (для широковещательных данных, таких как показания лазера) и запрос / ответ (которые вы можете использовать для своей схемы управления).на нескольких языках и сайт полон примеров.Кроме того, это удивительно быстро.

Хорошие вещи.

...