More than code

More Than Code
The efficiency of your iteration of reading, practicing and thinking decides your understanding of the world.
  1. 首页
  2. 未分类
  3. 正文

brpc-14 Channel

2022年6月14日 441点热度 0人点赞 0条评论

Channel

这一次看看channel

20220614112832

之前我就画过这个图。channel的作用就是从client向server发送请求。核心方法就是CallMethod。

然后请求到server的时候会被event dispatcher拿出来,然后调用Process,即切割数据并处理。

20220614135921

因为brpc是基于protobuf这个框架的,所以他的channel base是继承自protobuf的RpcChannel

Weight表示的是权重。不同类型的channel有不用的权重

而protobuf的RpcChannel的定义则更为简单

20220614140123

通过上面的注释我们也可以看出来是怎么使用的。method是调用的参数。request和response分别是参数和返回值

20220614141020

初始化会调用到InitSingle

在InitChannelOptions中根据选项去初始化一些参数。比如以前提到过的连接类型。确定Rpc协议

这有一个ComputeChannelSignature,应该是根据选项去生成一个唯一的signature。然后后续我们会把他和server_addr_and_port组合在一起,插入到socket map中

然后看一下核心的函数CallMethod

20220614143352

Controller中包含了选项以及额外的数据。如果done非空的话,done->Run会在请求结束后执行,否则请求则会被阻塞直到请求结束。对应了异步调用和同步调用

20220614145109

有几个要看的点

一个是controller里的call id,用来同步用的,等下我们会看到

20220614145233

还有一个是设置访问的方式。设置single server的server address以及server id。以及设置load balancer

然后通过serialize request进行序列化。把请求根据协议序列化到buffer中

20220614145446

最后通过IssueRPC来发起请求。

如果没有回调的话,就会通过Join来等待Rpc结束。否则的话就会直接返回,然后在请求返回的时候调用done->Run

看一下他的超时机制

20220614150753

如果有backup request的话,就会在backup request timer超时的时候调用HandleBackupRequest

如果有超时机制的话,就会调用HandleTimeout

20220614151512

这里会通过bthread_id_error调用处理函数。具体来说就是在call id这里

20220614151807

这里有handle socket failed

20220614151858

然后在下面的OnVersionedRPCReturned中,他会判断如果error code。并重新发起请求

标签: 暂无
最后更新:2022年6月14日

sheep

think again

点赞
< 上一篇
下一篇 >

文章评论

取消回复

COPYRIGHT © 2021 heavensheep.xyz. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS