linux并发服务器 —— 项目实战(九)

这篇具有很好参考价值的文章主要介绍了linux并发服务器 —— 项目实战(九)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

阻塞/非阻塞、同步/异步

数据就绪 - 根据系统IO操作的就绪状态

阻塞 - 调用IO方法的线程进入阻塞状态(挂起)

非阻塞 - 不会改变线程的状态,通过返回值判断

数据读写 - 根据应用程序和内核的交互方式

同步 - 数据的读写需要应用层去读写

异步 - 操作系统提供相应服务

阻塞/非阻塞都是同步IO,只用使用了特殊API才是异步IO;

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

五种IO模型

阻塞

调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停的去检查这个函数有没有返回,必须等这个函数返回才能进行下一步动作。

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

非阻塞

非阻塞等待,每隔一段时间就去检测10事件是否就绪(代码轮询)。没有就绪就可以做其他事。非阻塞IO执行系统调用总是立即返回,不管事件是否已经发生,若事件没有发生,则返回-1,此时可以根据errno区分这两种情况,对于accept,recv和send,事件未发生时,errno通常被设置成EAGAIN。

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

IO复用

Linux用 select/pol/epol函数实现IO复用模型,这些函数也会使进程阻塞,但是和阻塞IO所不同的是这些函数以同时阻塞多个IO操作。而且可以同时对多个读操作、写操作的IO函数进行检测。直到有数据可读或可写时,才真正调用IO操作函数。

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

信号驱动

Linux 用套接口进行信号驱动IO,安装一个信号处理函数,进程继续运行并不阻塞,当IO事件就绪,进程收到SIGIO信号,然后处理IO事件

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

第一阶段是异步,第二阶段是同步,通过消息通知机制提高了效率;

异步IO

Linux中,可以调用 aio_read 函数告诉内核描述字缓冲区指针和缓冲区的大小、文件偏移及通知的方式,然后立即返回,当内核将数据拷贝到缓冲区后,再通知应用程序。

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

Web服务器简介及HTTP协议

一个Web Server就是一个服务器软件,或者运行这个服务器软件的硬件。主要功能是通过HTTP协议与客户端(浏览器)进行通信,接收、存储、处理来自客户端的HTTP请求;

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

通常用户使用 Web 浏览器与相应服务器进行通信。在浏览器中键入"域名”或P地址:端口号”,浏览器则先将你的域名解析成相应的 P 地址或者直接根据你的IP地址向对应的 Web 服务器发送一个 HTTP 请求。这一过程首先要通过TCP 协议的三次握手建立与目标 Web 服务器的连接,然后 HTTP 协议生成针对目标 Web 服务的 HTTP 请求报文,通过 TCP、IP 等协议发送到目标 Web 服务器上。

HTTP协议(应用层的协议)

超文本传输协议 (Hypertext Transfer Protocol,HTTP) 是一个简单的请求-响应协议,它通常运行在TCP 之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以 ASCI I形式给出;而消息内容则具有一个类似 MIME 的格式。HTTP是万维网的数据通信的基础。(默认端口80)

请求响应步骤

1. 客户端连接Web服务器

2. 发送HTTP请求

3. 服务器接受请求并返回HTTP响应

4. 释放TCP连接

5. 客户端浏览器解析HTML内容

HTTP请求格式

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

请求方法:GET\HEAD\POST\PUT\DELETE\TRACE\OPTIONS\CONNECT;

HTTP响应格式

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

服务器编程基本框架和两种高效的事件处理模式

服务器编程基本框架

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

IO处理单元 - 处理客户连接、读写网络数据

逻辑单元 - 业务进程或线程

网络存储单元 - 数据库、五年间或缓存

请求队列 - 各单元之间的通信方式

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

两种高效的事件处理模式

服务器程序通常需要处理三类事件:IO事件、信号、定时事件;

两种高效的处理模式

同步IO模式 - Reactor模式

异步IO模式 - Practor模式

Reactor模式

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

Proactor模式

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

模拟Proactor模式(项目采用的方法)

  linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

线程同步机制类封装及线程池实现

线程池 - 防止无休止的创建/销毁线程

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

linux并发服务器 —— 项目实战(九),服务器,运维,websocket,c++,linux,网络

线程池中的线程数最直接的限制因素是CPU的处理器数量;CPU密集型任务最好等于核,IO密集型任务一般多余CPU核心数;不至于在线程处理IO过程中造成CPU空闲,导致浪费;

为什么使用线程池

1. 空间换时间,通过硬件资源换取运行效率;

2. 这组资源在服务器启动之初就完全创建初始化 - 静态资源;

3. 可以直接从池中拿,无需资源动态分配;

4. 处理完一个客户连接后,将相关资源放池中,无需系统调用释放资源;文章来源地址https://www.toymoban.com/news/detail-703277.html

到了这里,关于linux并发服务器 —— 项目实战(九)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++linux高并发服务器项目实践 day4

    int access(const char * pathname ,int mode); int chmod(const char * filename,int mode); int chown(const char* path,uid_t owner,gid_t group); int truncate(const char* path,off_t length); #include unistd.h int access(const char *pathname, int mode); 作用:判断某个文件是否有某个权限,或者判断文件是否存在 参数: pathname:判断文件路

    2023年04月16日
    浏览(46)
  • C++linux高并发服务器项目实践 day2

    库的定义和特点详情请看隔壁c++阶段学习的day10查看 Linux: libxxx.a lib:固定前缀 xxx:库的名字,自定义 .a:固定后缀 windows:libxxx.lib gcc获得.o文件 将.o文件打包,使用ar工具(archive) ar rcs libxxx.a xxx.o xxx.o r- 将文件插入备存文件中 c-建立备存文件 s-索引 sudo apt install tree 安装tree插件,用

    2023年04月20日
    浏览(39)
  • C++linux高并发服务器项目实践 day5

    程序 是包含一系列信息的文件,这些信息描述了如何在运行时创建一个进程: 程序是文件,只占用硬盘的大小;进程会占用cpu和内存资源 进程 是正在运行的程序的实例。是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。他是操作系统动态执行的基本单元,

    2023年04月17日
    浏览(42)
  • 【项目实战】基于netty-websocket-spring-boot-starter实现WebSocket服务器长链接处理

    项目中需要建立客户端与服务端之间的长链接,首先就考虑用WebSocket,再来SpringBoot原来整合WebSocket方式并不高效,因此找到了netty-websocket-spring-boot-starter 这款脚手架,它能让我们在SpringBoot中使用Netty来开发WebSocket服务器,并像spring-websocket的注解开发一样简单 2.1.1 @ServerEndpo

    2024年02月12日
    浏览(48)
  • (一)专题介绍:移动端安卓手机改造成linux服务器&linux服务器中安装软件、部署前后端分离项目实战

    总体概述: 本篇文章隶属于“手机改造服务器 部署前后端分离项目”系列专栏,该专栏将分多个板块,每个板块独立成篇 来详细记录:手机(安卓)改造成个人服务器(Linux)、Linux中安装软件、配置开发环境、部署JAVA+VUE+MySQL5.7前后端分离项目,以及内网穿透实现外网访问等全过

    2024年02月04日
    浏览(51)
  • 实战:Prometheus+Grafana监控Linux服务器及Springboot项目

    相信大家都知道一个项目交付生产并不意味着结束,更多的是对线上服务的运维监控。运维监控主要涉及到部署服务器的资源情况,各个子服务的资源情况以及垃圾收集和吞吐量等等,还有故障告警等等功能。当然,作为一个搬砖人也是需要了解全链路的运维监控组件Promet

    2024年02月14日
    浏览(50)
  • Linux项目实战C++轻量级Web服务器源码分析TinyWebServer

    TinyWebServer是Linux下C++轻量级Web服务器,助力初学者快速实践网络编程,搭建属于自己的服务器.作为新手拿它练手入门再好不过的不二之选,项目开发者社长也写了一些文章帮助初学者理解,但是,非学习总结的总是容易忘,这里记录一下学习过程。 源码链接: https://github.co

    2024年02月16日
    浏览(64)
  • 【linux高性能服务器编程】项目实战——仿QQ聊天程序源码剖析

    hello !大家好呀! 欢迎大家来到我的Linux高性能服务器编程系列之项目实战——仿QQ聊天程序源码剖析,在这篇文章中, 你将会学习到如何利用Linux网络编程技术来实现一个简单的聊天程序,并且我会给出源码进行剖析,以及手绘UML图来帮助大家来理解,希望能让大家更能了

    2024年04月28日
    浏览(42)
  • linux并发服务器 —— 多进程并发(四)

    程序是包含一系列信息的文件,描述了如何在运行时创建一个进程; 进程是正在运行的程序的实例,可以用一个程序来创建多个进程; 用户内存空间包含程序代码以及代码所使用的变量,内核数据结构用于维护进程状态信息; 进程控制块(PCB):维护进程相关的信息,tas

    2024年02月11日
    浏览(54)
  • 运维 | 查看 Linux 服务器 IP 地址

    大多数在操作 Linux 系统时,我们经常需要知道服务器的 IP 比便于后续的一系列操作,这时候有快速查看主机 IP 的命令行操作,能够有效的帮助我们 本章节主要记录一些常用查看服务器 IP 的命令,希望对大家有所帮助。 查看 Linux 服务器的 IP 地址的命令大体上有以下几种。

    2024年04月27日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包