Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

RPC Frameworks based on NBlib

License

NotificationsYou must be signed in to change notification settings

Ninokz/NBRpc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NBRpc 是使用C++ 14 编写的基于Boos.Asio 异步 RPC 框架,通信数据传输用了自己简单在Boos.Asio上封装的网络库,端间采用json 进行requestresponse 传输,消息传输协议采用JSON-RPC 2.0 规范. 框架结构如下图

框架底层网络库采用BoostAsio 库,其支持多平台,理论上Nano Frameworks 框架也能在 Linux 上编译,只不过目前建立的是一个 Visual Studio 的工程,此外这个框架还支持异步日志、多种类型线程池选用等常见的功能。

BaseServer设计的核心部分主要是一个连接监听器acceptor和一个IOServicePool,前者用于监听连接请求构建session,将连接的socket部署到sessionio_context后再将io_context注册到后者中,后者IOServicePool本质上是一个线程池,只不过每个线程管理不同sessionio_context,并发处理不同io_context读写事件,RPCServer设计的核心部分主要是一个线程池用于执行RPCClient发起的远程调用请求。

Dependency.

Use Example.

注册服务:构建一个RpcServerStub::Pre 对象,只需要调用RpcServerStub::Pre 对象的registReturn 方法进行注册 RPC 服务,通过registReturn 方法的std::unordered_map 参数设定 RPC 所需的参数类型和名称;然后再定义 RPC 方法本身,通过定义符合std::function<void(Json::Value&, const RpcDoneCallback&)> 类型的可调用对象即可

运行服务:使用上述构建的RpcServerStub::Pre 对象,运行即可;在运行之前若需要输出控制台信息,调用InitLoggers()

请求服务:构建一个RpcClientStub::Ptr 对象,只需要调用RpcClientStub::Ptr 对象的rpcReturnCall 或者asyncRpcReturnCall 方法或者rpcNotifyCall 方法即可,只不过需要传入远端 IP 和 端口以及对应 RPC 参数;

示例 - HelloWorld Service

服务端注册服务

voidhelloworldReturnService(Json::Value& request,const Nano::Rpc::ProcedureDoneCallback& done) {Json::Value result ="Hello," + request["params"]["name"].asString() +"!";bool flag =false;Nano::JrpcProto::JsonRpcResponse::Ptr response =Nano::JrpcProto::JsonRpcResponseFactory::createResponseFromRequest(request, result, &flag);done(response->toJson());}voidRpcServerStubHelloWorldTest() {Nano::Rpc::RpcServerStub::Ptr rpcServerStub = std::make_shared<Nano::Rpc::RpcServerStub>(9800);std::unordered_map<std::string, Json::ValueType> paramsNameTypesMap = {  {"name", Json::ValueType::stringValue}};rpcServerStub->registReturn("helloworldMethod", paramsNameTypesMap, helloworldReturnService);rpcServerStub->run();system("pause");rpcServerStub->stop();}

客户端请求服务:

voidhelloworldCallback(Json::Value response) {};voidClientStubHelloWorldTest() {Nano::Rpc::RpcClientStub::Ptr rpcClientStub = std::make_shared<Nano::Rpc::RpcClientStub>();std::unordered_map<std::string, Json::Value> params = {  {"name","World"}};rpcClientStub->rpcReturnCall("127.0.0.1",9800,"1","helloworldMethod", params, helloworldCallback,3000);system("pause");}

Ref.

About

RPC Frameworks based on NBlib

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp