史上最便捷的RPC框架

史上最便捷的RPC框架

这是史上最便捷的RPC框架,无须定义中间结构文件,只需要再服务代码写好后,对供远程访问的函数进行注册,即可通过自解释生成客户端的stub文件。

源码地址:https://gitee.com/lingluonianhua/zeroRpc.git

第一步:定义rpc业务实现类

class TestRpc
{
public:
	//Rpc框架初始化函数
	static void OpcodeInit()
	{
		//Rpc 服务定义, 用于触发将该类加入到rpc框架中进行初始化
		RPC_SERVER_DEF(TestRpc);
		//Rpc接口定义
		RPC_BIND(&TestRpc::GetTotalScore);
		RPC_BIND(&TestRpc::Login);
	}

	std::map<std::string, int> GetTotalScore(std::map<std::string, std::map<std::string, int>> mapVal)
	{
		std::map<std::string, int> Score;
		......
		return Score;
	}

	bool Login(std::string& strUser, std::string& strPwd)
	{
		return strUser == "admin" && strPwd == "admin123";
	}	
};

第二部、main函数中加入客户端stub自动生成代码

int main(int argc, char* argv[])
{
	RpcInit();

	if (argc == 3 && std::string(argv[1]) == "GenerateStub")
	{
		std::string strPath = argv[2];
		std::cout << "开始生成客户端stub文件, 路径:" << strPath << std::endl;
		//生成客户端stub代码
		CStubGenerateAgent::get_instance().GenerateStubFile(strPath);
		return 0;
	}
}

第三部、现在可以开始写客户端代码

//定义Rpc网络通道
	CRpcChannelPtr pChannel(new MsgRpcChannel);
	TestRpc_Stub stub(pChannel);
	std::map<std::string, std::map<std::string, int>> score;
	score["张三"].emplace("语文", 99);
	score["张三"].emplace("数学", 120);
	score["李四"].emplace("语文", 108);
	score["李四"].emplace("数学", 112);
	//调用服务端函数
	auto ret = stub.GetTotalScore(score);
	if (ret.Code() == RPC_SUCCESS)
	{
		auto val = std::move(ret.GetVal());
		for (auto item : val)
		{
			std::cout << item.first << ":" << item.second << std::endl;
		}
	}

四、rpc服务

auto resPkg = CRpcDispatchAgent::get_instance().Dispatch(strPkg);

注:目前暂未实现网络层的数据传输。

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 史上最便捷的RPC框架