tsx81428 发表于 2024-8-4 00:20:03

HighConcurrencyCommFramework c++通讯服务器框架 :简介-信号处理

项目是4月份左右做的如今整理到博客上,趁便加深一下印象

先容

项目形貌:该项目是使用 C++ 实现的高并发服务器脚手架,包含线程池和连接池等技能,支持开发者举行二次开发复用,只需 要添加对应业务逻辑即可完成通讯服务器、网络生意业务,游戏通讯框架等。
项目地址:https://github.com/18953014746/HighConcurrencyComm-Framework-
开端

鉴戒nginx模式实现
nginx :简介

//-:nginx简介//nginx(2002年开发,2004年10才出现第一个版本0.1.0):web服务器,市场份额,排在第二位,Apache(1995)第一位;
//web服务器,反向署理,负载均衡,邮件署理;运行时需要的系统资源比力少,所以经常被称呼为轻重级服务器;
//是一个俄罗斯人(Igor Sysoev),C语言(不是c++)开发的,而且开源了;
//nginx号称并发处理百万级别的TCP连接,非常稳固,热部署(运行的时间能升级),高度模块化设
计,自由许可证。//许多人开发自己的模块来增强nginx,第三方业务模块(c++开发);0penResty;
//linux epoll技能;
windows IOCP
为什么选择nginx

//单机10万并发,而且同时能够保持高效的服务,epo11这种高并发技能利益就是:高并发只是占用更多内存就能 做到;
//内存池,历程池,线程池,事件驱动等等;
//学习研究大师级的人写的代码,是一个程序开发人员能够急速进步的最佳途径;
wget http://nginx.org/download/nginx-1.14.2.tar.gz
下载nginx ,然后解压得到
https://img-blog.csdnimg.cn/direct/bd0c9e86590a44adb27675d3c31e3aaf.pnghttps://img-blog.csdnimg.cn/direct/db5df3e45db34afcb5c2095849af8a91.png
auto :
https://img-blog.csdnimg.cn/direct/c47d97e428d341fd8608878650086aa8.png
cc:检测编译器的脚本
lib:检测静态库的脚本
os :检测操纵系统的脚本
type:查抄平台类型的脚本
CHANGES :修复的bug 新增的阐明;
conf :默认的配置文件
contrib/:脚本和工具,典型的是vim高亮工具vimim高亮工具
configure:编译nginx之前必须先实行本脚本以生成一些须要的中间文件
src:nginx 源代码目次;
core :焦点代码
event :event(事件模块)
http:http(web服务)模块相干代码
mail :邮件相干代码
os:操纵系统代码
stream :流处理相干代码
objs :
ngx_modules.c :内容决定了我们一会编译nginx的时间有哪些模块会被编译到来
Makefile :产生的编译文件
生成了nginx可执文件;
然后 在 make install 会在 usr/local/ nginx 的sbin安装可实行文件;
https://img-blog.csdnimg.cn/direct/7eed20c4743748929289de1bf2998518.png
80
调解历程nginx的历程数量

在windows系统上调节 历程数量 内核为4
通过 grep -c processor /proc/cpuinfo 查看cpu内核
通过vim 编辑 nginx.conf process为4;
https://img-blog.csdnimg.cn/direct/7129c46782fc4ba0836fee994aa5f2dc.png
重载配置文件

不中断的时间,worker服务老的,服务之后,master 历程再fork出来服务新的
如果你是多核的,他会自动分配给你多少工作线程,然后的你杀掉其中一个,他还会自动fork
多历程服务器编程 (nginx)
怎么讲:
https://img-blog.csdnimg.cn/direct/5d2be41a6a89453ca19caeecf0de4e53.png
终端与历程的关系

https://img-blog.csdnimg.cn/direct/119d4909cf0a48bc978d38d1e91a4dff.png
linux 启动的过程中:

https://img-blog.csdnimg.cn/direct/a05ebae9fc6d44859d422a4cb75c2919.png
历程的集合叫历程组
历程组的集合叫会话
一个bash 上面运行的所有程序都属于一个会话
如果你把一个终端处理了,然后操纵系统会给你这个bash历程发送信号,然后bash历程将这个信号发送给这个会话的所有历程,缺省状态下,是退出历程;
https://img-blog.csdnimg.cn/direct/3946b9c5700a482d91cbe242aa7a62de.png
信号处理:

signal图为兼容性可靠性弃些历史问题;不发起使用,
发起用 sigaction()函数代替;
signal (SIGNUSR1,sigusr==SIGERR) 在主函数写信号捕捉函数,
//系统函数 ,参数一是个自定义信号,参数二是个函数指针 ,只管不要调用库函数
函数处理:
https://img-blog.csdnimg.cn/direct/63654f5fd53f43279971bbe2ff99e632.pnghttps://img-blog.csdnimg.cn/direct/b67c6c90e7ee4544a1e5f99db66fed18.png
kill -USR1 1185 、、发送信号
https://img-blog.csdnimg.cn/direct/24b599f351f04b9fa5901c4b1d48babb.png
不捕捉 ,默认处理 终止历程
定义一个函数 ,然后信号处理需要调用,问题是?
https://img-blog.csdnimg.cn/direct/9393b77ccf2b43d3935afcda3f1f3795.pnghttps://img-blog.csdnimg.cn/direct/78d605f2f47142998043a51e0aa75089.png
答:全局变量不是我们想的15了,而是被信号中断改成20了
先保存全局变量的值,等调用完在复制原来的值
可重入函数(异步信号安全)

/严格意义:muNEfumc()函数不应该是一个可重入函数/所谓的可重入函数:就是我们在信号处理函数中 调用它是安全的;
假设主函数用 malloc 信号处理也用malloc那么当吸收信号的时间,内存分配会错乱
信号之间的处理是壅闭等待的而不是抢占信号实行
信号集:
https://img-blog.csdnimg.cn/direct/6da52cd523b4411d9798b570a47456de.png
sigemptyset()清空信号集所有的信号都清零,表示这60多个信号都没有来0
sigfillset()把所有的所有信号都设置为1
sigaddset()sigdelset()增加和删除信号集中的信号
sigprocmask()所对应的信号集的内容
sigmember() 信号集中的信号集为1、表示在占用,其他信号集的1都是阻塞状态
sigprocmask()所对应的信号集的内容
newmask信号集通过add函数变成了1 ,然后通过sigprocmask 设置信号为屏蔽里面的信号
oldmask 是0 信号集,最后在设置会不屏蔽,然后壅闭的就可以进来 调用信号
https://img-blog.csdnimg.cn/direct/21ff7103596745ae86a40ac563760978.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: HighConcurrencyCommFramework c++通讯服务器框架 :简介-信号处理