我正在寻找有关C++开发人员在C++中实现的RPC库的建议.
一些要求限制:
我的示例用法是在远程计算机上调用自由函数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场景是高效且适用的.
我也对可行的C++ RPC实现感兴趣.经过一些研究,我发现蚀刻,节约和协议缓冲是最有希望的解决方案,但它们都没有真正满足我的所有需求.我的搜索条件是:
候选人是:
Apache Etch
优点:
缺点
Apache Thrift
优点:
缺点:
协议缓冲区具有内部开发的RPC解决方案
优点:
缺点:
目前,我正在评估使用APR为Protobuf开发RPC层的可能性.
但是,搜索继续......
编辑:我设法通过使用带有protobuf的Apache Qpid(C++版本)进行序列化来解决其中的一些问题,尽管它目前缺少我需要的一些功能.
旧的,如DCE-RPC,CORBA,
或者像SOAP或REST那样的Web.
你想要哪一个取决于你想做什么.例如.快速高效的本地网络RPC需要像协议缓冲区这样的轻量级二进制RPC,但异构Web服务的RPC需要更冗长的SOAP.
Google将PB用于其所有内部RPC,因此它是一个不错的选择.Facebook使用Thrift,因此它不是一个小玩家,MS喜欢SOAP.
小智 2
查看 FastRPC,http://fastrpc.sourceforge.net/。