четверг, 16 октября 2014 г.

[prog.c++] Нужна помощь зала: по поводу демо-проекта для SObjectizer-а...

Я несколько раз говорил, что SObjectizer-у нужен хороший демо-проект, на котором можно было бы показать, как с помощью SObjectizer разрабатывать что-то более-менее серьезное. Теперь наступило время перейти от слов к делу. Но к какому делу? Вот это вопрос...

Лично мне было бы интересно покопаться в теме Data Distribution Service. По многим причинам, включая и ностальгические, т.к. история самого SObjectizer как раз начинается с темы сбора информации для АСУТП. Но с DDS засада в том, что в DDS входят, по сути, две спецификации. Первая касается протокола передачи данных (DDSI-RTPS), сделать ее реализацию на SObjectizer, в принципе, можно, хотя это отнимет порядочно времени и сил. Но есть и вторая спецификация -- отображение DDS в конкретный язык программирования, в C++03 и C++11 в частности. И это самое важное: стандарт DDS описывает не только то, как данные летают по сети, но и как с DDS работать в коде, на уровне жестко специфицированного API. Селать реализацию этого API, основываясь на SObjectizer, или, напротив, пытаться натянуть SObjectizer поверх DDS API, конечно же можно, но... Я лично не понимаю, зачем. Попытаться сделать собственный продукт, предоставляющий еще одну реализацию DDS? Эта цель понятна. Но она выходит далеко за рамки демо для SObjectizer-а.

Можно было бы взяться за MQTT. Но серверных и клиентских реализаций этого протокола уже и так как собак не резанных. Хотя... Вот если в какой-нибудь из них обнаружится некий фатальный недостаток... Тогда можно было бы эту тему рассмотреть внимательнее, благо там очень простой протокол, работа с которым не требует никаких дополнительных инструментов.

Еще была идея сделать AMQP-клиента и с его помощью показать, как посредством MQ-шных сервисов делать распределенные приложения на SObjectizer. Но, в принципе, я останусь при той же самой проблеме: ну а что показывать в качестве примера распределенного приложения? Какое подобие прикладной задачи реализовать, чтобы людям было интересно заглянуть вовнутрь?

Поэтому сейчас в качестве рабочего варианта рассматривается реализация на SObjectizer очень простенького MQ-шного сервера для протокола STOMP. С одной стороны, там не должно быть слишком много работы по поддержке самого протокола (хотя придется воспользоваться чем-то вроде Ragel-я). С другой стороны, на агентную модель такое приложение должно лечь вполне хорошо: работа с сетью посредством Asio (или libuv), обслуживание клиентов и, может быть, очередей, в виде SObjectizer-овских агентов. Кроме того, в списке имеющихся серверов чего-нибудь маленького и нативного для STOMP-а нет. Поэтому мало ли что, вдруг кому-то минималистичный и шустрый STOMP-сервер и для работы пригодиться.

Но прежде, чем браться за работу, хочу спросить у своих читателей. А может у кого-то из вас есть какая-то задача, которую вы решали сами или с реализацией которой вы сталкивались, и для которой вам бы хотелось увидеть аналог на С++ных агентах в SObjectizer-е? Или может есть какая-то реализация какой-то задачи, в которой есть фатальный недостаток: сложный и запутанный код, затрудняющий поддержку или развитие; слишком большое количество внешних зависимостей; слишком большое потребление ресурсов; неадекватное поведение в каких-то ситуациях и т.д., и т.п.?

В общем, если у кого-то есть насущные проблемы, решение которых посредством SObjectizer-а вам бы хотелось видеть, то не сочтите за труд, поделитесь в комментариях или в личку на eao197 на gmail через точку com.

А то очень уж не хочется заниматься воплощением в жизнь абстрактных коней в вакууме.

PS. На хорошую реализацию нормального демо-проекта я готов потратить 2-3 месяца работы для первого публичного релиза (включая не только код, но тесты, примеры, документацию и пр.) Лицензия для кода будет, скорее всего, GPL, но это можно обсуждать.

Комментариев нет: