【C++从零实现Json-Rpc框架】第六弹——服务端模块划分

【C++从零实现Json-Rpc框架】第六弹——服务端模块划分

一、前言

        在第五弹中我们对项目的功能进行了讲解,接下来我们就服务端的角度,来设计对应模块,帮助服务端实现项目的三个功能:

●  rpc调用

● 服务的注册与发现以及服务的下线/上线通知

● 消息的发布订阅

二、正文

1. 服务端的功能需求

在进行服务端具体的模块划分之前,我们先来明确下服务端的功能需求

● 基于网络通信接受客户端的请求,提供rpc服务

● 基于网络通信接受客户端的请求,提供服务注册与发现,上线&下线通知

●  基于网络通信接受客户端的请求,提供主题操作(创建/删除/订阅/取消),消息发布

2. 服务端的模块划分 

基于上述的功能,我们对服务端可以划分出这么几个模块

Network:网络通信模块

Protocol: 应用层通信协议模块

Dispatcher:消息分发处理模块

RpcRouter: 远端调用路由功能模块

Publish-Subcriber: 发布订阅模块

Registry-Discovery:服务注册/发现/上线/下线功能模块

Server:基于以上模块整合而出的服务端模块

3. Network模块

该模块为网络通信模块,实现底层的网络通信功能,这个模块本质上也是一个比较复杂庞大的模块块,由于项目的重点在于Rpc,因此该模块我们使用陈硕大佬的Muduo库来进行搭建

4. Protocol

当我们有了Network模块,双方就可以进行通信了,但是由于采取的TCP协议,因此数据在传输的时候,有可能会出现粘包问题,因此就需要存在应用层通信协议模块:解析数据,解决通信中有可能存在的粘包问题,能够获取到一条完整的消息

在前面的muduo库的基本使用中,我们能够知道想要让一个服务端/客户端对消息处理,就要设置一个onMessage的回调函数,在这个函数中对收到的数据进行应用层协议处理

而Protocol模块就是网络通信协议模块的设计,也就是在网络通信中,我们必须设计一个应用层的网络通信协议出来,以解决网络通信中可能存在的粘包问题,而解决粘包问题有三种方式:特殊字符间隔,定长,LV格式

     

Read more

无中生有——无监督学习的原理、算法与结构发现

无中生有——无监督学习的原理、算法与结构发现

“世界上绝大多数数据都没有标签。 真正的智能,不是在已知答案中选择,而是在混沌中发现秩序。” ——无监督学习的哲学 一、为什么需要无监督学习? 在前七章中,我们系统学习了监督学习(Supervised Learning)的核心范式:给定输入 x\mathbf{x}x 和对应标签 yyy,学习映射 f:x↦yf: \mathbf{x} \mapsto yf:x↦y。无论是线性回归、决策树,还是神经网络,都依赖于标注数据这一稀缺资源。 然而,现实世界的数据绝大多数是未标注的: * 用户浏览日志(只有行为,没有“好/坏”标签); * 医学影像(只有图像,没有诊断结论); * 社交网络(只有连接关系,没有群体划分); * 传感器时序(只有数值流,没有异常标记)

By Ne0inhk

力扣234.回文链表

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head = [1,2,2,1] 输出:true 示例 2: 输入:head = [1,2] 输出:false 提示:链表中节点数目在范围[1, 105] 内0 <= Node.val <= 9 题目解读 回文链表:本质是单链表的一种特殊结构 —— 从链表头部到尾部遍历得到的节点值序列,和从尾部到头部遍历得到的序列完全一致,比如 "abba"、"12321",正读和反读都相同。

By Ne0inhk
Java 面试篇-MySQL 专题(如何定位慢查询、如何分析 SQL 语句、索引底层数据结构、什么是聚簇索引?什么是非聚簇索引?知道什么是回表查询?什么是覆盖索引?事务的特性、并发事务带来的问题?)

Java 面试篇-MySQL 专题(如何定位慢查询、如何分析 SQL 语句、索引底层数据结构、什么是聚簇索引?什么是非聚簇索引?知道什么是回表查询?什么是覆盖索引?事务的特性、并发事务带来的问题?)

🔥博客主页: 【小扳_-ZEEKLOG博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录         1.0 MySQL 中,如何定位慢查询?         2.0 发现了 SQL 语句执行很慢,如何分析呢?         3.0 什么是索引?         4.0 索引的底层数据结构了解过吗?         5.0 B 树与 B+ 树的区别是什么呢?         6.0 什么是聚簇索引?什么是非聚簇索引?         7.0 知道什么是回表查询吗?         8.0 知道什么是覆盖索引吗?         9.0 MySQL 超大分页怎么处理?         10.0 索引创建原则有哪些?         11.0 什么情况下索引失效?

By Ne0inhk
【算法通关指南:数据结构和算法篇 】链表相关算法题:1. 排队顺序,2.单向链表

【算法通关指南:数据结构和算法篇 】链表相关算法题:1. 排队顺序,2.单向链表

🔥小龙报:个人主页 🎬作者简介:C++研发,嵌入式,机器人方向学习者 ❄️个人专栏:《算法通关指南》 ✨ 永远相信美好的事情即将发生 文章目录 * 前言 * 一、排队顺序 * 1.1题目 * 1.2算法原理 * 1.3代码 * 二、单向链表 * 2.1题目 * 2.2算法原理 * 2.3代码 * 总结与每日励志 前言 本专栏聚焦算法题实战,系统讲解算法模块:以《c++编程》,《数据结构和算法》《基础算法》《算法实战》 等几个板块以题带点,讲解思路与代码实现,帮助大家快速提升代码能力ps:本章节题目分两部分,比较基础笔者只附上代码供大家参考,其他的笔者会附上自己的思考和讲解,希望和大家一起努力见证自己的算法成长 一、排队顺序 1.1题目 链接:

By Ne0inhk