C++ RPC库建议

13 c++ rpc rmi

我正在寻找有关C++开发人员在C++中实现的RPC库的建议.

一些要求限制:

  • 应该适用于linux/unix和win32系统
  • 能够执行自由函数和类方法
  • 希望用现代C++编写而不是90年代/ java-esque C++
  • 能够通过网络和hetrogenous体系结构运行
  • 不太慢或效率低
  • 希望为TR1风格的std :: function等提供接口.

我的示例用法是在远程计算机上调用自由函数foo.

---snip---
// foo translation unit
int foo(int i, int j)
{
   return i + j;
}
---snip---


---snip---
// client side main
int main()
{
   //register foo on client and server
   //setup necassary connections and states

   int result;

   if (RPCmechanism.invoke("foo",4,9,result))
      std::cout << "foo(4,9) = " result << std::endl;
   else
      std::cout << "failed to invoke foo(4,9)!" << std::endl;

   return 0;
}
---snip---
Run Code Online (Sandbox Code Playgroud)

能达到上述或类似效果的东西会很棒.

注意:我对其他语言绑定不感兴趣.请不要提供解决方案,因为它有其他语言绑定.我只对用C++编写的用于C++语言的精心设计的RPC框架感兴趣,这些框架对于HPC场景是高效且适用的.

sdg*_*sdg 8

这是一系列要求......

虽然没有满足所有这些(因为我不确定任何这样的野兽存在 - 我推荐你注意来自ZeroC的ICE.部分由CORBA成名的Michi Henning开发(并且问你在电信的朋友,这真的不是一个肮脏的词),ICE是CORBA看起来的样子,如果它以后开始并且不是由委员会开发的.

他们的C++映射是CORBA不是的一切,它使用STL类型,并且通常是更新的感觉.

它没有通过自由函数和std :: function测试,但考虑到为整个列表找到产品的不可能性,这对其余的很多都做得很好.

祝好运


npc*_*diu 7

我也对可行的C++ RPC实现感兴趣.经过一些研究,我发现蚀刻,节约和协议缓冲是最有希望的解决方案,但它们都没有真正满足我的所有需求.我的搜索条件是:

  1. 多语言,必须使用C++和PHP(C#,Java,Python,Perl现在不是那么重要)
  2. 服务器可以编译/只运行在Linux上(与Windows作为一个长期目标)
  3. 客户端必须在Windows和Linux(可能还有Mac)上运行
  4. 开源和商业友好(即没有GPL)
  5. 它必须支持开箱即用的加密

候选人是:

  1. Apache Etch

    优点:

    • C绑定基于APR
    • 支持加密
    • 在两个平台上运行

    缺点

    • 发展缓慢
    • 缺少PHP绑定
  2. Apache Thrift

    优点:

    • 多语言绑定

    缺点:

    • 目前,它不支持加密(正在开发中,至少对于C++绑定而言)
    • 在Windows上,它需要Cygwin
  3. 协议缓冲区具有内部开发的RPC解决方案

    优点:

    • 多语言绑定

    缺点:

    • 没有内置的RPC

目前,我正在评估使用APR为Protobuf开发RPC层的可能性.

但是,搜索继续......

编辑:我设法通过使用带有protobuf的Apache Qpid(C++版本)进行序列化来解决其中的一些问题,尽管它目前缺少我需要的一些功能.


gbj*_*anb 5

旧的,如DCE-RPC,CORBA,

协议缓冲区,或Thrift,Etch,

或者像SOAP或REST那样的Web.

你想要哪一个取决于你想做什么.例如.快速高效的本地网络RPC需要像协议缓冲区这样的轻量级二进制RPC,但异构Web服务的RPC需要更冗长的SOAP.

Google将PB用于其所有内部RPC,因此它是一个不错的选择.Facebook使用Thrift,因此它不是一个小玩家,MS喜欢SOAP.

  • Protobuffers是一个消息序列化,SOAP是一个COM等价物,REST是一个与C++,tr1 std :: functions等无关的web2.0主义...... (3认同)

小智 2

查看 FastRPC,http://fastrpc.sourceforge.net/

  • 我看了一下,C++ API 似乎没有建议可以调用免费或类方法,看起来更像是一个类似 ProtoBuffers 的库。例如,假设我有一个函数 foo,例如 int foo(int i, int j) { return i+j} - 如何向服务器实体注册 foo,然后如何从客户端调用服务器上的 foo参数 4 和 9 ? (2认同)