brpc

0.简介

链接中介绍了rpc的相关概念。

brpc可以被用作C++网络库

官方文档

1.编译安装

按照官方链接安装即可,但是此链接中的如下命令要进行修改:
原命令:

sudo apt-get install -y cmake libgtest-dev && cd /usr/src/gtest && sudo cmake . && sudo make && sudo mv libgtest* /usr/lib/ && cd -

改为:

sudo apt-get install -y cmake libgtest-dev && cd /usr/src/gtest && sudo cmake . && sudo make && cd lib && sudo mv libgtest* /usr/lib/ 

【注】我是在完全干净的ubuntu20.04(刚刚安装的ubuntu)上进行编译,如果你安照官方链接进行编译出现问题,那只能说你现在的系统下面的软件太多,有库的版本等问题,从而导致编译失败。

按照官方文档编译和安装完成以后,在brpc项目下面会出现一个output的文件夹,此文件夹中就是我使用brpc所需要的头文件和库文件,还有一个我暂时不知道干嘛用的可执行文件protoc-gen-mcpack。

最后我们可以使用样例代码进行学习。

2.学习

2.1 bvar

bvar,一个多线程环境下的高性能计数器类库。

官方文档看不太懂的原因:给的例子都不是可以直接运行的东西。所以如果从零基础开始,可能有些吃力。
不知道如何编写编译代码,如何写相应的测试程序等。
而且很多内容像是机翻译

接下来,先看客户端和服务器,或者先看example里面的CmakeLists.txt等文件吧。

开始学习

通过echo_server带你入门brpc!就是前面讲过的。。。。。

brpc初学者指南

https://wangzhike.github.io/2020/08/29/introduct_to_brpc_tmp/

开始学习2

先从客户端开始学习吧, 因为有示例代码,可以先大致看一下示例代码,并把不懂的记录下来,然后去看看相关文档里怎么解释。

Init函数分为连接一台服务器和连接服务集群。

开始学习3

https://genggao110.github.io/2019/10/29/RPC工作原理/

一个基本的RPC框架里面应该至少包含以下4个组件:
客户端(Client): 服务调用方(服务消费者)
客户端存根(Client Stub): 存放服务器端地址信息,将客户端的请求参数数据信息打包成网络信息,再通过网络传输发送给服务器端。
服务器端存根(Server Stub): 接收客户端发送过来的请求信息并进行解包,然后再调用本地服务进行处理。
服务端(Server): 服务的真正提供者。

命名服务器就是用来找到所要调用功能在哪个服务器的吗??

服务注册中心
可选:Redis、Zookeeper、Consul 、Etcd。一般使用ZooKeeper提供服务注册与发现功能,解决单点故障以及分布式部署的问题(注册中心)。

当服务提供者启动的时候,需要将自己提供的服务注册到指定的注册中心,以便服务消费者能够通过服务注册中心进行查找;

服务的提供者需要定期向服务注册中心发送心跳检测,服务注册中心如果一段时间未收到来自服务提供者的心跳后,认为该服务提供者已经停止服务,则将该服务从注册中心上去掉。

微服务也可以解决,跨语言编程的问题
gRPC在跨语言上的解决方案,好像主要是使用java在做。。。

bRPC培训材料:https://brpc.apache.org/zh/docs/c++-base/brpc-training-materials/

命名服务用于集群中,从命名服务中可以获取,集群服务器的地址和端口。
集群就是很多服务器,每个服务器都提供相同的功能。

线程安全就是代表可以同时被多个线程访问,而不出现不可预知的行为。

example/echo_c++/client.cpp

代码解析:example/echo_c++/client.cpp

首先要知道代码中使用到了Google 提供的一个命令行参数处理的开源库gflags。参考gflags

客户端的实现流程:

  • 定义proto文件:proto文件中定义了EchoRequest和EchoResponse两种类型的数据,并且定义了EchoService服务器,EchoService中定义了Echo函数。EchoRequest、EchoResponse和EchoService都会被转换成同名的C++类,其中类EchoService还生成了EchoService_Stub子类。
  • 配置IP、端口等参数:IP、端口等参数用ChannelOptions来“装”。使用ChannelOption初始化Channel,并配置远程服务的ip和端口。Channel就是相当于一个客户端。
  • 初始化EchoService_Stub:一般不直接使用Channel,而是使用Channel初始化stub,这样stub中就配置了IP、端口等参数。
  • 给EchoService_Stub传入参数:将写好EchoRequest和EchoResponse类型的对象、Controller作为stub的Echo函数的参数。

brcp官方文档——serve-httph2中说不支持大文件传输,但是支持http chunked,是什么意思??】
答:http chunked用于将服务器的文件发送给客户端(浏览器),而不是将客户端(浏览器)的文件发送给服务器。

brpc支持http协议的意思是:brpc写的client和server之间的通信可以使用http协议,如果你要开发一个web server,是不可以直接使用brpc。可能需要看看brpc低层如何解析http协议。
【我看知乎上不是有说将brpc当成网络库吗,这个网络库是什么意思?怎么当成网络库】
答:brpc官方文档中其实是有写brpc的底层如何实现的。如果要使用brpc提供底层实现的网络库,可以看官方文档进行学习。

js也是编程语言,所以grpc-web指的就是grpc的js版本。
vue和node就是用js写的。

posted @ 2022-10-12 21:30  好人~  阅读(569)  评论(0编辑  收藏  举报