分布式网络通信框架(四)——本地服务发布成RPC服务

简介

通过这个例子,目的在于了解RPC框架在服务提供方server/callee)的使用,从而更好理解实现代码
本项目的完整源代码在 https://github.com/StrikeCode/mprpc.git

流程

首先是在 mprpc/example/user.proto 指定对应的rpc方法和相关的返回值和参数类型,生成对应的c++文件

syntax = "proto3";

package fixbug;

option cc_generic_services = true;

message ResultCode
{
    int32 errcode = 1;
    bytes errmsg = 2;
}

// 定义登录消息类型
message LoginRequest
{
    bytes name = 1; // =1 代表name是这个message第一个字段,不是指name的值
    bytes pwd = 2;
}

// 定义登录响应消息
message LoginResponse
{
    ResultCode result = 1;
    bool success = 2;
}

service UserServiceRpc
{
    rpc Login(LoginRequest) returns(LoginResponse);
}

其次在mprpc/example/callee/userservice.cc 实现业务代码,并重写框架提供的虚函数

#include <iostream>
#include <string>
#include "user.pb.h"

// UserService 是一个本地服务,提供了两个进程内的本地方法Login和GetFriendLists
class UserService : fixbug::UserServiceRpc // 使用在rpc服务的发布端(rpc服务提供者)
{
    
    
public:
    bool Login(std::string name, std::string pwd)
    {
    
    
        std::cout << "doing local service:Login" << std::endl;
        std::cout << "name:" << name << " pwd:"<< pwd << std::endl;
    }
    // 这是在使用角度分析RPC的功能
    // 重写基类 UserServiceRpc的虚函数
    // 1. caller(client) ==> Login(LoginRequest) => muduo => callee(server)
    // 2. callee(server) ==> Login(LoginRequest) => 转发到重写的Login方法上(如下)
    void Login(::google::protobuf::RpcController* controller,
                       const ::fixbug::LoginRequest* request,
                       ::fixbug::LoginResponse* response,
                       ::google::protobuf::Closure* done)
    {
    
    
        // 1.框架给业务上报了请求参数LoginRequest,应用获取相应数据做本地业务
        std::string name = request->name();
        std::string pwd = request->pwd();

        // 2.做业务
        bool login_result = Login(name, pwd);

        // 3.把响应写入
        fixbug::ResultCode *code = response->mutable_result();
        code->set_errcode(0);
        code->set_errmsg("");
        response->set_success(login_result);

        // 4.做回调操作,执行响应对象数据的序列化和网络发送(都是由框架完成)
        done->Run();
    }
};

猜你喜欢

转载自blog.csdn.net/qq_42120843/article/details/130916547