HighConcurrencyCommFramework c++通讯服务器框架 :简介-信号处理
创始人
2025-01-19 11:03:04
0

项目是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 ,然后解压得到

auto :

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安装可执行文件;

80

调整进程nginx的进程数量

在windows系统上调节 进程数量 内核为4

通过 grep -c processor /proc/cpuinfo 查看cpu内核

通过vim 编辑 nginx.conf process为4;

重载配置文件

不中断的时候,worker服务老的,服务之后,master 进程再fork出来服务新的

如果你是多核的,他会自动分配给你多少工作线程,然后的你杀掉其中一个,他还会自动fork

多进程服务器编程 (nginx)

怎么讲:

终端与进程的关系

linux 启动的过程中:

进程的集合叫进程组

进程组的集合叫会话

一个bash 上面运行的所有程序都属于一个会话

如果你把一个终端处理了,然后操作系统会给你这个bash进程发送信号,然后bash进程将这个信号发送给这个会话的所有进程,缺省状态下,是退出进程;

信号处理:

signal图为兼容性可靠性弃些历史问题;不建议使用,

建议用 sigaction()函数代替;

signal (SIGNUSR1,sigusr==SIGERR) 在主函数写信号捕捉函数,

//系统函数 ,参数一是个自定义信号,参数二是个函数指针 ,尽量不要调用库函数

函数处理:

kill -USR1 1185 、、发送信号

不捕捉 ,默认处理 终止进程

定义一个函数 ,然后信号处理需要调用,问题是?

答:全局变量不是我们想的15了,而是被信号中断改成20了

先保存全局变量的值,等调用完在复制原来的值

可重入函数(异步信号安全)

/严格意义:muNEfumc()函数不应该是一个可重入函数/所谓的可重入函数:就是我们在信号处理函数中 调用它是安全的;

假设主函数用 malloc 信号处理也用malloc那么当接收信号的时候,内存分配会错乱

信号之间的处理是阻塞等待的而不是抢占信号执行

信号集:

sigemptyset()清空信号集所有的信号都清零,表示这60多个信号都没有来0 sigfillset()把所有的所有信号都设置为1 sigaddset()sigdelset()增加和删除信号集中的信号 sigprocmask()所对应的信号集的内容 sigmember() 信号集中的信号集为1、表示在占用,其他信号集的1都是阻塞状态 

sigprocmask()所对应的信号集的内容

newmask信号集通过add函数变成了1 ,然后通过sigprocmask 设置信号为屏蔽里面的信号

oldmask 是0 信号集,最后在设置会不屏蔽,然后阻塞的就可以进来 调用信号

相关内容

热门资讯

一分钟内幕!科乐吉林麻将系统发... 一分钟内幕!科乐吉林麻将系统发牌规律,福建大玩家确实真的是有挂,技巧教程(有挂ai代打);所有人都在...
一分钟揭秘!微扑克辅助软件(透... 一分钟揭秘!微扑克辅助软件(透视辅助)确实是有挂(2024已更新)(哔哩哔哩);1、用户打开应用后不...
五分钟发现!广东雀神麻雀怎么赢... 五分钟发现!广东雀神麻雀怎么赢,朋朋棋牌都是是真的有挂,高科技教程(有挂方法)1、广东雀神麻雀怎么赢...
每日必看!人皇大厅吗(透明挂)... 每日必看!人皇大厅吗(透明挂)好像存在有挂(2026已更新)(哔哩哔哩);人皇大厅吗辅助器中分为三种...
重大科普!新华棋牌有挂吗(透视... 重大科普!新华棋牌有挂吗(透视)一直是有挂(2021已更新)(哔哩哔哩)1、完成新华棋牌有挂吗的残局...
二分钟内幕!微信小程序途游辅助... 二分钟内幕!微信小程序途游辅助器,掌中乐游戏中心其实存在有挂,微扑克教程(有挂规律)二分钟内幕!微信...
科技揭秘!jj斗地主系统控牌吗... 科技揭秘!jj斗地主系统控牌吗(透视)本来真的是有挂(2025已更新)(哔哩哔哩)1、科技揭秘!jj...
1分钟普及!哈灵麻将攻略小,微... 1分钟普及!哈灵麻将攻略小,微信小程序十三张好像存在有挂,规律教程(有挂技巧)哈灵麻将攻略小是一种具...
9分钟教程!科乐麻将有挂吗,传... 9分钟教程!科乐麻将有挂吗,传送屋高防版辅助(总是存在有挂)1、完成传送屋高防版辅助透视辅助安装,帮...
每日必看教程!兴动游戏辅助器下... 每日必看教程!兴动游戏辅助器下载(辅助)真是真的有挂(2025已更新)(哔哩哔哩)1、打开软件启动之...