brpc - channel如何实现高效稳定的远程通信?

2026-04-12 02:132阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计487个文字,预计阅读时间需要2分钟。

brpc - channel如何实现高效稳定的远程通信?

介绍:是向server发送数据的通信方式。主要包含两个类:

1.ChannelOptions

2.Channel

3.Controller是Channel的友元类。

Init函数,用于指定server和ChannelOption。一般会使用protobuf定义一个Service,使用Service_S。

介绍

是向server发送数据的通道。 主要有两个类, 1 ChannelOptions 2 Channel 3 Controller是Channel的友元类。

Init函数,用于指定server和ChannelOption。 一般会使用protobuf定义一个Service,使用Service_Stub进行rpc调用,需要传递 controller,request,response,done 这四个参数。

发送

channel的主要参数就这些, 超时时间,重试次数,协议类型,连接类型等等。

CallMethod 函数

函数声明如图

brpc - channel如何实现高效稳定的远程通信?

可以为cntl指定单独的参数,如不同的发送请求可能有不同的超时时间,但是复用同一个channel。 在这个函数里,

首先,根据ChannelOptions,为cntl==设置参数==。注意超时时间并未在这里根据channel设置,后续再看。

然后==构建 call_id==

==bthread_id_lock_and_reset_range== 这个调用是做什么还不太清楚。 cntl如果复用,那么使用之前要调用reset(); 没reset,会导致上面这步失败。

如果上面加锁成功了,则可以给cntl 设置标记: cntl->==set_used_by_rpc==();

然后是==span==的设置,这个是记录一些统计信息,和builtin-service相关的。

然后就是其它**==参数*==的设置,如*==超时时间==**等。

然后就是 ==序列化==,userCode的判断, ==两个计时器==(超时倒计时..),

最后就是调用IssueRPC 了。

未完待续。。。

Controller

call_id:

创建,ResetPods函数中置为 ==INVALID_BTHREAD_ID==

call_id 本质就是 bthread_id。

获取或者==创建call_id==

这里就是设置fail的回调函数,并且 这里猜测每个 id 对应一个 ==Id 对象(元数据信息)==(后续验证。)

未完待续。。。

本文共计487个文字,预计阅读时间需要2分钟。

brpc - channel如何实现高效稳定的远程通信?

介绍:是向server发送数据的通信方式。主要包含两个类:

1.ChannelOptions

2.Channel

3.Controller是Channel的友元类。

Init函数,用于指定server和ChannelOption。一般会使用protobuf定义一个Service,使用Service_S。

介绍

是向server发送数据的通道。 主要有两个类, 1 ChannelOptions 2 Channel 3 Controller是Channel的友元类。

Init函数,用于指定server和ChannelOption。 一般会使用protobuf定义一个Service,使用Service_Stub进行rpc调用,需要传递 controller,request,response,done 这四个参数。

发送

channel的主要参数就这些, 超时时间,重试次数,协议类型,连接类型等等。

CallMethod 函数

函数声明如图

brpc - channel如何实现高效稳定的远程通信?

可以为cntl指定单独的参数,如不同的发送请求可能有不同的超时时间,但是复用同一个channel。 在这个函数里,

首先,根据ChannelOptions,为cntl==设置参数==。注意超时时间并未在这里根据channel设置,后续再看。

然后==构建 call_id==

==bthread_id_lock_and_reset_range== 这个调用是做什么还不太清楚。 cntl如果复用,那么使用之前要调用reset(); 没reset,会导致上面这步失败。

如果上面加锁成功了,则可以给cntl 设置标记: cntl->==set_used_by_rpc==();

然后是==span==的设置,这个是记录一些统计信息,和builtin-service相关的。

然后就是其它**==参数*==的设置,如*==超时时间==**等。

然后就是 ==序列化==,userCode的判断, ==两个计时器==(超时倒计时..),

最后就是调用IssueRPC 了。

未完待续。。。

Controller

call_id:

创建,ResetPods函数中置为 ==INVALID_BTHREAD_ID==

call_id 本质就是 bthread_id。

获取或者==创建call_id==

这里就是设置fail的回调函数,并且 这里猜测每个 id 对应一个 ==Id 对象(元数据信息)==(后续验证。)

未完待续。。。