当前位置:网站首页>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
边栏推荐
- 求各种极限的方法
- Detailed explanation of JUnit unit test framework
- optaplanner学习笔记(一)案例Cloud balance
- 从零开始学 MySQL —数据库和数据表操作
- 精耕渠道共謀發展 福昕攜手偉仕佳傑開展新產品培訓大會
- Bao, que se passe - t - il si le serveur 100 + O & M a mal à la tête? Utilisez le majordome xingyun!
- DTD建模
- [pytorch record] automatic hybrid accuracy training torch cuda. amp
- Solidity - 合约结构 - 错误(error)- ^0.8.4版本新增
- 【pytorch记录】自动混合精度训练 torch.cuda.amp
猜你喜欢

Dlib+opencv library for fatigue detection

How to solve the problem of splash screen when the main and sub code streams of easygbs are h.265?

Solidity - 合约结构 - 错误(error)- ^0.8.4版本新增

研究了11种实时聊天软件,我发现都具备这些功能…

智慧防疫系统为建筑工地复工复产提供安全保障

Junit单元测试框架详解

云服务器ECS夏日省钱秘籍,这次@老用户快来领走

Case sharing: basic networking configuration of QinQ

为什么一定要从DevOps走向BizDevOps?

任务:拒绝服务DoS
随机推荐
Shell高级进阶
论文阅读【Learning to Discretely Compose Reasoning Module Networks for Video Captioning】
Dlib+opencv library for fatigue detection
【Go ~ 0到1 】 第五天 7月1 类型别名,自定义类型,接口,包与初始化函数
The intelligent epidemic prevention system provides safety guarantee for the resumption of work and production at the construction site
Solution and summary of Nacos startup failure
论文阅读【Discriminative Latent Semantic Graph for Video Captioning】
English grammar_ Adjective / adverb Level 3 - precautions
[go ~ 0 to 1] day 5 July 1 type alias, custom type, interface, package and initialization function
What must be done in graduation season before going to Shanhai
Parallelism, concurrency and life cycle of threads
Contos 7 set up SFTP to create users, user groups, and delete users
EasyGBS主子码流都为H.265时,切换出现花屏如何解决?
ECS summer money saving secret, this time @ old users come and take it away
Learning records of building thingsboard, an Internet of things platform
论文泛读【FiLM: Visual Reasoning with a General Conditioning Layer】
Introduction to relevant processes and functions of wechat official account development
事务隔离级别 gap锁 死锁
Methods of finding various limits
Werewolf killing strategy: do you think I'm easy to cheat? Who do we believe!