
C++集群聊天服务器
文章平均质量分 67
Json序列化和反序列化;muduo网络库开发;
nginx源码编译安装和环境部署;
nginx的tcp负载均衡器配置;
redis缓存服务器编程实践;
基于发布-订阅的服务器中间件redis消息队列编程实践;
MySQL数据库编程;
CMake构建编译环境;
Github托管项目;
_索伦
结束,还是开始?
展开
-
集群聊天服务器:项目问题汇总
在编写代码时在客户端和服务器生成公钥和私钥,然后客户端和服务器三次握手建立连接后,客户端利用RSA公钥把对称加密的AES密钥加密成密文,发送到服务器后服务器利用RSA私钥解密,得到这个AES私钥,然后给客户端回复一个OK,客户端和服务器就都拥有了AES私钥,那么在后续的数据传输中,就可以利用AES对称加密来对明文加密了。接收方维护每个好友的消息seq,初始化为0,当接收到消息时,查看该消息的seq,如果不是0,则对当前消息进行缓存,等到序列号为0的消息接收到后,对维护好友的seq++,再去查看缓存的消息。.原创 2022-07-24 11:16:05 · 1514 阅读 · 0 评论 -
集群聊天服务器:集群与分布式理论
在聊天服务器项目中实现了集群,在这里根据该项目来讲解一下单机、集群与分布式理论。原创 2022-07-23 20:01:21 · 660 阅读 · 0 评论 -
集群聊天服务器:项目简介
该项目是基于muduo网络库的集群聊天服务器。实现的功能有登录、注销、注册、一对一聊天、群组的创建、群聊天以及离线消息的接收和存储。使用工具vscode连接云服务器(Ubuntu20.04),CMake构建编译。。。利用json进行数据的封装与交互。实现了MySQL连接池,省去大量三次握手四次挥手过程,提高数据库访问效率。服务器中间件利用的redis(基于发布-订阅)。有多台服务器,由Nginx进行TCP负载均衡(客户端都连接一个端口,再通过负载均衡器连接服务器)。.........原创 2022-07-17 20:05:12 · 1063 阅读 · 0 评论 -
Json的介绍和学习
在网络中,常用的数据传输序列化格式有XML,Json,ProtoBuf,在公司级别的项目中,大量的在使用ProtoBuf作为数据序列化的方式,以其数据压缩编码传输,占用带宽小,同样的数据信息,是Json的1/10,XML的1/20,但是使用起来比Json稍复杂一些,所以项目中我们选择常用的Json格式来打包传输数据。示例3json的键值对不仅可以放普通的字符串,还可以添加数组,对象等复杂类型。示例4序列化STL的容器。...原创 2022-07-18 09:11:47 · 231 阅读 · 0 评论 -
muduo网络库编程
muduo网络库给用户提供了两个主要的类TcpServer用户编写服务器程序的TcpClient用户编写客户端程序的优点epoll+线程池好处能够把网络I/O的代码和业务代码区分开(用户的连接和断开,用户的可读写事件)...原创 2022-07-20 14:50:41 · 398 阅读 · 0 评论 -
CMake的学习
使用简单方便,可以跨平台,构建项目编译环境。尤其比直接写Makefile简单(在构建大型工程编译时,需要写大量的文件依赖关系),可以通过简单的CMake生成负责的Makefile文件。cmake_minimum_required(VERSION3.0)#要求cmake最低的版本号project(demo)#定义当前工程名字set(CMAKE_BUILD_TYPE"Debug")#设置debug模式,如果没有这一行将不能调试设断点set(CMAKE_CXX_FLAGS${https。...原创 2022-07-20 15:29:04 · 239 阅读 · 0 评论 -
集群聊天服务器:工程目录的创建
在include头文件中,有专门存放服务器头文件的目录server,和一个公共文件public.hpp。而在server,又分为数据库层,model层,网络层,业务层,并借助了redis。server的CMakeLists.txt文件。源文件src的CMakeLists.txt。client的CMakeLists.txt。整个项目的CMakeLists.txt。...原创 2022-07-20 16:48:28 · 206 阅读 · 0 评论 -
集群聊天服务器:数据库表的设计
修改属性的字符编码altertableusermodifycolumnnamevarchar(50)charactersetutf8;修改表的字符编码altertableuserdefaultcharactersetutf8;原创 2022-07-20 16:21:53 · 687 阅读 · 0 评论 -
集群聊天服务器:网络模块ChatServer
代码】集群聊天服务器网络模块ChatServer。原创 2022-07-20 19:52:43 · 647 阅读 · 0 评论 -
集群聊天服务器:chatService业务层
首先根据用户的id查询出用户的信息(在上面头文件的私有成员中有数据操作类对象),若id和密码正确,则进行登录,如果状态是在线,则发送错误消息【该用户已登录】;若不在线,则进行登录,首先对用户状态进行更改,然后显示该用户是否有离线消息,再显示用户的好友信息和群组消息,这块的业务就根据个人想法来添加;在通信模块中,有一个字段是msgid,其代表着服务器和客户端通信的消息类型,在public.hpp里。根据消息类型,可以在业务层添加一个哈希表,键是对应的消息,值是发生不同类型事件所应该调用方法。...原创 2022-07-20 20:43:03 · 385 阅读 · 0 评论 -
集群聊天服务器:Model数据层的框架设计和数据库代码的封装
为了提高MySQL数据库(基于C/S设计)的访问瓶颈,除了在服务器端增加缓存服务器缓存常用的数据之外(例如redis),还可以增加连接池,来提高MySQLServer的访问效率,在高并发情况下,大量的TCP三次握手、MySQLServer连接认证、MySQLServer关闭连接回收资源和TCP四次挥手所耗费的性能时间也是很明显的,增加连接池就是为了减少这一部分的性能损耗。而Model代表着对数据库的增删改查操作。Model类都是对数据库的操作,即增删改查,这里有个头文件是数据库连接池,稍后介绍。...原创 2022-07-21 10:37:39 · 367 阅读 · 0 评论 -
集群聊天服务器为什么引入负载均衡器
weight=1,是指权重,相当于是轮询的过程。如果下面的weight=2,那么假设有三个客户端连接,会给第一个服务器分配一个客户,第二台分配两个。目前该项目只有一台服务器,32位Linux系统大概支持两万个用户连接,若要提高服务器的并发能力,则需要对服务器进行集群或分布式部署。max_fail心跳机制,如果心跳三次都失败,那么就默认这个服务器挂掉了,那么再有客户端请求进来时,就不对该服务器负载了。再执行make&&makeinstall,如果有错误,根据错误进入相应的文件,修改即可。...原创 2022-07-21 11:26:49 · 480 阅读 · 0 评论 -
集群聊天服务器:如何解决跨服务器通信问题 | redis发布-订阅
示例ChatServer1在redis上订阅和client1相关的事件,ChatServer2在redis上订阅和client2相关的事件,那么如果client1想给client2发消息,就会发布消息,消息队列接收后,就会给ChatServer2notify,将消息转发给client2。有两个客户在不同的服务器上登录,两个都在线,但服务器各自的_userConnMap上面没有另一个客户端的登录信息,这样两个客户端想要聊天,就会把消息存储成离线消息,必须等两个客户端在同一台服务器上才能正常通信。...原创 2022-07-21 21:05:03 · 1019 阅读 · 0 评论