当前位置:网站首页>Brpc understanding
Brpc understanding
2022-07-01 19:34:00 【lcyw】
We only have three user classes :Server、Channel and Controller, They correspond to each other server End ,client End and adjustment parameter set .
There is no need to deliberate, such as “Client How to initialize ”,“XXXManager What's the usage? ”,“Context and Controller What is the relationship of ” And so on
It's easy to do :
Build service #include <baidu/rpc/server.h>, And use... According to notes or examples server object
Access to the service is #include <baidu/rpc/channel.h>, And use... According to notes or examples Channel object
Want to control once RPC Parameters to access , Just look at it. baidu/rpc/controller.h What's in it . Please note that , This class is Server and Channel Public , It is divided into three paragraphs , They are marked as Client-side,Server-sdie and Both-side methods
One 、Channel
Channel Can be shared by all threads , You don't need to create separate for each thread Channel, There is no need to lock mutual exclusion . however Channel The creation and Init Not thread safe , Please make sure that Init After success, it will be accessed by multiple threads , Destruct after no thread access .
management client, Number of threads configured 、 To join or place in length brpc::ChannelOptions, Or through gflags Global configuration
Init The function is divided into connecting to a server or service cluster
1. Connect to a server
// options by NULL The default value int Init(EndPoint server_addr_and_port, const ChannelOptions* options);
int Init(const char* server_addr_and_port, const ChannelOptions* options);
int Init(const char* server_addr, int port, const ChannelOptions* options);
This kind of Init The connected servers often have fixed servers ip Address , There is no need for naming services and load balancing , It's relatively light to create .
However, do not frequently create domain names Channel. This requires a query dns, It may take up to 10 second ( Inquire about DNS The default timeout for )
2. Connect clusters
int Init(const char* naming_service_url,
const char* load_balancer_name,
const ChannelOptions* options);
This kind of Channel It is necessary to start from... On a regular basis naming_service_url Get the list of servers from the specified naming service , And pass load_balancer_name The specified load balancing algorithm selects a machine to send requests .
You shouldn't create this class dynamically before every request ( Connect to the service cluster )Channel. Because creating and destructing this kind of Channel Involve more resources , For example, you have to access the naming service once when creating ,
Otherwise, you don't know which servers are available . because Channel Can be shared by multiple threads , In general, there is no need to dynamically create .
client Set up
(1)brpc:ChannelOptions For initialization Channel
(2)brpc::Controller For a time RPC Medium coverage ChannelOptions Options in , It can be different each time according to the context
(3) overall situation gflags Used to adjust the behavior of some underlying code
Controller Characteristics :
One Controller Corresponding once RPC, There can only be one user , The default thread is unsafe .
Cannot be shared , Pointers cannot be shared
Founded in RPC Prior to the start , Deconstruction in RPC After that, there are two modes
a Sync RPC front Controller Put it on the stack , Self destruct after leaving the scope
b asynchronous RPC front new Controller, done Delete in
边栏推荐
- [6.24-7.1] review of wonderful technical blog posts in the writing community
- 241. Different Ways to Add Parentheses
- [pytorch record] automatic hybrid accuracy training torch cuda. amp
- 寶,運維100+服務器很頭疼怎麼辦?用行雲管家!
- ES6中的代理proxy
- uni-app微信小程序一键登录获取权限功能
- 直播HLS协议
- H264编码profile & level控制
- Flutter 实战-快速实现音视频通话应用
- MFC中如何重绘CListCtrl的表头
猜你喜欢
使用环信提供的uni-app Demo,快速实现一对一单聊
Witness the times! "The future of Renji collaboration has come" 2022 Hongji ecological partnership conference opens live broadcast reservation
Solidity - 算术运算的截断模式(unchecked)与检查模式(checked)- 0.8.0新特性
见证时代!“人玑协同 未来已来”2022弘玑生态伙伴大会开启直播预约
wireshark报文分析tcp,ftp
Methods of finding various limits
Case sharing: basic networking configuration of QinQ
sql查询去重统计的方法总结
音视频、编解码相关电子书、小工具,打包奉送!
原生js打造日程表-支持鼠标滚轮滚动选择月份-可以移植到任何框架中
随机推荐
【pytorch记录】模型的分布式训练DataParallel、DistributedDataParallel
MySQl的基本使用
【Go ~ 0到1 】 第五天 7月1 类型别名,自定义类型,接口,包与初始化函数
Chaos engineering platform chaosblade box new heavy release
Once the SQL is optimized, the database query speed is increased by 60 times
[pytorch record] automatic hybrid accuracy training torch cuda. amp
Introduction to relevant processes and functions of wechat official account development
Parallelism, concurrency and life cycle of threads
Use the uni app demo provided by Huanxin to quickly realize one-on-one chat
Solidity - truncated and checked modes of arithmetic operations - new features of 0.8.0
uni-app微信小程序一键登录获取权限功能
optaplanner学习笔记(一)案例Cloud balance
Learning records of building thingsboard, an Internet of things platform
[to.Net] C set class source code analysis
精耕渠道共謀發展 福昕攜手偉仕佳傑開展新產品培訓大會
学习笔记-JDBC连接数据库操作的步骤
论文阅读【Learning to Discretely Compose Reasoning Module Networks for Video Captioning】
uni-app商品分类
Reading the paper [learning to discretely compose reasoning module networks for video captioning]
XML syntax, constraints