当前位置: 首页 > news >正文

网站设计毕业设计任务书海口网站建设王道下拉棒

网站设计毕业设计任务书,海口网站建设王道下拉棒,软件技术大专出来都去干嘛了,动漫设计专升本可以考哪些学校前言 在crpc框架中#xff0c;brpc简直越用越爽#xff0c;平时工作中也常用到brpc#xff0c;一直没来得及总结#xff0c;抽空写点#xff0c;也供自己查阅用。下附几个常用学习地址#xff1a; brpc官网开源地址#xff1a; https://github.com/luozesong/brpc/blob…前言 在crpc框架中brpc简直越用越爽平时工作中也常用到brpc一直没来得及总结抽空写点也供自己查阅用。下附几个常用学习地址 brpc官网开源地址 https://github.com/luozesong/brpc/blob/master/docs/cn/redis_client.md protobuf官方文档 https://protobuf.dev/programming-guides/proto2/ brpc使用流程 1、定义proto 一般包含request、response、echoservice三种protoechoservice在里面会定义一个rpc(stub)桩函数proto编译器会生成一个与定义的stub接口同名的抽象接口在用户只需要继承echoservice实现自己的service类之后重写该stub函数即可。如果不定义自己的echoservice接口一些场景也可使用brpc内部已经定义好的service接口像nsheadservice用户直接继承该类实现自己的ProcessNsheadRequest()接口函数即可。 下面来看两种proto定义的例子 自定义rpc service # Tell protoc to generate base classes for C Service. modify to java_generic_services or py_generic_services for java or python. option cc_generic_services true;message EchoRequest {required string message 1; }; message EchoResponse {required string message 1; }; service EchoService {rpc Echo(EchoRequest) returns (EchoResponse); };上面我们在proto里面定义了EchoService服务我们在下面定义自己的MyEchoService继承该EchoService类重写proto自动编译生成的抽象接口Echo即可。 class MyEchoService : public EchoService { public:void Echo(::google::protobuf::RpcController* cntl_base,const ::example::EchoRequest* request,::example::EchoResponse* response,::google::protobuf::Closure* done) {// This RAII object calls done-Run() automatically at exit.brpc::ClosureGuard done_guard(done);brpc::Controller* cntl static_castbrpc::Controller*(cntl_base);// fill responseresponse-set_message(request-message());} };继承brpc内部service接口(以nshead为例) class Fw2NsheadService : public ::baidu::rpc::NsheadService { public:Fw2NsheadService(App* app);virtual ~Fw2NsheadService();void ProcessNsheadRequest(const baidu::rpc::Server server,baidu::rpc::Controller* cntl,const baidu::rpc::NsheadMessage request,baidu::rpc::NsheadMessage* response,baidu::rpc::NsheadClosure* done) {bus::log::LogClosureGuard done_guard(cntl, done);int ret HTTP_STATUS_SERVER_ERROR;if (cntl-Failed()) {LOG(FATAL) Controller Failed Before Process, Reason: cntl-ErrorText();BUS_SET_ERRNO(ret);return;}ret _app-Execute(request.body, response-body);BUS_SET_ERRNO(ret); }private:App* _app; };2、proto定义好之后需要实现生成的service接口上面已讲过 需实现自己的service响应函数。另外我们通常需要在自己的sevice函数中初始化一个done_guard或自己手动调用done-run(): brpc::ClosureGuard done_guard(done); done由框架创建递给服务回调包含了调用服务回调后的后续动作包括检查response正确性序列化打包发送等逻辑。done_guard就是为了保证退出服务自动调用释放资源。如果我们需要实现异步服务除了手动调用done-run()外还可以使用done_guard.release() 3、定义服务对象brpc::Server server; 默认构造后的Server不包含任何服务也不会对外提供服务仅仅是一个对象。 4、给服务对象添加服务实例 通过如下方法插入你的Service实例。 int AddService(google::protobuf::Service* service, ServiceOwnership ownership);若ownership参数为SERVER_OWNS_SERVICEServer在析构时会一并删除Service意味着我们自己定义的服务实例也会被删除如果还需要该service实例应设为SERVER_DOESNT_OWN_SERVICE。 插入MyEchoService代码如下 brpc::Server server; MyEchoService my_echo_service; if (server.AddService(my_echo_service, brpc::SERVER_DOESNT_OWN_SERVICE) ! 0) {LOG(FATAL) Fail to add my_echo_service;return -1; }5、启动服务 brpc::ServerOptions options; // 包含了默认值 options.xxx yyy; ... server.Start(..., options);start的接口有多种 int Start(const char* ip_and_port_str, const ServerOptions* opt); int Start(EndPoint ip_and_port, const ServerOptions* opt); int Start(int port, const ServerOptions* opt); int Start(const char *ip_str, PortRange port_range, const ServerOptions *opt); // r32009后增加options为NULL时所有参数取默认值。一个服务只能监听一个端口如果要监听多个端口需要起多个服务。 6、停止服务 server.Stop(closewait_ms); // closewait_ms实际无效出于历史原因未删 server.Join();Stop()不会阻塞Join()会。分成两个函数的原因在于当多个Server需要退出时可以先全部Stop再一起Join如果一个个Stop/Join可能得花费Server个数倍的等待时间。 不管closewait_ms是什么值server在退出时会等待所有正在被处理的请求完成同时对新请求立刻回复ELOGOFF错误以防止新请求加入。这么做的原因在于只要server退出时仍有处理线程运行就有访问到已释放内存的风险。如果你的server“退不掉”很有可能是由于某个检索线程没结束或忘记调用done了。 当client看到ELOGOFF时会跳过对应的server并在其他server上重试对应的请求。所以在一般情况下brpc总是“优雅退出”的重启或上线时几乎不会或只会丢失很少量的流量。 RunUntilAskedToQuit()函数可以在大部分情况下简化server的运转和停止代码。在server.Start后只需如下代码即会让server运行直到按到Ctrl-C。 // Wait until Ctrl-C is pressed, then Stop() and Join() the server. server.RunUntilAskedToQuit();// server已经停止了这里可以写释放资源的代码。Join()完成后可以修改其中的Service并重新Start。
http://www.dnsts.com.cn/news/272348.html

相关文章:

  • 青白江区建设局网站2345网址导航怎么样
  • 公司网站制作开发公司网页设计与制作基础教程
  • 淘宝客做动态广告的网站90平方设计
  • 南宁的网站建设网站建设做得好
  • 珠海市企业网站制作服务机构做网站表示时间的控件用哪个
  • 研学网站平台建设方案搜索引擎营销的概念
  • 网站建设结算系统长春比较有名的做网站建设
  • 个人网站设计说明广西住建领域培训考试系统
  • 企业网站源码生成器云上铺会员管理系统官网
  • 优秀公司网站优斗士做网站怎么样
  • 免费注册购物网站装修三维效果图软件
  • 企业网站建设公司有哪些自助贸易免费建站
  • 公司网站建设 阜阳重庆建设工程造价网官网
  • 建设网站赚钱的方法价目表海报app制作
  • 论坛网站开发模板2021给个手机直接能看的
  • 沈阳网站建设小志娄底建网站
  • 深圳网站优化计划wordpress讨论区插件
  • 食品网站建设风格山东济南公厕
  • 网站图片类型企业如何加强互联网网站建设
  • 网站设计与制作的过程怎样注册一个自己的网站
  • 免费网页奖励自己游戏网站搜索网站的方法
  • 红色大气网站建设银行网站设置密码
  • 青建设厅官方网站海省换域名影响网站不
  • 学校网站后台管理源码平面广告怎么设计
  • 石家庄视频网站建设公司东莞建站模板大全
  • 查询域名后缀网站拓者吧室内设计
  • 水泥制品做阿里巴巴还是网站好网站产品类别顺序如果修改
  • 查网站域名备案查询龙之向导外贸网站网址
  • 手机网站 多htmlcom网站注册域名
  • 怎么黑进网站后台企业网站建设费用入哪个科目