木质家居 技术支持 东莞网站建设自适应式网站模板

web/2025/9/29 8:32:44/文章来源:
木质家居 技术支持 东莞网站建设,自适应式网站模板,公司网站建设需要注意什么,qq邮箱网页版RpcProvider#xff08;服务提供者#xff09;实现思路 上一节说到#xff0c;如何将一个本地服务发布成远程服务#xff0c;但没有说明一个rpc框架怎么进行调用的#xff0c;看看上节代码 #include iostream #include string #include user.pb.h…RpcProvider服务提供者实现思路 上一节说到如何将一个本地服务发布成远程服务但没有说明一个rpc框架怎么进行调用的看看上节代码 #include iostream #include string #include user.pb.h class UserService : public fixbug::UserServiceRpc //使用rpc服务发布端(rpc服务提供者) { public:bool Login(std::string name, std::string pwd){std::coutdoing local service : Login std::endl;std::cout name: name pwd : pwd std::endl;} /*** 重写基类UserServiceRpc的虚函数 下面这些方法都是框架直接调用的* caller Login(LoginRequest) transmit callee* callee Login(LoginRequest) 调用下述的Login方法* */void Login(::google::protobuf::RpcController* controller,const ::fixbug::LoginRequest* request,::fixbug::LoginResponse* response,::google::protobuf::Closure* done){//框架给业务上报了请求参数LoginRequest 应用获取相应数据做本地业务std::string name request-name();std::string pwd request-pwd();//本地业务bool res Login(name, pwd);//把响应写入 包括错误码、错误消息、返回值response-set_success(0);fixbug::ResultCode* rc response-mutable_result();rc-set_errcode(0);rc-set_errmsg();//执行回调操作 执行响应对象数据的序列化和网络发送由框架来完成done-Run();} };现在实现的发布服务方那么显然Login方法是rpc框架帮我们调用的什么时候调用当rpc客户端通过网络发送rpc调用请求之后这边接收到rpc请求解析请求然后调用发布的服务方法获取服务方法的响应在回传给rpc客户端即完成了一次远程rpc调用过程。 下面一一分析上面步骤的实现思路。 1、 首先RpcProvider肯定是一个服务器接收来自rpc客户端的请求且能在一定程度上承载高并发的需求(考虑多个rpcClient给当前rpcProvider发送rpc调用请求)。显而易见RpcProvider需要一个高性能的网络库来做这些任务那么可以考虑muduo网络库。 2、 网络库有了用什么消息格式–protobuf优势就不赘述了。 消息包含哪些内容一个rpcclient发送请求过来调用一个远程方法那么rpcProvider收到这个请求之后能根据请求所携带的数据自动调用发布的rpc方法那么请求必须包含服务名、方法名、以及参数这样rpcProvider才知道怎么调用。即buffer service_name method_name args。 由于使用的是protobuf二进制消息存储所以涉及到读取这几个参数的问题可以将buffer加个4字节(int不会超过4字节的head_sizehead_size表示service_name和method_name的长度这样可以先读取head_size在根据head_size读取service_namemethod_name。 最后读取args思考一个问题剩下的数据是不是都是args不一定考虑Tcp粘包的情况一次接收到2个rpc调用请求那么args也需要一个长度args_size来表示当前解析的rpc调用的参数长度。 因此这里借助protobuf定义一个消息格式即 message RpcHeader{bytes service_name 1;bytes method_name 2;uint32 args_size 3; }那么header_size表示是该消息的长度先读header_size在读RpcHeader所包含的字节流最后借助protobuf反序列化出这三个参数那么得到了service_name 、method_name 、args_size。在接着读取args_size长度的字符流数据得到args。最后通过protobuf定义的参数格式反序列化出request。最终所需要的参数都已经拿到了。 3、 那么如何通过上面得到的参数自动调用rpc服务首先得在本地存在这个远程服务前面提到rpc框架来调用Login方法那么 rpcProvider得预先对发布的 rpc方法做一下映射 。 struct ServiceInfo{google::protobuf::Service* m_service; //保存服务对象std::unordered_mapstd::string, const google::protobuf::MethodDescriptor* m_methodMap; //保存服务的所有方法的映射关系};//存储注册成功的服务对象和其服务方法std::unordered_mapstd::string, ServiceInfo m_serviceMap; // service_name --- ServiceInfo例如UserService存在Login 和 Register两个方法 由于UserService继承自UserServiceRpc 那么可以借助protobuf来实现这预先实现这个映射。具体如下 //框架提供给外部使用的可以发布rpc方法的函数接口 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; imethodCnt; i){//获取了服务对象指定下标的服务方法的描述抽象描述 UserService Loginconst 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});}RpcProvider可以借助这个方法注册一个rpc服务的站点这样由RpcClient发送过来的rpc调用请求通过muduo和protobuf解析得到上述几个参数之后即可通过映射表调用指定的rpc服务。 即 1、server_name, method_name, args parse(buffer); //解析参数 it m_serviceMap.find(service_name); method it-second.m_methodMap.find(method_name); request service-GetRequestPrototype(method).New(); 2、request-ParseFromString(args_str) //序列化请求参数 response service-GetResponsePrototype(method).New(); 3、service-CallMethod(method, nullptr ,request, response, done); //调用具体的rpc方法 ---- 4、最终调用LoginLogin(::google::protobuf::RpcController* controller,const ::fixbug::LoginRequest* request,::fixbug::LoginResponse* response,::google::protobuf::Closure* done) --- 5、回调 done()最后服务器调用完指定rpc方法后此时response已填入响应那么需要将respnse借助protobuf反序列化字节流数据再通过muduo网络库发回给rpcClient这就是done回调函数所做的事情。 即 void done(fd, response) {string response_str;if (response-SerializeToString(response_str)) //将响应进行序列化{//序列化成功后通过网络把rpc方法执行的结果发送给rpc的调用方fd-send(response_str);}fd-shutdown(); //模拟http的短链接服务 由rpcprovider主动断开连接以免占用资源 }到此RpcProvider基本实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站建设海报图片国外品牌vi设计

引言 数字化转型是当今商业领域中的关键议题,它不仅是技术的应用,更是一种战略性的变革,对企业而言具有重要意义。在这个数字化时代,企业需要不断适应和采纳新技术,以获得竞争优势并提高效率。 数字化转型旨在将传统业…

网站使用特殊字体陇西做网站的广告店

同步任务是指在多个线程之间协调执行的任务,其目的是确保多个任务按照一定的顺序和规则执行,例如使用锁来防止数据竞争。 同步任务的实现需要考虑多个线程之间的协作和同步,以确保数据的正确性和程序的正确执行。 由于TaskPool偏向于单个独…

网站商务方案平面设计的图

一、单选题(35题,每题2分) 1、(2分)【单选题】以下用于修改数据库字段名称的SQL语句是() A.RENAME B.CHANGE C.ALTER D.MODIFY 2、(2分)【单选题】若一棵二叉树的前序遍历为a,e, b, d. c,后序遍历为 b, …

网站技术制作流程图做网站好做吗

作者 | 何从庆转载自AI算法之心(ID:AIHeartForYou)笔者整理最近几年比较经典的深度文本分类方法,希望帮助小伙伴们了解深度学习在文本分类中的应用。Convolutional Neural Networks for Sentence Classification (EMNLP 2014)Kim在EMNLP2014提出的TextCNN方法&…

济宁网站定制公司备案的网站做跳转不影响备案把

目录 一、nginx是什么? 二、安装部署 1.下载 2.配置 3.代理Swagger服务 4.nginx命令 一、nginx是什么? 是用于 Web 服务、反向代理、内容缓存、负载均衡、媒体流传输等场景的开源软件。它最初是一款专为实现最高性能和稳定性而设计的 Web 服务器。…

陕西省建设厅执业资格注册中心网站网站建设管理流程

在传统合同签署的过程中,企业、组织、机构都面临着合同签署与管理的诸多问题和挑战:合同种类繁多、数量庞大导致起草效率低下;管理流程繁琐、权限分散使得审批周期冗长且效率低下;合同签订版本难以精准复核,风险防控更…

哈尔滨快速建站服务网站建设计划

创建用于初始化的非完全结构体非完全初始条件结构体为总线的部分元素提供初始值。如果您在仿真过程中使用非完全初始条件结构体,Simulink 将创建一个完全的初始条件结构体来表示总线的所有元素。对于非完全初始条件结构体没有显式指定值的每个元素,Simul…

体检网站源码哈尔滨网站建设那家好

我们在做项目的时候,应该给经常用到的文件配置它的别名,这样做,既可以方便引用,也可以防止当文件位置发生改变的时候出现错误。 配置前: import bartar from ../../components/bartar 配置后(不用再关心文件层级关系): import bar…

网站建设的知名公司装修流程先后顺序

Tree 让我们找满足一下五个条件的(x,y(x, y(x,y)点对有多少: x≠yx \neq yx​yxxx不是yyy的祖先yyy不是xxx的祖先dis(x,y)≤kdis(x, y)\leq kdis(x,y)≤kzzz是x,yx, yx,y的最近公共祖先,valuexvaluey2valuezvalue_x value_y 2value_zvaluex​valuey…

陕西中洋建设工程有限公司网站婚介网站开发

来源:中国信息产业网 近日,两家大数据领域的代表性企业Cloudera和Hortonworks宣布了它们相对平等的合并,宣称新公司将创建世界领先的下一代数据平台并提供业界首个企业数据云,这令很多人感到意外,大数据的未来何去何从…

自己电脑做网站服务器广域网访问怎么做网站推广怎么样

题目283:移动0 题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作 题解: func moveZeroes(num…

培训网站方案网页设计师需要学什么技能

文章目录 1、连接开发板与笔记本:2、配置笔记本的网络共享:3、配置开发板的网络设置:4、验证网络连接: 1、连接开发板与笔记本: 使用一根网线将开发板的Ethernet接口与笔记本的以太网口相连。 2、配置笔记本的网络共…

聊天网站模板网站一般需要怎么推广

论文概述 《AutoNeRF》是由Pierre Marza等人撰写的一篇研究论文,旨在通过自主智能体收集数据来训练隐式场景表示(如神经辐射场,NeRF)。传统的NeRF训练通常需要人为的数据收集,而AutoNeRF则提出了一种使用自主智能体高效…

响应式网站设计原理信息图表设计网站

Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation] 解决方法:Result类上加上Data注解

百度多久收录网站十大电子游戏平台网站

一、账号管理 按用户类型分配账号 目的:根据系统要求,设定不同账户和组,管理员、数据库 sa、审计用户、来宾用户等 实施方法: 打开本地用户和计算机管理器 ​ 1.打开运行,输入lusrmgr.msc 2.根据用户要求将账户加入…

湖南高端建设网站wordpress无法调用主题布局和图片

git配置远程仓库的认证信息 远程仓库的认证信息是什么?为何需要?如果不配置认证信息的话 配置认证信息的方式有哪些?用户名和密码Git 凭证助手(Credential Helper)SSH密钥认证使用主机认证信息的配置文件~/.netrc 远程…

没有面板的服务器怎么建设网站wordpress 小程序 插件

目录 一、推荐引擎和其检索技术 二、推荐引擎的整体架构和工作过程 (一)用户画像 (二)文章画像 (三)推荐算法召回 三、基于内容的召回 (一)召回算法 (二&#xf…

花生壳可以做网站吗wordpress当前分类名

程序中利用多级字典来存储三级菜单, 通过一系列while循环和for循环,实现了三级菜单的查询,选择,退回上级菜单,退出程序几个功能。缺点:程序语句过于重复,效率低。#-*-coding:utf-8-*-date{北京:…

做网站图片如何压缩图片泉州网站制作维护

目录 MAC帧协议 mac地址 以太网帧格式 ARP协议 ARP报文格式​编辑 RARP 其他的网络服务或者协议 DNS ICMP协议 ping traceroute NAT技术 代理服务器 网络层负责规划转发路线,而链路层负责在网络节点之间的转发,也就是"一跳"的具体传输…

南京市高淳县建设厅网站做网站的都改行做什么了

目录 树模型与集成学习 LightGBM 的贡献 LightGBM 的贡献:单边梯度抽样算法 LightGBM 的贡献:直方图算法 LightGBM 的贡献:互斥特征捆绑算法 LightGBM 的贡献:深度限制的 Leaf-wise 算法 树模型与集成学习 树模型是非常好的…