サーバーを C++ で作成する必要があり、その方法がわからない場合は、間違いなくフレームワークを使用する必要があります。
そこには多くの選択肢があり、StackOverflow はさまざまな選択肢について意見を求めるのに適した場所ではありません。ただし、1 つの例を挙げると、JsonRpc-Cpp
約 10 行のコードと、公開する各 RPC のボイラープレート行で JSON-RPC (生の TCP または HTTP 経由) サーバーを実装できます。サーバーをゼロから作成するよりもはるかに簡単です。
サーバーの例を次に示します。
#include <cstdlib>
#include <jsonrpc.h>
class Service {
public:
bool echo(const Json::Value &root, Json::Value &response) {
response["jsonrpc"] = "2.0";
response["id"] = root["id"];
Json::Value result;
result["params"] = root["params"];
response["result"] = result;
return response;
}
}
int main(int argc, char *argv[]) {
int port = std::atoi(argv[1]); // add some error handling here...
Json::Rpc::TcpServer server("127.0.0.1", port);
Service service;
server.AddMethod(new Json::Rpc::RpcMethod<Service>(service,
&Service::echo, "echo");
server.Bind(); // add error handling again
server.Listen();
while(true) server.WaitMessage(1000);
}
ただし、Python でサーバーを作成するか、WSGI Web サーバーを使用して Python でサービスを作成し、Python から C++ コードを呼び出すと、おそらくさらに簡単になります ( を介してctypes
、または Cython などでラッパーを構築することによって) SIP)。
を使用した Python の同じサーバーを次に示しますbjsonrpc
。
import bjsonrpc
class Service(bjsonrpc.handlers.BaseHandler):
def echo(self, *args):
return {'params': args}
server = bjsonrpc.createserver(handler_factory = Service)
server.serve()