分布式网络通信框架(七)——RpcProvider发布服务方法

介绍

RpcProvider,利用muduo库的来实现数据的收发,利用protobuf来实现数据的序列化(发送前)和反序列化(接收后)

发布服务主要在NotifyService 实现,重点在于生成一张表,记录服务对象和其发布的所有服务方法

struct ServiceInfo
{
    
    
    google::protobuf::Service *m_service; // 保存服务对象的地址
    std::unordered_map<std::string, const google::protobuf::MethodDescriptor*> m_methodMap; // 保存服务方法映射<方法名, 方法描述符指针>
};
 // 存储注册成功的 服务对象 和 其服务的所有信息
std::unordered_map<std::string, ServiceInfo> m_serviceMap;

NotifyService 函数实现代码

void RpcProvider::NotifyService(google::protobuf::Service *service)
{
    
    
    ServiceInfo service_info;
    // 获取服务对象的描述信息
    const google::protobuf::ServiceDescriptor *pserviceDesc = service->GetDescriptor();
    // 获取服务的名字
    std::string service_name = pserviceDesc->name();
    // 获取服务对象service的方法数量
    int methodCnt = pserviceDesc->method_count();
    std::cout << "service_name:" << service_name << std::endl;

    for(int i = 0; i < methodCnt; ++i)
    {
    
    
        // 获取了服务对象指定下标的服务方法的描述符指针
        const google::protobuf::MethodDescriptor *pmethodDesc = pserviceDesc->method(i);
        std::string method_name = pmethodDesc->name();
        // 将方法映射关系添加到对应服务对象的方法表中
        service_info.m_methodMap.insert({
    
    method_name, pmethodDesc});
        std::cout << "method_name:" << method_name << std::endl;
    }

    service_info.m_service = service;
    m_serviceMap.insert({
    
    service_name, service_info});
}

猜你喜欢

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