Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 关于RCF中间件的二进制大小_C++_Gcc_Compilation_Real Time_Middleware - Fatal编程技术网

C++ 关于RCF中间件的二进制大小

C++ 关于RCF中间件的二进制大小,c++,gcc,compilation,real-time,middleware,C++,Gcc,Compilation,Real Time,Middleware,是RPC和分布式消息传递的库/框架。我喜欢RCF框架,原因如下 在线服务-接口-rpc调用规范(即,没有单独编译IDL) C10K设计风格(windows IOCP或boost ASIO上的层) 支持windows命名管道和unix域套接字(我绝对不能在这方面妥协) SSL 消息传递范例,双向,单向,客户端回调,单向批处理 协议缓冲区支持(我认为我可以坚持使用内置的序列化) 发布/订阅功能 我在64位ubuntu安装上使用GCC4.4.3。我使用发行版的demo子目录中的以下行编译普通服务器和客

是RPC和分布式消息传递的库/框架。我喜欢RCF框架,原因如下

  • 在线服务-接口-rpc调用规范(即,没有单独编译IDL)
  • C10K设计风格(windows IOCP或boost ASIO上的层)
  • 支持windows命名管道和unix域套接字(我绝对不能在这方面妥协)
  • SSL
  • 消息传递范例,双向,单向,客户端回调,单向批处理
  • 协议缓冲区支持(我认为我可以坚持使用内置的序列化)
  • 发布/订阅功能
  • 我在64位ubuntu安装上使用GCC4.4.3。我使用发行版的demo子目录中的以下行编译普通服务器和客户机代码

    g++-O3-DRCF\u使用BOOST\u ASIO Client.cpp../src/RCF/RCF.cpp-I../。/BOOST/-I../include/-lpthread../。/BOOST/lib/libboost\u system.a-s

    生成的客户端和服务器二进制文件在1.7到2.2兆字节之间波动

    警钟敲响,;我用以下三个例子来说明我的院子:

  • Boost::ASIO:Server2示例使用bjam在发行版中编译。结果代码剥离后为176kb
  • nginx:一个高度复杂、非常可配置、非常高效的web服务器500kb剥离
  • TransdPort以通道为中心的最小中间件解决方案Zero MQ。libzmq274k
  • 我已经编写了自己的生产RPC/中间件,我正在进入一个阶段,我想我将只编写另一个来满足我的需要,在Boost之上分层。但我不想这样做。我喜欢RCF的设计,它满足了我的需求。然而,我不能证明简单程序的二进制大小是合理的,它不应该产生如此庞大的二进制文件

    我有两个主要关切

  • rpc的代码路径的质量。我想要低延迟
  • 当我开始围绕二进制文件编写应用程序时,二进制文件的增长
  • 一个合理的解释是,该库不是为模块化而设计的,而是预先实例化了所有内容

    [“问题”]

    我想从设计实时数据处理系统的人那里得到一些关于我所关心问题的反馈。你能解释一下这个尺寸吗

    [“/问题”]


    我会考虑其他选择。ZMQ很好,但它是一种传统的依赖性,缺少SSL,不提供很多中间件原语,也不提供命名管道(我需要验证连接进程,命名管道有安全上下文)

    您的命令行所做的是静态地将RCF编译到服务器和客户端可执行文件中。这使得构建过程变得简单,但也意味着两个可执行文件都携带着自己的RCF副本。RCF 1.3中有超过60000行代码,因此它肯定会影响可执行文件的大小

    您可以将RCF构建到DLL中,并改为链接到它。您需要在构建DLL时定义RCF_BUILD_DLL,否则将不导出任何内容

    一个大概的数字,在Visual C++ 2008构建环境中,这将产生1.6 MB的DLL。由于RCF的封送处理代码使用模板,且模板化代码需要内联在头文件中,因此无法从DLL导出,因此导入模块中仍会有一些代码

    关于你的关切:

    (1) RCF从一开始就考虑到低延迟,远程呼叫的关键路径得到了高度优化。例如,根本没有内存分配,也没有消息数据的复制。如果您担心,您可以编写一个简单的客户机和服务器,看看您每秒可以进行多少次调用(请记住使用发布版本)。有关更多信息,请查看中的部分


    (2) 与任何库一样,当您将其构建到应用程序中时,都会有一些前期开销。但是在那之后就不会有任何“持续”的开销了。

    你在RCF邮件列表/论坛/维基上问过吗?这似乎是一个非常有趣的库,但并不广为人知。。。顺便说一句,尝试剥离exe,我不确定-s是否剥离存档…RCF在google代码上有一个项目,但该项目尚未更新到最新版本,因此我猜该项目处于脱机状态(项目上也没有google组)。公司网站上似乎也没有任何指向任何讨论媒体的链接。代码项目有一个评论小节,它会收到很多回复。然而,SO将从其他人那里吸引一些不错的答案。我已经给作者发了邮件,所以他可能会加入:D。在我开始向g++添加
    -s
    之前,我已经手动删除了二进制文件。好的。真正奇怪的是,除了asio,您还没有LIB!这应该是RCF.cpp,这意味着包括大标准库。。。真奇怪。。。我对答案感兴趣。顺便说一句,这似乎是一个伟大的解放。下次我会考虑不要自己写:祝你好运!