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

news2024/11/23 18:40:36

项目是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 信号集,最后在设置会不屏蔽,然后阻塞的就可以进来 调用信号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1894092.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Termius】详细说明MacOS中的SSH的客户端利器Termius

希望文章能给到你启发和灵感~ 如果觉得有帮助的话,点赞+关注+收藏支持一下博主哦~ 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境二、软件的安装2.1 Termius界面介绍2.1.1 Hosts 主机列表2.1.2 SFTP 文件传输2.1.3 Port ForWarding 端口转发2.1.4 Snippets 片…

afrog-漏洞扫描(挖洞)工具【了解安装使用详细】

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 1、afrog介绍 afrog 是一款性能卓越、快速稳定、PoC可定…

全面教程:在Ubuntu上快速部署ZeroTier,实现Windows与VSCode的局域网无缝访问

文章目录 1 背景介绍2 Windows上的操作3 Ubuntu上的操作4 连接 1 背景介绍 在现代工作环境中,远程访问公司内网的Ubuntu主机对于开发者来说是一项基本需求。然而,由于内网的限制,传统的远程控制软件如向日葵和todesk往往无法满足这一需求。作…

【后端面试题】【中间件】【NoSQL】MongoDB查询过程、ESR规则、覆盖索引的优化

任何中间件的面试说到底都是以高可用、高性能和高并发为主,而高性能和高并发基本是同时存在的。 性能优化一直被看作一个高级面试点,因为只有对原理了解得很透彻的人,在实践中才能找准性能优化的关键点,从而通过各种优化手段解决性…

YOLOv5改进 | 损失函数 | EIoU、SIoU、WIoU、DIoU、FocuSIoU等多种损失函数

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录: 《YOLOv5入门 …

VsCode允许JSON文件注释

打开设置 配置 输入:文件关联或者Files: Associations

Qt实现检测软件是否多开

Qt实现检测软件是否多开 在桌面软件开发中,软件通常要设置只允许存在一个进程,像一些熟知的音乐软件,QQ音乐这种。而这些软件在限制只有一个进程的同时,通常还会有双击桌面图标唤醒已运行的后台进程的功能。关于双击桌面唤醒已运…

Android广播机制

简介 某个网络的IP范围是192.168.0.XXX,子网 掩码是255.255.255.0,那么这个网络的广播地址就是192.168.0.255。广播数据包会被发送到同一 网络上的所有端口,这样在该网络中的每台主机都将会收到这条广播。为了便于进行系统级别的消息通知&…

Android使用http加载自建服务器静态网页

最终效果如下图,成功加载了电脑端的静态网页内容,这是一个xml文件。 电脑端搭建http服务器 使用“Apache Http Server”,下载地址是:https://httpd.apache.org/download.cgi。具体操作步骤,参考:Apache …

使用 urllib OpenSSL 时遇到的问题及解决

题意: ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1, currently the ssl module is compiled with LibreSSL 2.8.3 当前使用的 urllib3 版本(v2.0)仅支持 OpenSSL 1.1.1 或更高版本,但你的 Python 环境中的 ssl 模块…

Windows 11 安装 Python 3.11 完整教程

Windows 11 安装 Python 3.11 完整教程 一、安装包安装 1. 下载 Python 3.11 安装包 打开浏览器,访问 Python 官方下载页面。点击“Download Python 3.11”,下载适用于 Windows 的安装包(Windows installer)。 2. 安装 Python 3.11 运行下载的安装包 python-3.11.x-amd6…

django @login_required 为什么会自动重定向到/accounts/login/?next=/myblog/post/new/

在Django中,login_required 装饰器用于确保用户在访问某个视图时已经登录。如果用户未登录,那么Django会自动重定向用户到登录页面。默认情况下,Django使用/accounts/login/作为登录URL。如果用户试图访问一个需要登录的视图,比如…

eNSP-VLAN虚拟局域网

一、出现Vlan的原因 同一个局域网,使用交换机连接,虽然比集线器相连,降低了广播风暴,但是局域网主机数量够多的时候,正常的广播数据(arp、dhcp)也很影响网络性能,所以还需要进一步降低广播风暴——VLAN (图…

Altium Designer专业PCB设计软件下载安装 Altium Designer安装包下载获取

在电子设计的广袤领域中,PCB设计无疑占据着重要的地位。而Altium Designer作为一款业界领先的电子设计自动化软件,其提供的先进布局工具,无疑为设计师们打开了一扇通往高效、精确设计的大门。 在PCB设计的核心环节——布局中,Alti…

xinput1_4.dll丢失怎么办?如何来解决xinput1_4.dll丢失问题

在电脑启动游戏时候经常会出现一些问题导致游戏无法打开运行,其中找不到xinput1_4.dll文件丢失就是常见问题之一,那么当遇到xinput1_4.dll丢失怎么办呢?今天就教大家如何来解决xinput1_4.dll丢失问题。 一、xinput1_4.dll文件详解 XINPUT1_4…

一款优秀、亮眼的开源堡垒机

介绍 在运维的日常工作中,登陆服务器操作不可避免,为了更安全的管控服务器,但凡有点规模的公司都会上线堡垒机系统,堡垒机能够做到事前授权、事中监控、事后审计,同时也可以满足等保合规要求。 提到堡垒机&#xff0…

小白 | 华为云docker设置镜像加速器

一、操作场景 通过docker pull命令下载镜像中心的公有镜像时,往往会因为网络原因而需要很长时间,甚至可能因超时而下载失败。为此,容器镜像服务提供了镜像下载加速功能,帮助您获得更快的下载体验。 二、约束与限制 构建镜像的客…

LVS+Nginx高可用集群--基础篇

1.集群概述 单体部署: 可以将上面内容分别部署在不同的服务器上。 单体架构的优点: 小团队成型就可完成开发,测试,上线 迭代周期短,速度快 打包方便,运维简单 单体架构的挑战:单节点宕机造成…

SecureCRT--使用sftp上传和下载文件

原文网址:SecureCRT--使用sftp上传和下载文件_IT利刃出鞘的博客-CSDN博客 简介 本文介绍SecureCRT如何在软件内直接上传和下载文件。 SecureCRT可以用如下两种方法上传和下载文件: 自带的sftp插件服务器安装rz/sz命令 本文介绍第一种方法&#xff0…

12个视觉艺术分类

视觉设计可以按照多种方式进行分类,这些分类通常基于设计的目的、风格或应用场景。本文为大家介绍12种视觉设计,分别是平面设计、标志设计、包装设计、用户界面设计 (UI Design)、用户体验设计 (UX Design)、插图设计、网页设计、动画设计、展览设计、环…