На RCF Middleware Binary Size - PullRequest
       23

На RCF Middleware Binary Size

1 голос
/ 23 февраля 2011

RCF - это библиотека / инфраструктура для RPC и распределенного обмена сообщениями.Мне нравится инфраструктура RCF по следующим причинам

  1. в строке обслуживания - интерфейс - спецификация вызова rpc (т. Е. Нет отдельной компиляции IDL).
  2. Стиль дизайна C10K (уровни поверх)из окон IOCP или Boost ASIO).
  3. поддерживает оконные именованные каналы и доменные сокеты unix (я абсолютно не могу с этим согласиться).
  4. SSL.
  5. Парадигмы обмена сообщениями, двухсторонние, односторонние, клиентскиеобратный вызов, односторонний пакетный.
  6. поддержка буферов протокола (хотя я думаю, что я могу придерживаться встроенной сериализации).
  7. функция публикации / подписки.

Я использую 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 мегабайт.

Звонят сигнальные колокола;Я использую следующие три примера в качестве своих дворовых палочек:

  1. Boost :: ASIO: пример сервера 2, скомпилированный в версии выпуска с использованием bjam.Результирующий код с разделами: 176kb .
  2. nginx: очень сложный, очень настраиваемый, очень эффективный веб-сервер. 500 Кбайт с выделением .
  3. Минимальное промежуточное программное обеспечение, сконцентрированное на канале Trandsport, Zero MQ.libzmq 274k

Я написал свой собственный RPC / связующее ПО для производства, и я нахожусь на этапе, когда я думаю, что просто напишу еще один для удовлетворения своих потребностейРасслоение поверх Boost.Но я не хочу этого делать.Мне нравится дизайн RCF, он отвечает моим потребностям.Тем не менее, я не могу оправдать размер двоичных файлов простых программ, он не должен создавать такие массивные двоичные файлы.

У меня есть две основные проблемы.

  1. Качество кодапути для RPC.Я хочу низкую задержку.
  2. Рост двоичного кода по мере того, как я начинаю кодировать свое приложение вокруг него.

Разумное объяснение состоит в том, что библиотека не предназначена для модульности и создает экземплярывсе заранее.

["The Question"]

Я хотел бы получить отзывы от людей, которые разрабатывают системы обработки данных в реальном времени по моим вопросам.Не могли бы вы оправдать этот размер?

["/ Вопрос"]

Я бы рассмотрел альтернативы.ZMQ хорош, но имеет дополнительную зависимость, пропускает SSL, не предоставляет много примитивов промежуточного программного обеспечения и не предоставляет именованные каналы (мне нужно проверить процессы подключения, а именованные каналы имеют контексты безопасности)

1 Ответ

3 голосов
/ 24 февраля 2011

То, что делает ваша командная строка, статически компилирует RCF в исполняемые файлы сервера и клиента. Это делает процесс сборки простым, но также означает, что оба исполняемых файла несут свою собственную копию RCF. В RCF 1.3 содержится более 60000 строк кода, поэтому это определенно повлияет на размер исполняемого файла.

Вы можете встроить RCF в библиотеку DLL и вместо нее ссылаться на нее. Вам нужно будет определить RCF_BUILD_DLL при сборке DLL, иначе ничего не будет экспортировано.

Для приблизительного показателя в среде сборки Visual C ++ 2008, которая у меня есть, это приводит к 1,6 МБ DLL. В модуле импорта все равно останется некоторый код, так как код маршалинга RCF использует шаблоны, и шаблонный код должен быть встроен в заголовки, поэтому его нельзя экспортировать из DLL.

По вашим вопросам:

(1) RCF был спроектирован с самого начала с учетом малой задержки, а критический путь для удаленного вызова высоко оптимизирован. Например, вообще нет выделения памяти и нет копирования данных сообщения. Если вы беспокоитесь, вы можете написать простой клиент и сервер и посмотреть, сколько тысяч вызовов вы можете совершать в секунду (просто не забудьте использовать сборку релиза). Для получения дополнительной информации см. Раздел Performance в Руководстве пользователя

(2) Как и в случае с любой библиотекой, при ее встроении в приложение возникают некоторые дополнительные издержки. Но после этого не будет никаких «текущих» накладных расходов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...