用于进程间调用的任何好的和简单的RPC库?

And*_*hko 52 c++ rpc interprocess

我需要使用内置C++类型的参数从客户端进程向服务器进程发送(可能是一个)简单的单向命令(因此序列化非常简单).C++,Windows XP +.

我正在寻找一个不需要复杂配置的库,提供简单的界面,不需要数小时的学习时间,也没有商业使用限制.解决简单问题的简单方法.

Boost.Interprocess对于这个简单的任务来说太低级了,因为它不提供RPC接口.套接字也可能是一种过度杀伤,因为我不需要在机器之间进行通信.关于DCOM,CORBA等人也是如此.命名管道?从未使用过它们,WinAPI上的任何好库?的openmpi?

Tim*_*ter 17

我不认为插座真的有点过分.替代方案都有自己的问题,并且套接字比命名管道,共享内存等更好地支持,因为几乎每个人都在使用它们.本地系统上的套接字速度可能不是问题.

有Apache Thrift:

http://incubator.apache.org/thrift/

作为编组机制,有一些RPC实现包含在Google的protobuf库中:

https://github.com/google/protobuf/blob/master/docs/third_party.md#rpc-implementations

有XML-RPC:

http://xmlrpc-c.sourceforge.net/

如果您的消息非常简单,我可能会考虑使用UDP数据包,然后没有可以管理的连接.


Imb*_*dir 9

你可能喜欢ZeroMQ这样的东西.也许不是一个完整的RPC,可以用作生成RPC的原始字节消息传递框架.它简单,轻便,性能出众.您可以轻松地在其上实现RPC.以下是手册中的示例服务器:

//
//  Hello World server in C++
//  Binds REP socket to tcp://*:5555
//  Expects "Hello" from client, replies with "World"
//
#include <zmq.hpp>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

int main () {
    //  Prepare our context and socket
    zmq::context_t context (1);
    zmq::socket_t socket (context, ZMQ_REP);
    socket.bind ("tcp://*:5555");

    while (true) {
        zmq::message_t request;

        //  Wait for next request from client
        socket.recv (&request);
        printf ("Received Hello");

        //  Do some 'work'
        sleep (1);

        //  Send reply back to client
        zmq::message_t reply (5);
        memcpy ((void *) reply.data (), "World", 5);
        socket.send (reply);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此示例使用tcp://*.5555,但如果您使用以下命令,则使用更高效的IPC技术:

socket.bind("ipc://route.to.ipc");
Run Code Online (Sandbox Code Playgroud)

甚至更快的线程间协议:

socket.bind("inproc://path.for.client.to.connect");
Run Code Online (Sandbox Code Playgroud)

  • 那不是RPC. (3认同)
  • 并且似乎从C到C++中途停留了一半 (2认同)

dal*_*lle 6

如果你只需要支持Windows我会使用Windows内置的RPC,我写了两篇关于这个的介绍性文章:

http://www.codeproject.com/KB/IP/r​​pcintro1.aspx
http://www.codeproject.com/KB/IP/r​​pcintro2.aspx

ncalrpc如果您只需要本地进程间通信,则可以使用该协议.

  • MSRPC源自DCE/RPC,同时在BSD许可下发布.这两个可以一起工作,请参阅http://msdn.microsoft.com/en-us/library/aa230583%28v=vs.60%29.aspx (2认同)

log*_*og0 5

Boost.MPI.简单,快速,可扩展.

#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <iostream>
#include <sstream>
namespace mpi = boost::mpi;

int main(int argc, char* argv[]) 
{
  mpi::environment env(argc, argv);
  mpi::communicator world;

  std::stringstream ss;
  ss << "Hello, I am process " << world.rank() << " of " << world.size() << ".";

  world.send(1, 0, ss.str());
}
Run Code Online (Sandbox Code Playgroud)