muduo集群项目
@seven@
加油,未来可期
展开
-
基于muduo的集群服务器开发数据库模块之连接池
1.前言连接池,顾名思义,就是以池式管理这些连接,池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。1.1数据库连接池运行机制从连接池获取或创建可用连接; 使用完毕之后,把连接返回给连接池; 在系统关闭前,断开所有连接并释放连接占用的系统资源; 还能够处理无效连接(原来登记为可用的连接,由于某种原因不可再用,如超时、通讯问题),并能够限制连接池中的连接总数不低于某个预定值和不超过某个预定值1.2数据库连接池运行机制从连接池获取或创建可用连接; 使用完毕之后,把连接原创 2022-05-16 18:03:39 · 201 阅读 · 1 评论 -
基于muduo的集群服务器开发业务模块之群组聊天业务
1.设计协议群聊json["msgid"] = GROUP_CHAT_MSG;json["id"] //发送者idjson["name"] //发送者姓名json["groupid"] //发送者姓名json["msg"] //消息内容json["time"] //发送时间2.设计思路根据客户端的发送的信息,提取出来发送者和群聊号,然后根据群聊号去数据库拿出群成员,然后循环转发,如果群成员不在线...原创 2022-05-16 12:17:04 · 231 阅读 · 0 评论 -
基于muduo的集群服务器开发业务模块之加入群组业务
1.协议加入群json["msgid"] = ADD_GROUP_MSG;json["id"] //用户idjson["groupid"] //群id2.设计思路这里设计也简单,因为本身考虑的功能不是很多,客户端发送加入群的信息过来,服务端将当前用户信息和群聊信息加入数据库的表里面,就完了。这里有很多不好的地方,比如没有管理员同意是否允许进群,也没有响应给客户端,都是默认的,等等不足,这些缺点还等等各位朋友进行改善,开发,如果可以麻烦也给我一份,哈哈...原创 2022-05-16 12:09:57 · 78 阅读 · 0 评论 -
基于muduo的集群服务器开发业务模块之创建群组业务
1.协议创建群json["msgid"] = CREATE_GROUP_MSG;json["id"] //群创建者idjson["groupname"] //群名json["groupdesc"] //群描述2.设计思路客户端发送创建信息给服务器,服务器会创建好,就是往群信息表里面插入数据即可,但是没有响应给客户端,默认是创建好,但是这样设计不太好,应该加一个响应比较好,但是由于时间关系没有加,有兴趣的小伙伴可以加。3.代码部分// 创建群...原创 2022-05-16 12:01:43 · 135 阅读 · 0 评论 -
基于muduo的集群服务器开发业务模块之添加好友
1.协议加好友json["msgid"] = ADD_FRIEND_MSG;json["id"] //当前用户idjson["friendid"] //要加的好友的id2.设计思路客户端向服务端发送请求,服务端会将两个人的信息插入好友表里面,添加成功。这里做的比较简单,没有进行对方验证,可以多加一次验证,这个需要修改协议,协商好就可以。有兴趣的朋友可以做一下。3.代码部分// 添加好友业务 msgid id friendidvoid ChatSe...原创 2022-05-16 11:51:23 · 84 阅读 · 0 评论 -
基于muduo的集群服务器开发业务模块之单聊业务
1.协议格式一对一聊天json["msgid"] = ONE_CHAT_MSG;json["id"] //发送者idjson["name"] //发送者姓名json["to"] //接受者idjson["msg"] //消息内容json["time"] //发送时间2.设计思路服务端判断目的对象在不在线(查当前服务器的在线用户表,或者去数据库查当前用户是否在线),如果在本服务器上面直接转...原创 2022-05-16 11:38:49 · 112 阅读 · 0 评论 -
基于muduo的集群服务器开发业务模块之注销业务
1.通信格式json["msgid"] = LOGINOUT_MSG;json["id"] //要注销的id2.设计思路这里的注销就是用户退出登录的意思,不是用户彻底注销了,彻底注销这个业务没有开发,有兴趣的小伙伴可以去开发一下(就是删除用户信息)。注销下线,需要在服务器的在线用户里面移除该用户,同时在redis上面取消订阅通道。然后更新用户状态即可3.代码部分// 处理注销业务void ChatService::loginout(const TcpConn...原创 2022-05-16 11:08:53 · 83 阅读 · 0 评论 -
基于muduo的集群服务器开发业务模块之注册业务
1.由注册协议注册json["msgid"] = REG_MSG;json["name"] //用户姓名json["password"] //用户姓名注册响应json["msgid"] = REG_MSG_ACK;json["id"] //给用户返回他的id号json["errno"] //错误信息,失败会被设置为12.设计思路将用户名和密码插入数据库,插成功了,就表明注册成功了。返回值为用户账号id,如果错误。有错...原创 2022-05-16 10:57:38 · 202 阅读 · 0 评论 -
基于muduo的集群服务器开发之服务端与客户端通信协议规定
1.协议介绍与讲解这里采用json进行序列化和反序列化,所以讲解的时候代码以json为主首先,业务有以下几种enum EnMsgType{ LOGIN_MSG = 1, // 登录消息 LOGIN_MSG_ACK, // 登录响应消息 LOGINOUT_MSG, // 注销消息 REG_MSG, // 注册消息 REG_MSG_ACK, // 注册响应消息 ONE_CHAT_MSG, // 聊天消息 ADD_FRIEND_MSG, //...原创 2022-05-16 10:31:09 · 146 阅读 · 0 评论 -
基于muduo的集群服务器开发之数据模块中数据库表设计
1.用户信息表存储着用户的账号id,名字,密码。和登录状态2.好友表好友列表里面存储着自己的id和好友id3.群表群号,群名称和群描述4.群用户表群id和用户id和用户对应的角色5.离线用户表用户id和对应的信息...原创 2022-05-15 22:47:14 · 118 阅读 · 0 评论 -
基于muduo的集群服务器开发业务模块之登录业务
1.登录的通信协议客户端----->>>服务端:msgid(事务id)+账号名+密码服务端----->>>客户端:msgid(事务id)+错误编号+错误信息+用户信息(比如账号名字还有好友列表信息)+离线信息等等2.数据库表的设计3.流程讲解首先,客户端按照上面的格式进行发送数据,服务端接收到之后,进行回调登录业务操作,在业务函数如下// 处理登录业务 id pwd pwdvoid ChatService::logi原创 2022-05-15 21:42:18 · 131 阅读 · 0 评论 -
基于muduo的集群服务器开发之网路模块与业务解耦
1.设计思路正常的解耦,在c++有两种,通过基于对象的回调方式,或者利用接口编程。网络模块与业务模块的解耦,这里采用的是回调机制。我们对业务进行编号,网络模块在接收到数据之后,解析出业务对象的编号,然后根据业务编号,去map容器里面找到改业务编号对应的处理函数,然后获取到处理函数的句柄,执行即可。2.实现2.1业务编号#ifndef PUBLIC_H#define PUBLIC_H/*server和client的公共文件*/enum EnMsgType{ ..原创 2022-05-15 17:41:05 · 179 阅读 · 0 评论 -
基于muduo的集群服务器开发之网路模块
1.网路模块的功能完成网路数据发送与接收,解析接收的数据,然后进行回调业务的代码,实现网路模块与业务的解耦。正常的解耦,在c++有两种,通过基于对象的回调方式,或者利用接口编程。2.muduo网路模块实现muduo实现网路模块很简单,基本是模板,我们只需要修改回调函数里面的功能即可。可以参考一下,我这篇文章muduo网络库使用模板_@seven@的博客-CSDN博客3.模板头文件#ifndef CHATSERVER_H#define CHATSERVER_H..原创 2022-05-15 17:21:48 · 343 阅读 · 0 评论 -
基于muduo的集群服务器开发(前言)
1.网路库采用muduo的原因muduo是c++网路库里面比较高效的了,常见网路模型有以下几种。【方案1】 : accept + read/write不是并发服务器【方案2】 : accept + fork - process-pre-connection适合并发连接数不大,计算任务工作量大于fork的开销【方案3】 :accept + thread thread-pre-connection比方案2的开销小了一点,但是并发造成线程堆积过多【方案4】: muduo的网络设计:react原创 2022-05-15 12:05:26 · 495 阅读 · 0 评论