当前位置:网站首页>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
边栏推荐
- GetMessage底层机制分析
- Dom4j parsing XML, XPath retrieving XML
- axure不显示元件库
- [to.Net] C set class source code analysis
- Go Language Advanced
- Chinese and English instructions human soluble advanced glycation end products receptor (sRAGE) ELISA Kit
- MySQL common graphics management tools | dark horse programmers
- Bao, que se passe - t - il si le serveur 100 + O & M a mal à la tête? Utilisez le majordome xingyun!
- Solution of intelligent supply chain management platform in aquatic industry: support the digitalization of enterprise supply chain and improve enterprise management efficiency
- 【sql优化】with as 和 临时表的区别
猜你喜欢

Task: denial of service DOS

商业智能BI开发和报表开发有什么本质区别?

任务:拒绝服务DoS

Shell高级进阶

What must be done in graduation season before going to Shanhai

XML syntax, constraints

ubuntu14安装MySQL并配置root账户本地与远程访问
![pickle. Load error [attributeerror: can't get attribute 'volatile' on < module '\u main']](/img/98/c4df0747856eda262b82942eedad8f.png)
pickle. Load error [attributeerror: can't get attribute 'volatile' on < module '\u main']

ECS summer money saving secret, this time @ old users come and take it away

音视频、编解码相关电子书、小工具,打包奉送!
随机推荐
axure不显示元件库
Learn MySQL from scratch - database and data table operations
研究了11种实时聊天软件,我发现都具备这些功能…
Shell高级进阶
Intensive cultivation of channels for joint development Fuxin and Weishi Jiajie held a new product training conference
English语法_形容词/副词3级 -注意事项
EasyGBS网络不稳定情况下重复请求视频拉流问题的优化
【pytorch记录】模型的分布式训练DataParallel、DistributedDataParallel
白盒加密技术浅理解
DTD建模
简版拼多多商品数据
Transform + ASM data
[pytorch record] distributed training dataparallel and distributeddataparallel of the model
线程的并行、并发、生命周期
Team up to learn! 14 days of Hongmeng equipment development "learning, practicing and testing" practical camp, free of charge!
Extensive reading of the paper [film: visual reasoning with a general condition layer]
见证时代!“人玑协同 未来已来”2022弘玑生态伙伴大会开启直播预约
Use the uni app demo provided by Huanxin to quickly realize one-on-one chat
nacos启动失败问题解决与总结
Nacos configuration file publishing failed, please check whether the parameters are correct solution