如果你必须用 C++ 编写服务器,而你不知道如何去做,那么你肯定想要使用框架。
那里有很多选择,而 StackOverflow 不是就不同选择征求意见的好地方。但是给你一个例子,JsonRpc-Cpp
让你用大约 10 行代码实现一个 JSON-RPC(通过原始 TCP 或 HTTP)服务器,加上你想要公开的每个 RPC 的一行样板文件。比从头开始编写服务器要容易得多。
因此,这是一个示例服务器:
#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 或啜)。
这是 Python 中使用的同一台服务器bjsonrpc
:
import bjsonrpc
class Service(bjsonrpc.handlers.BaseHandler):
def echo(self, *args):
return {'params': args}
server = bjsonrpc.createserver(handler_factory = Service)
server.serve()