RCF - это библиотека / инфраструктура для RPC и распределенного обмена сообщениями.Мне нравится инфраструктура RCF по следующим причинам
- в строке обслуживания - интерфейс - спецификация вызова rpc (т. Е. Нет отдельной компиляции IDL).
- Стиль дизайна C10K (уровни поверх)из окон IOCP или Boost ASIO).
- поддерживает оконные именованные каналы и доменные сокеты unix (я абсолютно не могу с этим согласиться).
- SSL.
- Парадигмы обмена сообщениями, двухсторонние, односторонние, клиентскиеобратный вызов, односторонний пакетный.
- поддержка буферов протокола (хотя я думаю, что я могу придерживаться встроенной сериализации).
- функция публикации / подписки.
Я использую GCC 4.4.3 на 64-битной Ubuntu установить.Я скомпилировал тривиальный код сервера и клиента, используя следующую строку в подкаталоге demo дистрибутива.
g++ -O3 -DRCF_USE_BOOST_ASIO Client.cpp ../src/RCF/RCF.cpp -I ../../Boost/ -I ../include/ -lpthread ../../Boost/lib/libboost_system.a -s
Полученные двоичные файлы клиента и сервера колеблются от 1,7 до 2,2 мегабайт.
Звонят сигнальные колокола;Я использую следующие три примера в качестве своих дворовых палочек:
- Boost :: ASIO: пример сервера 2, скомпилированный в версии выпуска с использованием bjam.Результирующий код с разделами: 176kb .
- nginx: очень сложный, очень настраиваемый, очень эффективный веб-сервер. 500 Кбайт с выделением .
- Минимальное промежуточное программное обеспечение, сконцентрированное на канале Trandsport, Zero MQ.libzmq 274k
Я написал свой собственный RPC / связующее ПО для производства, и я нахожусь на этапе, когда я думаю, что просто напишу еще один для удовлетворения своих потребностейРасслоение поверх Boost.Но я не хочу этого делать.Мне нравится дизайн RCF, он отвечает моим потребностям.Тем не менее, я не могу оправдать размер двоичных файлов простых программ, он не должен создавать такие массивные двоичные файлы.
У меня есть две основные проблемы.
- Качество кодапути для RPC.Я хочу низкую задержку.
- Рост двоичного кода по мере того, как я начинаю кодировать свое приложение вокруг него.
Разумное объяснение состоит в том, что библиотека не предназначена для модульности и создает экземплярывсе заранее.
["The Question"]
Я хотел бы получить отзывы от людей, которые разрабатывают системы обработки данных в реальном времени по моим вопросам.Не могли бы вы оправдать этот размер?
["/ Вопрос"]
Я бы рассмотрел альтернативы.ZMQ хорош, но имеет дополнительную зависимость, пропускает SSL, не предоставляет много примитивов промежуточного программного обеспечения и не предоставляет именованные каналы (мне нужно проверить процессы подключения, а именованные каналы имеют контексты безопасности)