- 博客(20)
- 收藏
- 关注
原创 聊天服务器——缓存器
缓存管理器里存放的是通知消息和聊天消息的缓存。因为用户会不在线,因此当用户不在线的时候,有朋友发消息或者群消息的时候,这些消息没办法传送给用户。因此先把消息传送到缓存器上,当用户上线的时候,会从缓存器上把缓存的消息推送给上线的用户。
2024-07-15 11:34:41 855
原创 聊天服务器——封装服务器类
/保护m_mapclient的操作。class IMServer final //final表示该类不可能派生子类。//防止OnConnection在多个线程中插入出现问题。//此处就是两个括号,第一个表示构造对象,第二个表示()运算符重载。//为了控制生命周期,防止提前销毁,或者销毁之后,重复销毁。//TODO:处理这个连接,找到这个连接,然后进行关闭。//使用const_cast消除const限定符。//TODO:关闭连接的操作。//TODO:有问题的连接。
2024-07-15 11:32:52 321
原创 聊天服务器——Usermanager2
用户管理器就是把所有的用户都加载起来,存放着所有的用户,方便后续的查找等操作首先userid有一个边界,GROUPID_BOUBDARY。当小于这个边界时,userid就代表着是用户的id。当大于这个边界时,userid就代表着是群id。
2024-07-13 17:54:55 783
原创 聊天服务器——Usermanager
用户管理器就是把所有的用户都加载起来,存放着所有的用户,方便后续的查找等操作首先userid有一个边界,GROUPID_BOUBDARY。当小于这个边界时,userid就代表着是用户的id。当大于这个边界时,userid就代表着是群id。
2024-07-13 17:54:22 764
原创 聊天服务器——muduo库源码阅读笔记
时间戳主要是获得时间成员变量是时间函数是获得当前时间函数是把时间转换成人看的string//把时间秒换算成毫秒return buf;
2024-07-13 17:53:36 828
原创 聊天服务器——mysql2
MySQLTool主要是封装了mysql的初始化连接、查询、执行connect函数就是连接,使用mysql_init来初始化数据库,使用mysql_real_connect来完成连接Query就是负责调用查询指令sqlmysql数据库查询后的结果是可以通过调用来获得结果并存到MYSQL_RES,然后获得数据库行和列的个数,并把结果都存放到QueryResult里使用mysql_query来执行sql语句。
2024-07-13 17:52:59 771
原创 聊天服务器——mysql
/mysql_real_query 与 mysql_query的区别就是 mysql_real_query遇到/0不会认为是结束。//用智能指针的好处是,不用再把里面查询的结果复制一次,而是直接返回,因为有时候数据量有点大。//true表示还有下一行,并且切换成功;false表示没有了。//blob real_query 遇到\0,不会认为是字符串结束了。//因为后面有sql.size()//如果前面有数据库了,先关掉。//mysql 默认是3306。//mysql的编码。mysql的cpp文件。
2024-07-13 17:52:28 729
原创 聊天服务器——Cmake入门
endif(NOT MYSQL_LIB)#必须进行匹配,否则会报错。#只是确认库存在或者设置库目录,是没有用的,需要链接进来才能起效果。#只是确认库存在或者设置库目录,是没有用的,需要链接进来才能起效果。if (NOT MYSQL_LIB)#NOT 只能用大写。# TODO: 如有需要,请添加测试并安装目标。# 将源代码添加到此项目的可执行文件。#将源代码添加到此项目的可执行文件。#这个宏,会影响编译参数。
2024-07-13 17:50:58 226
原创 聊天服务器——消息系统
std::unique_lock 是 C++11 提供的一个用于管理互斥锁的类,它提供了更灵活的锁管理功能,适用于各种多线程场景。(1)自动加锁和解锁// 自动加锁// 临界区代码} // 自动解锁使用 std::unique_lock 创建的对象,当其生命周期结束时(通常是在大括号的作用域结束时),会自动解锁,以确保互斥锁在不再需要时被释放。大括号是自己声明的。(2)手动加锁和解锁// 手动加锁// 临界区代码// 手动解锁。
2024-07-13 17:49:49 516
原创 聊天服务器——线程池
是在c++11中引入的一种智能指针,其特点是它所指向的资源具有共享性,即多个shared_ptr可以指向同一份资源。在c++中使用shared_ptr需要包含<memory>头文件。创建方式//new//拷贝std::shared_ptr 是一种智能指针,它能够记录多少个 shared_ptr 共同指向一个对象,从而消除显示的调用 delete,当引用计数变为零的时候就会将对象自动删除。
2024-07-13 17:48:19 694
原创 聊天服务器——数据库模块
1:创建表2:插入数据3:高效的数据绑定因为sqlite3_exec执行效率低,而且只能执行单一的语句。因此我们采用采用这四个方式来结构化执行数据库操作。
2024-07-13 17:47:34 529
原创 聊天服务器——sqlite3
1、体积小2、支持window和Linux(包括Android),跨平台性很好3、采用的一种库函数的形式来提供数据库的服务4、文件性的数据库5、缺点:不能使用网络,单纯就是本地数据库。加密性能不是很好,安全性不足。
2024-07-13 17:46:40 1034
原创 聊天服务器——WTL
在项目属性里,链接器里的所有选项,子系统改成窗口然后在c/c++里,把CONSOLES改成WINDOWS然后把int main()改成从一个命令行程序改成一个窗口程序改成所有代码如下所示://从一个命令行程序改成一个窗口程序if (hRes!= 0)"));MSG msg;return 0;把wtl9的源码放入到目录里。
2024-07-13 17:44:26 590
原创 聊天服务器——Xml
组件化解决的问题是拿来就用,不需要太多的额外编译,就能够进行适配仅仅引用头文件,加上一个可运行的程序,就可以到处使用,随时引用甚至不要头文件,直接拿来用COM里面有接口规范,可以通过接口查询方法本地COM服务,COM控件需要先注册后使用(dll库、ocx库)。这是微服务器,当创建对象时,它帮你创建,COM控件需要通过它来管理MSXML对应的头文件是<msxml2.h>
2024-07-13 17:41:26 910
原创 聊天服务器——Json
(2)右键Json,添加现有项,把Json压缩包里的文件全部添加上去,然后右键Json,仅用于项目,选择仅生成Json,这样就编译好了。然后再jsonstudy里,右键,选择”引用“,把刚才编译好的json静态库引用过去。项目配置:在属性里,C/C++里的预编译头里,选择不使用预编译头,删除预编译文件。为了快速而简洁的进行网络数据交互,各种各样的网络数据格式应运而生,从html到xml再到json。先进行一个简单的Jsonstudy小项目,学习一下Json,先进行项目编译。
2024-07-13 17:40:24 222
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人