把TeamTalk(即时通讯项目)中的线程池连接池拆出来单独测试。

article/2025/8/30 4:51:20

研究过Teamtalk的伙伴会发现它的线程池和连接池与很多文件有关联, 这篇文章主要写,把它的线程池连接池拆出来需要用到哪些文件。
其实我本来只想测试它的连接池的,但发现连接池里套的有线程池,于是就一起拆出来了。

整个工程的树目录结构如下:
在这里插入图片描述这里可以忽略build目录内部的所有文件,因为这是cmake后产生的。

base目录里的文件如下:
在这里插入图片描述因为连接池是在db_proxy_server服务器上的,所以这里我与teamtalk保持一致创建的是db_proxy_server目录,内容如下:

在这里插入图片描述这里比较重要的是libbase.a , libslog.so, libhiredis.a
简单讲解这三个库文件来自哪里,
libslog.a: 与base同级目录下有一个slog文件夹,不是我这上边的slog文件夹(我这个是base目录里的slog,只包含了头文件,因为util.h会用到这个头文件), 将里面的源文件编译为库文件(libslog.a)即可,还有一点需要说明, slog日志库就是对log4c××的封装。

libbase.a: 就是base目录里面的所有源文件编译出来的库。
libhiredis.a: 这个是安装hiredis的时候生成的库,作为一个客户端与redis服务器通讯,在redis连接池中需要用到。
强调一点, 这三个库文件,直接放到/usr/lib中,cp libbase.a , libslog.so, libhiredis.a /usr/lib 不然找不到, 当然你可以通过CMakeLists.txt文件自定义路径。

看一下比较关键的CMakeLists.txt文件内容:可以着重看一下我里面的注释,对于LINK_DIRECTORIES是有细节的,它的路径决定了libbase.a , libslog.so, libhiredis.a的寻找路径, 如果你把这三个库文件放到了/usr/lib中则可以不用在这里配置这三个库文件的寻找路径(但还是需要这句话,因为还有mysql的库文件路径)。

cmake_minimum_required(VERSION 2.6)
PROJECT(dbpool_test)AUX_SOURCE_DIRECTORY(./ SRC_LIST)SET(EXECUTABLE_OUTPUT_PATH  ./)SET(MYSQL_INCLUDE_DIR /usr/include/mysql)
SET(MYSQL_LIB /usr/lib64/mysql)#加上 -static 表示显式调用静态库
ADD_DEFINITIONS( -g -W -Wall -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DAC_HAS_INFO
-DAC_HAS_WARNING -DAC_HAS_ERROR -DAC_HAS_CRITICAL -DTIXML_USE_STL
-DAC_HAS_DEBUG -DLINUX_DAEMON -std=c++11 -DENCRYPT )#这个相当于 -I   指定头文件路径
INCLUDE_DIRECTORIES(./ ../base ${MYSQL_INCLUDE_DIR})#这个相当于 -L   指定库文件路径
#这里有个细节, 如果新建了build目录,cd build -> cmake .. 则这里必须要多退一级,比如./ 要更换为 ../
#而上边的那些却不用
LINK_DIRECTORIES(./  ../ ../base ${MYSQL_LIB} )ADD_EXECUTABLE(dbpool_test ${SRC_LIST})TARGET_LINK_LIBRARIES(dbpool_test base pthread mysqlclient slog hiredis)

db_proxy_server中有三个头文件不是自己写的
read.h, sds.h, hiredis.h, 这三个头文件都是安装hiredis的时候,里面搬运过来的。

整个编译过程就是在db_proxy_server中:
mkdir build -> cd build -> cmake … -> make 即可

整个工程链接
提取码:o0ma

如果你因为某些库文件导致无法运行,不用担心, 我这里使用shell脚本把所有依赖的库打包下来, 一定可以运行。
所有库文件打包好的
提取码:0cem

简单说明两个链接的区别, 第一个工程链接是所有源文件,以及那三个库文件的打包,如果你以前成功编译过teamtalk工程, 就一定可以运行, 但如果是新手就不能运行,因为可能缺少某些依赖;
而下边这个链接,我已经用脚本打包好了所有依赖的库,不管你以前有没有编译过teamtalk ,都可以直接运行。


http://chatgpt.dhexx.cn/article/D4puK8TV.shtml

相关文章

teamtalk原理

再贴一遍架构图 从图中可以看出,对外使用的是http连接,内部使用的是tcp长连接。 类的命名规则:xxxServConn是模块连别的模块,xxxConn是别的模块连它。 协议设计 teamtalk采用protobuf进行序列化 typedef struct {uint32_t le…

TeamTalk源码分析(一)—— TeamTalk介绍

TeamTalk是蘑菇街开源的一款企业内部用的即时通讯软件(Enterprise IM),类似腾讯的RTX。网上也有很多的介绍,我这里也有写几遍关于这款产品的“流水账”,一方面对自己这段时间的阅读其代码做个总结,尽量做个…

teamtalk实现即时通讯

即时通讯技术应用非常广泛,涉及教育、电商、金融、泛娱乐、生活服务、医疗健康、政企服务、游戏聊天、在线客服等等行业,不是大家认为仅仅是qq、微信那样。 即时通讯架构 先给张图 客户端与服务器端进行网络通信、收发消息连接层为客户端收发消息提供…

通识哈夫曼树及其应用,一起来构造属于自己的哈夫曼树

1.哈夫曼树的背景 哈夫曼(霍夫曼、赫夫曼)David Albert Huffman(August9,1925-October7,1999)。计算机科学的先驱,以他的哈夫曼编码闻名,在他的一生中,对于有限状态自动机,开关电路,异步过程和信…

哈佛结构冯·诺依曼结构

哈佛结构是一种将程序指令存储和 数据存储分开的存储器结构。哈佛结构是 一种并行体系结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。 冯诺依曼结构也…

微型计算机之哈佛架构是什么?

“哈佛体系结构”指的是什么? 微型计算机处理命令和数据,但是在很久以前的微型计算机中,用命令和数据共享了一条总线。在这种情况下,CPU在读取指令时使用总线,因此无法访问数据,并且在读取指令结束后访问数…

冯诺依曼结构、哈佛结构、改进型哈佛结构

冯诺依曼结构 冯诺依曼结构,又称为普林斯顿体系结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。取指令和取操作数都在同一总线上,通过分时复用的方式进行;缺点是在高速运行时,不能达到同时取指令和…

高级数据结构之赫夫曼树

思考两个问题 电报发送:二战的时候大家都知道那时候普遍会应用电报,如果让你来设计一个电报的发送编码你该如何设计呢? 电报加密后越短越好,发送快。破解难解码容易换加密树也要快可逆的 压缩算法:给你10000个字符&am…

ARM到底是冯诺依曼结构还是哈佛结构?

问题 嵌入式的学习中ARM处理器是主题,这些年产业界除了PC和服务器市场外,以手机、pad、家电控制等为代表的嵌入式领域都被ARM几乎垄断了。所以学习嵌入式处理器,其实等同于学习ARM。(当然了,近两年RISC-V架构横空出世在…

冯诺依曼结构和哈佛结构的区别

冯诺依曼结构和哈佛结构的区别 1. 冯诺依曼结构: 说明: 一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同。 冯诺依曼的计算机必须…

冯诺依曼与哈佛结构的区别

cortex M3,M4主要采用哈弗结构 个人理解:最主要的区别在于程序空间和数据空间是否是一体的,冯诺依曼结构数据空间和地址空间是不分开的,而哈佛结构数据空间和地址空间是分开的 哈弗结构的优势:如果采用流水线设计&#xff0…

冯氏结构、哈佛结构、超级哈佛结构之间的异同

冯.诺伊曼结构 1945年,冯.诺伊曼首先提出了“存储程序”的概念和二进制原理,后来,人们把利用这种概念和原理设计的电子计算机系统统称为“冯.诺伊曼型结构”计算机。冯.诺伊曼结构的处理器使用同一个存储器,经由同一个总线传输…

哈佛结构

数字信号处理一般需要较大的运算量和较高的运算速度,为了提高数据吞吐量,在数字信号处理器中大多采用哈佛结构,如下图所示 图 哈佛结构 与冯.诺曼结构处理器比较,哈佛结构处理器有两个明显的特点: 使用两个独立的存储…

冯诺依曼体系结构、哈佛体系结构与改进型哈佛结构之间的区别

1、冯诺依曼结构  冯诺依曼结构又称作普林斯顿体系结构(Princetionarchitecture)。  1945年,冯诺依曼首先提出了“存储程序”的概念和二进制原理,后来,人们把利用这种概念和原理设计的电子计算机系统统称为“冯诺依…

哈佛结构与冯诺依曼结构(含STM32系统结构解析)

存储器是微控制器的重要组成部分,不同类型的微控制器其采用的存储结构与容量不尽相同,但存储器的用途是相同的,用于存放程序和数据。微控制器中的存储结构有两种基本构成形式。 冯诺依曼结构 冯诺依曼结构也称普林斯顿结构,是一…

STM32属于哈佛结构还是冯诺依曼结构?

目录 01、冯诺依曼体系 02、哈佛体系 03、arm和哈佛、冯诺依曼的关系 04、实际芯片制造 现代的CPU基本上归为冯诺伊曼结构(也成普林斯顿结构)和哈佛结构。 冯洛伊曼结构就是我们所说的X86架构,而哈佛结构就是ARM架构。一个广泛用于桌面端…

哈佛体系结构

哈佛机:为数据和程序提供了格子独立的存储器。 程序计数器只指向程序存储器,而不指向数据存储器,这样的的后果是很难再哈佛机上编写出一个自修改的程序。独立的程序存储器和数据存储器为数字信号处理提供了较高的性能。结构如下图所示&#x…

哈佛结构和冯诺依曼结构?STM32属于哈佛结构还是冯诺依曼结构?

现代的CPU基本上归为冯诺伊曼结构(也成普林斯顿结构)和哈佛结构。 冯诺依曼体系 冯诺依曼体系结构图如下 冯诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。数据与指令都存储在同一存储区中&…

什么是冯诺依曼结构、哈佛结构、改进型哈佛结构?

冯诺依曼结构 冯诺依曼结构,又称为普林斯顿体系结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。取指令和取操作数都在同一总线上,通过分时复用的方式进行;缺点是在高速运行时,不能达到同时取指令和取…

哈佛结构和冯诺依曼结构

已剪辑自: https://zhuanlan.zhihu.com/p/136748306 1946年,第一台计算机ENIAC诞生,人类进入计算机时代,后来,美籍匈牙利数学家:冯.诺依曼提出了计算机“存储程序”的计算机设计理念,即将计算机指令进行编码…