Rpc分布式网络通信框架(4) RpcApplication RpcApplication 本章讲解第一个核心类RpcApplication, 该类的主要任务是解析传入的配置文件, 并可以取出解析到的内容, 简单来说就是执行初始化任务. 为什么要传入并解析配置文件? 网络通信是点到点的, 你必须要知道对端的ip和port才能真正实现通信. 在本框架中, 配置文件主要存储的就是我们的目标服务器的ip与port, 当然如果我们使用zookeeper, 也会 2025-05-20 #RPC
Rpc分布式网络通信框架(3) 使用方式 在构建通信框架前, 一定要先了解我们的框架该怎么使用, 大体有哪几个部件, 在本章将会先写出一个简易的客户端和服务端, 让我们了解该设计出什么样的网络通信框架. 统一通信标准首先双方如果需要通信, 那么统一通信标准必不可少, 这也是为什么讲解proto的原因, 所以我们的第一步是编写proto文件并且生成.h和.cpp文件, 这里还是已先前的登录服务为例 : 123456789101112 2025-05-15 #RPC
Rpc分布式网络通信框架(2) protobuf protobuf部分 protobuf的功效和json相似, 都是便利数据的序列化和反序列化用于网络传输, 在rpc分布式网络通信中可以使用protobuf, 让我们先了解其优势 : 传输数据由二进制存储, 节省空间且效率更高. 有专门对于服务/方法的封装, 可以更方便地传输一个方法的信息. 当然其劣势在于需要编写.proto文件, 安装和使用都麻烦些, 不过这并不妨碍我们学习 2025-05-11 #RPC
C++语法细节复习(2) 智能指针其本质是利用栈上对象出作用域自动析构的特性自动释放堆上的内存. weak_ptr / shared_ptr weak_ptr : 弱智能指针, 观察者, 不影响引用计数, 作用在于观察一个指针, 并在关键时刻可以通过提升得到使用权. shared_ptr : 强智能指针, 拥有者, 影响引用计数, 确实拥有并可以使用指针. weak_ptr.lock() : 检测观察对象的引 2025-05-06 #shared_ptr
C++语法细节复习(1) MyString最普通的String模仿, 没有追加功能函数 : 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878 2025-04-28 #string #移动语义 #优化
Rpc分布式网络通信框架(1) 理论准备 理论准备 单机聊天服务器的缺点 : 受限于硬件资源, 并发量有限制 -> 集群服务器解决 任意模块的修改都会导致整体的编译部署 -> 分布式解决 有些模块是CPU密集型, 有些是IO密集型, 对硬件资源不一样 -> 分布式解决 集群与分布式 : 集群 : 每个里面都运行了一个独立系统, 有全套的服务. 分布式 : 将不同服务搭载在不同的服务器上, 还可以对单 2025-04-27 #RPC
Muduo库源码剖析(6) TcpServer TcpServer类详解 TcpServer将会作为Muduo库对外开放的核心类, 其提供接口开启服务器并设置设置回调函数与线程数量. 我们可以先预测一下TcpServer将要实现的功能 : 构造Acceptor并控制listen决定开始监听的时机. 构造EventLoopThreadPool并开辟设置的线程数量. 处理Acceptor监听到的每个connfd, 构建对应的TcpConne 2025-04-23 #Muduo
Muduo库源码剖析(5) TcpConnection Buffer 和 TcpConnection 详解 本章我们将学习Buffer类和其上级类TcpConnection, 先了解两个类的职能 : Buffer 和通常的缓冲区认知类似, 目的在于提升传入传出的效率, 就是在read中可以提前把数据从内核接收缓冲区中读出, 便于对端再向内核接收缓冲区输入. 在write中可以提前把要写入的数据存进缓冲区, 等待内核发送缓冲区空余. TcpCo 2025-04-21 #Muduo
Muduo库源码剖析(4) Acceptor Socket + Acceptor 详解 本章我们将学习Socket类和Acceptor类, 首先应当明确其在Muduo库中的职责所在 : Socket就是对原生socketAPI的封装, 供Acceptor使用. Acceptor简单来说是用来处理新连接的建立的. 我们来认识一下Acceptor的调用流程 TcpServer中会维护一个Acceptor作为成员变量, 由TcpServ 2025-04-17 #Muduo
Muduo库代码剖析(3) ThreadPool ThreadPool相关 本章我们将把EventLoop和C++11的thread结合, 实现Thread / EventLoopThread / EventLoopThreadPool. 首先我们应当明晰将创建的三个类的意义何在 : Thread : 这是对thread库的封装, 会增加对各种线程运行状态与数据的维护. EventLoopThread : 将Thr 2025-04-16 #Muduo