项目整体介绍

项目的流程图

流程图

1.1 Zookeeper

注册中心会把这个服务提供者的地址信息以及提供的服务对象名以及函数方法名保存下来

Zookeeper有两种库用于注册,分别为zookeeper_st(单线程库)和zookeeper_mt(多线程库),一般使用zookeeper_mt的API。

在客户端,如果使用zookeeper_mt库,需要使用三个线程:

  • 主线程:用户调用API线程
  • IO线程:负责网络通信的线程
  • completion线程:对于异步请求(Zookeeper中提供的异步API)以及watcher的响应回调,IO线程会发送给completion线程完成处理

Watcher机制

zookeeper中最重要的就是实现watcher机制。 该机制具体过程:

ZooKeeper客户端(Callee)首先将Watcher注册到服务端,同时把Watcher对象保存到客户端的Watcher管理器中。当ZooKeeper服务端监听到ZooKeeper中的数据状态发生变化时,服务端主动通知客户端(告知客户端事件类型和状态类型),接着客户端的Watch管理器会触发相关Watcher来回调相应处理逻辑(GlobalWatcher),从而完成整体的数据发布/订阅流程。

Zookeeper C API 博客

(https://cloud.tencent.com/developer/article/1142948)

1.2 protobuf

protobuf能够提供对数据的序列化和反序列化,可用于结构化的数据的串行序列化,使用Key-Value格式存储数据,因为采用二进制格式,所以序列化的数据比较小。

protobuf示例

其中消息体进行了嵌套,关键字message为方法,而service为服务名,而编译的代码:

protoc user.proto -I ./ -cpp_out=./user

基本过程是:Caller远端调用Login函数,Callee执行Login函数并返回结果,Caller获取返回结果

protobuf相关介绍

(https://cloud.tencent.com/developer/article/1176660)

1.3 网络库

在网络库部分,目前muduo库,也有自造的web服务器轮子。

未完待续…

致谢

感谢大佬

(https://blog.csdn.net/T_Solotov/article/details/124170856)

(https://blog.csdn.net/qq_45132647?type=blog)