代码编织梦想

介绍

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});
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42120843/article/details/130916789

【设计模式与范式:创建型】43 | 单例模式(下):如何设计实现一个集群环境下的分布式单例模式?-爱代码爱编程

上两节课中,我们针对单例模式,讲解了单例的应用场景、几种常见的代码实现和存在的问题,并粗略给出了替换单例模式的方法,比如工厂模式、IOC 容器。今天,我们再进一步扩展延伸一下,一块讨论一下下面这几个问题: 如何理解单例模式

redis三种模式——主从复制、哨兵模式、集群-爱代码爱编程

目录 一、Redis模式二、Redis主从复制2.1 主从复制概述2.2 主从复制2.3 Redis主从复制过程2.4 搭建Redis主从复制2.4-1 环境部署2.4-2 安装Redis2.4-3 修改 Re

kafka基础介绍-爱代码爱编程

目录 前言: 一:kafka架构 1.kafka基础架构  2、kafka多副本架构 二、kafka基础概念 1、produce 2. Consumer 3、Broker ​ 4、Topic 5、Partition  6、Replicas  7、Offset  8、 AR 9、 ISR 10、OSR 11、HW  12、L

由浅入深dubbo核心源码剖析环境介绍_dubbo运行环境-爱代码爱编程

目录 1 框架介绍1.1 概述1.2 运行架构1.3 整体设计 2 环境搭建2.1 源码拉取2.2 源码结构2.3 环境导入2.4 测试2.5 管理控制台 1 框架介绍 1.1