并发服务器 典型模型

常见多线程并发服务器编程模型 一、3点基础知识 1、一个主机的端口号为所有进程所共享,但普通用户进程绑定不了一些特殊端口号如20、80等。  2、每个进程都有自己的文件描述符(包括file fd, socket fd, timer fd, event fd, signal fd),一般是1024,可以通过ulimit -n 设置,但所有进程打开的文件描述符总数有上限,跟主机的内存有关。 3、一个进 阅读详情
#include "header.h"



#define MAXBUF 1024

typedef struct sockaddr SA;



void child_function(int connect_fd);



void child_function(int connect_fd)

{

			char buffer[MAXBUF];

			

			memset(buffer,'\0',sizeof(buffer));

			if(read(connect_fd,buffer,sizeof(buffer)) < 0)

			{

				perror("read error");

				exit(-1);

			}



			printf("the client message :%s\n",buffer);



			int i;

			for(i = 0; i < strlen(buffer); i++)

			{

				buffer[i] = toupper(buffer[i]);

			}



			if(write(connect_fd,buffer,strlen(buffer)) < 0)

			{

				perror("write error");

				exit(-1);

			}

			close(connect_fd);

}



int main(void)

{

	int listen_fd,connect_fd;

	struct sockaddr_in serveraddr,clientaddr;

	socklen_t addrlen;

	pid_t pid;



	if((listen_fd=socket(AF_INET,SOCK_STREAM,0)) == -1)

	{

		perror("socket fail");

		exit(-1);

	}

  

	memset(&serveraddr,0,sizeof(serveraddr));

	serveraddr.sin_family=AF_INET;

	serveraddr.sin_port=htons(8000);

	serveraddr.sin_addr.s_addr=inet_addr("127.0.0.1");

	



	if(bind(listen_fd,(SA *)&serveraddr,sizeof(serveraddr)) == -1)

	{

		perror("bind fail");

		exit(-1);

	}

	if(listen(listen_fd,10) == -1)

	{

		perror("listen fail");

		exit(-1);

	}

	while(1)

	{

		addrlen = sizeof(clientaddr);

		if((connect_fd=accept(listen_fd,(SA *)&clientaddr,&addrlen)) == -1)

		{

			perror("accept fail");

			exit(-1);

		}

		printf("a new connection :%d\n",connect_fd);

		if((pid = fork()) == 0)

		{

			close(listen_fd);

			child_function(connect_fd);

			exit(0);

		}else if(pid < 0)

		{

			perror("fork");

			break;

		}else

		{

			close(connect_fd);

		}

	}

	close(listen_fd);

}


7种常见网络并发模型介绍 对于网络服务器后端开发,为满足不同并发场景的需要,一般来说,不外乎几种常见的并发模型,除了一些教学场景常用的单线程、多进程(线程)的服务器实现外,生产用的服务器,一般都会考虑使用IO多路复用模型。而常见的IO多路复用场景 ,可以设计得很简单,也可以设计得比较复杂,一般根据业务需要而定。本文总结了一些比较常见的服务器并发模型,基本涵盖了 大部分业务场景。在实际业务开发的技术选型时,可根据场景,选取一款稳定、可靠的网络模型,还是十分关键的。 阅读详情

相关推荐

并发服务器的三种实现模型测试代码

Linux 网络编程——并发服务器的三种实现模型,相关教程如下: http://blog.youkuaiyun.com/tennysonsky/article/details/45671215

服务器并发模型

单循环服务器:服务器在同一时刻只能响应一个客户端的请求并发服务器模型:服务器在同一时刻可以响应多个客户端的请求UDP:无连接TCP:有连接1.多进程资源空间消耗大效率低2.多线程相对进程资源消耗小效率较高3.IO多路复用:为了解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调用。优势:系统开销小,系统不需要建立新的进程或者线程,也不必维护这些线程和进程。多进程并发服务器多线程并发服务器。

m0_70493759的博客 1346

Python逆向爬取Tik Tok,MsToken,X-Bogus以及signature

tiktok作为字节海外的自媒体平台,具有很非常大的价值,本文旨在教会大家实现Tik Tok的签名获取以及数据的最终爬取。

weixin_74305707的博客 3268

并发服务器模型

1.tcp并发服务器模型 服务器接收到客户端请求后,建立线程,进行处理;  I/O多路复用并发服务器模型: int select(int nfds, fd_set *readfds, fd_set *writefds,                   fd_set *exceptfds, struct timeval *timeout); void FD_CLR(int fd

xyc310898673的专栏 600

【近源攻击】badusb制作

BadUSB是利用伪造HID设备执行攻击载荷的一种攻击方式。HID(Human InterfaceDevice)设备通常指的就是键盘鼠标等与人交互的设备,用户插入BadUSB,就会自动执行预置在固件中的恶意代码。BadUsb插入后,会模拟键盘鼠标对电脑进行操作,通过这些操作打开电脑的命令终端,并执行一条命令,这条命令将从指定网址下载其他代码并于后台静默运行。这些代码功能包括:窃取信息、反弹shell、发送邮件等,从而实现控制目标机或者窃取信息的目的。

qinjilll的博客 2547

STM32多模式智能小车状态机设计与中断优先级实践

在嵌入式实时系统中,状态机是实现多任务协同与功能切换的核心范式。其本质是通过有限状态集合、明确转移条件和确定性动作,构建可预测、易维护的控制逻辑。基于STM32等资源受限MCU时,需兼顾状态调度效率、中断并发安全与硬件资源约束。关键技术价值体现在:提升系统模块解耦度、支持物理按键与蓝牙双源触发、保障实时响应不丢帧。典型应用场景包括智能小车多模运行(循迹、避障、遥控、定距跟随等)、工业设备工作模式切换及IoT终端低功耗状态管理。本文以STM32F103C8T6平台为例,深入解析全局模式变量设计、双通道状态切换

weixin_42509888的博客 93

【网络编程】并发服务器模型

同一个时刻可以响应多个客户端的请求,常用的模型有多进程模型/多线程模型/IO多路复用模型。

当实力撑不起野心的时候 学习才是唯一出路 541

逆向分析美团外卖mtgsig3.0签名算法:从抓包到算法还原实战

在移动应用开发与安全领域,API接口签名是保障数据传输完整性与身份验证的核心机制。其基本原理是通过特定的算法,将请求参数、时间戳等数据与密钥结合,生成唯一的签名串,服务器通过验证签名来识别请求的合法性。这项技术的核心价值在于防止数据篡改、重放攻击和未授权访问,是构建安全客户端-服务器通信的基石。在实际应用中,签名算法广泛应用于电商、社交、金融等各类App的接口保护场景。本文以美团外卖App的mtgsig3.0签名为具体案例,详细拆解了其生成逻辑。通过结合Frida动态调试与Jadx静态分析,文章深入探讨了如

weixin_29325515的博客 1236

网络编程-----服务器(多路复用IO 和 TCP并发模型)

每次调用需要从用户态复制整个fd_set到内核态,时间复杂度O(n)限制(通常1024),超出会导致未定义行为。可以从客户端读取数据,也可以自身从键盘输入。

2401_84382970的博客 1514

ESP32编译卡在‘Cannot establish a connection to the component registry’?别急着重装,先试试这两个国内镜像配置

本文详细解析了ESP32编译过程中常见的‘Cannot establish a connection to the component registry’报错问题,并提供了国内镜像源的配置方案。通过对比Gitee、清华大学、阿里云和中科大等镜像源的性能,帮助开发者快速解决网络连接问题,提升编译效率。文章还包含手把手的配置教程和进阶技巧,适用于ESP-IDF开发环境的优化。

weixin_34088048的博客 341

加密算法:深度解析Ed25519原理

在 Solana 开发过程中,我一直对 Ed25519 加密算法 如何生成公钥、签名以及验证签名的机制感到困惑。为了弄清这一点,我查阅了大量相关资料,终于对其流程有了更清晰的理解。在此记录实现过程,方便日后查阅。

盹猫的博客 1万+

【转】常用服务器模型总结

UNPv3上一共总结了9种服务器模型分别是: 1.迭代服务器 2.并发服务器,为每个客户fork一个进程 3.预先派生子进程,每个子进程都调用accept,accept无上锁保护 4.预先派生子进程,以文件锁的方式保护accept 5.预先派生子进程,以线程互斥锁上锁的方式保护accept 6.预先派生子进程,由父进程向子进程传递套接口描述字 7.并发服务器,为每...

weixin_30588675的博客 93

功能安全实战系列12-英飞凌TC3xx锁步核及其自检开发

本文介绍了英飞凌Tricore系列芯片的锁步核(Lockstep Core)功能及其故障注入自检机制。锁步核通过主核和检查核同步执行指令,并比较输出结果来检测硬件故障。文章详细阐述了锁步核的工作原理、使能配置方法以及故障注入自检的实现过程。故障注入测试通过专用寄存器LCLTEST触发,系统会定期自动测试比较器节点,验证锁步核的故障检测能力。当检测到异常时,会触发SMU模块的警报机制。该技术为汽车电子系统提供了重要的功能安全保障。

initiallizer的博客 918

网络编程之并发服务器,分布服务器

一、并发服务器,分布式服务器(结构) 什么是分布式系统架构 分布式系统架构简单的说是运行在多个处理器上的软件构架设计。 分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。 网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统。 架构,又名软

best_fiends_zxh的博客 439

英飞凌TC3xx之一起认识GTM系列(一)先来认识GTM架构

本文讲述英飞凌TC3xx的通用计时器GTM的架构。

无所适从的我的博客 4595

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

UNIX网络编程——常用服务器模型总结

下面有9种服务器模型分别是:迭代服务器。并发服务器,为每个客户fork一个进程。预先派生子进程,每个子进程都调用accept,accept无上锁保护。预先派生子进程,以文件锁的方式保护accept。 预先派生子进程,以线程互斥锁上锁的方式保护accept。预先派生子进程,由父进程向子进程传递套接口描述字。 并发服务器,为每个客户请求创建一个线程。预先创建线程,以互斥锁上锁方式保护accept。 预

ctthuangcheng 1989

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Linux c==网络编程的理论知识-并发服务器,分布式服务器(34)

9、并发服务器,分布式服务器(结构)什么是分布式系统架构 分布式系统架构简单的说是运行在多个处理器上的软件构架设计。 分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。 网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统。 架构,又名软件架构,是有关软件整体

女王有颗钻石心 721

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

五种典型IO模型学习笔记

五种典型IO阻塞IO非阻塞IO信号驱动IO异步IO前四种IO模型对比多路转接IO多路转接IO的实现模型select模型: 阻塞IO 阻塞IO: 发起IO调用后,若当前不具备IO条件则阻塞等待。 流程非常简单,一次只能进行一个IO,多个IO的情况下,过程是串行的。进程对cpu利用率不高(因为可能有大量的时间在等待IO就绪) 非阻塞IO 非阻塞IO : 发起IO调用后,若当前不具备IO 条件,则立即...

qq_43735092的博客 426

有代表性的并发服务器端模型

如果服务器不能并发,那么排在后面的客户端将会等待,直到前面的客户端的服务请求被一一处理完毕,而且网络程序中数据通信时间比CPU运算时间占比更大,因此,向多个客户端提供服务是一种有效利用CPU的方式 有代表性的并发服务器端模型:: 1、多进程服务器:通过创建多个进程来同时提供服务 2、多路复用服务器:通过捆绑并统一管理I/O对象提供服务 3、多线程服务器:通过生成与客服端等量的线程提供服

早起的虫儿灬 271

41、Linux 网络编程并发模型总结(select / epoll / fork / pthread)

本文总结了Linux网络编程的四种并发模型:select、epoll、fork和pthread。实验基于Linux(Ubuntu)环境,采用TCP协议通信。select通过文件描述符集合实现I/O多路复用,适合小规模并发;epoll采用事件驱动模型,支持高并发;fork通过创建子进程处理连接,稳定性好但开销大;pthread通过线程处理连接,需处理同步问题。四种模型各有特点:select简单但并发能力低,epoll高性能但仅支持Linux,fork稳定但资源消耗大,pthread灵活但需处理线程安全。实际应

weixin_46607526的博客 862

TCP 并发服务器

原型:int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);服务端需要连接多个客户端时,服务器需要使用accept等待三次握手连接,同时还需要recv等待接受所有客户端发送的数据,由于accept和recv都是阻塞IO,所以导致程序逻辑无法编写。用一个函数接口监听多个文件描述符是否产生IO事件,只要其中一个产生事件,则不再阻塞,用户可以处理对应的事件。

2603_94905394的博客 428

【项目篇】高并发服务器 - Reactor模型详解

本篇文章主要介绍了Reactor模型:单Reactor单线程,单Reactor多线程,多Reactor多线程,以及基于One Loop Per Thread模型的主从Reactor高并发服务器

2301_81290732的博客 749

【DAY27】Linux 系统 IO 模型与多路复用技术的 TCP 并发服务器实现研究

本文介绍了TCP并发服务器的实现方法,重点分析了Linux系统的4种IO模型。针对传统线程/进程模型资源消耗大的问题,详细阐述了多路复用技术,比较了select、poll和epoll三种实现方式的优缺点:select存在1024文件描述符限制和性能问题;poll使用链表结构但仍有性能缺陷;epoll采用内核事件表,支持水平/边沿触发模式,效率最高。文章还系统讲解了fcntl、select、poll和epoll系列函数的使用方法,包括参数说明和返回值处理,为开发高性能TCP并发服务器提供了技术参考。

2503_92576274的博客 238

TCP并发服务器与I/O多路复用(select)

多线程/多进程模型为每个客户端创建一个独立的线程或进程,在每个线程内部使用阻塞I/O。这样,一个客户端的阻塞不会影响其他客户端。优点:编程简单直观。缺点:资源开销大(每个连接占用一个线程/进程),当连接数巨大时系统难以承受。I/O多路复用模型通过一个系统调用同时监视多个文件描述符,一旦某个描述符就绪(可读/可写/异常),就通知应用程序进行处理。优点:只需一个线程即可管理大量连接,资源消耗小。缺点:编程相对复杂。通过select。

senijusene的博客 892
上一篇: 多路复用 循环服务器模型
下一篇: TCP ftp服务器模型 《超经典》
MrBugYang
博客等级 码龄18年 21粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值