RpcProvider发送Rpc服务一

OnMessage函数用于处理连接到服务端的请求,接收到的buffer数据通过protobuf进行反序列化为rpcreader类,从而得到服务类和服务方法的名字。

在此期间为了防止出现,粘包问题,在buffer中以此格式存放数据:"11helloworld4mess",通过读取前四个字节来获取头部的长度为11字节。然后取前11个字节的数据,进行反序列化得到相应的值。再根据序列化的值会得到4从而得到最后"mess"。

cpp 复制代码
void RpcProvider::OnMessage(const muduo::net::TcpConnectionPtr &conn, 
                            muduo::net::Buffer *buffer, 
                            muduo::Timestamp)
{
    // 网络上接收的远程rpc调用请求的字符流    Login args
    std::string recv_buf = buffer->retrieveAllAsString();

    // 从字符流中读取前4个字节的内容
    uint32_t header_size = 0;
    recv_buf.copy((char*)&header_size, 4, 0);

    // 根据header_size读取数据头的原始字符流,反序列化数据,得到rpc请求的详细信息
    std::string rpc_header_str = recv_buf.substr(4, header_size);
    mprpc::RpcHeader rpcHeader;
    std::string service_name;
    std::string method_name;
    uint32_t args_size;
    if (rpcHeader.ParseFromString(rpc_header_str))
    {
        // 数据头反序列化成功
        service_name = rpcHeader.service_name();
        method_name = rpcHeader.method_name();
        args_size = rpcHeader.args_size();
    }
    else
    {
        // 数据头反序列化失败
        std::cout << "rpc_header_str:" << rpc_header_str << " parse error!" << std::endl;
        return;
    }

    // 获取rpc方法参数的字符流数据
    std::string args_str = recv_buf.substr(4 + header_size, args_size);

    // 打印调试信息
    std::cout << "============================================" << std::endl;
    std::cout << "header_size: " << header_size << std::endl; 
    std::cout << "rpc_header_str: " << rpc_header_str << std::endl; 
    std::cout << "service_name: " << service_name << std::endl; 
    std::cout << "method_name: " << method_name << std::endl; 
    std::cout << "args_str: " << args_str << std::endl; 
    std::cout << "============================================" << std::endl;
相关推荐
DARLING Zero two♡14 小时前
【计算机网络】简学深悟启示录:http
网络协议·计算机网络·http
Yu_Lijing15 小时前
《图解HTTP》笔记与读后感(上)
网络·笔记·网络协议·http
北京耐用通信15 小时前
耐达讯自动化 Profibus 光纤链路模块:破解变频器通信难题,助力物流自动化升级
人工智能·物联网·网络协议·自动化·信息与通信
开开心心_Every17 小时前
家长控制电脑软件:定时锁屏管理使用时长
网络协议·tcp/ip·游戏·微信·pdf·excel·语音识别
weixin_4307509318 小时前
堡垒机jumpserver的部署与应用
运维·网络·网络协议·jumpserver
看今朝·18 小时前
MCP协议与HTTP接口区别
网络·网络协议·http·mcp
全球优质代理IP19 小时前
【动态住宅 IP 助力广告跑量】 出海广告跑不起来怎么办?
网络·网络协议·tcp/ip
彬匠科技BinJiang_tech19 小时前
定制化跨境电商ERP哪家排名性价比高
rpc
REDcker19 小时前
TCP 连接池技术调研
网络协议·tcp/ip·oracle