
项目WebServer
文章平均质量分 54
OpenSani
这个作者很懒,什么都没留下…
展开
-
Linux中write和writev的区别,write() vs writev()
Linux中write和writev()的区别:我觉得StackOverflow上面的回答写的很好,see: write vs writev下面是我自己的总结:函数原型:write#include <unistd.h>ssize_t write(int fd, const void *buf, size_t count);表示从buf开始的缓冲区向文件描述符fd所引用的文件写入count字节数。writev#include <sys/uio.h>ssize_t原创 2021-12-15 22:20:05 · 3724 阅读 · 0 评论 -
C/Linux语言里面strcpy和strncpy的区别
在Linux系统下,可以去man文档查看,输入man 3 strcpy就有关于他们的详细解释,我觉得看这个就够了。摘录如下:描述:#include <string.h>char *strcpy(char *dest, const char *src);char *strncpy(char *dest, const char *src, size_t n);都表示从源字符串拷贝到目标字符串参数含义:dest表示目标字符串,src表示源字符串,对于strncpy,n表示原创 2021-12-15 21:39:44 · 1834 阅读 · 0 评论 -
webserver项目里面涉及到的http知识
webserver项目里面涉及到的http知识HTTP 请求报文格式HTTP响应报文格式HTTP请求方法有限状态机HTTP 请求报文格式分为请求行,请求头,请求数据三部分,具体形式如下HTTP响应报文格式包括状态行,响应头,响应正文三部分HTTP请求方法HTTP/1.1 协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:GET:向指定的资源发出“显示”请求。使用 GET 方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在 Web Application原创 2021-12-15 19:45:11 · 1435 阅读 · 0 评论 -
网络编程里面什么是逻辑单元?
首先要了解一下服务器编程的基本框架:服务器程序种类繁多,但其基本框架都一样,不同之处在于逻辑处理。如下图所示:单元功能I/O 单元处理客户连接,读写网络数据网络存储单元存储数据,如数据库请求队列各单元之间的通信方式逻辑单元处理业务逻辑比如对于一个http服务器,他的逻辑单元就是处理http请求,其他涉及到IO操作(读写数据),存储(数据库)等不是他要干的事参考资料:Linux高性能服务器编程 游双...原创 2021-12-15 16:39:38 · 1717 阅读 · 0 评论 -
C/C++语言中的assert函数用法
C库中的宏assert允许将诊断信息写入标准错误文件。也就是它可以用于在C程序中添加诊断程序。声明:void assert(int expression);expression——可以是变量或任意C表达式。如果expression的计算结果为TRUE,则assert()不执行任何操作。如果expression的计算结果为FALSE,则assert()在标准错误流(用于显示错误消息和诊断的标准错误流)上显示错误消息,并中止程序执行。举个例子:see: assert geeksforgeeks#inc原创 2021-12-14 11:31:18 · 4200 阅读 · 0 评论 -
Webbench 原理及其优缺点
提示:网上搜索webbench有很多网站,大家还是到原网址去下载以防下载病毒软件。webbench的原网址:webbench原网址原理:详细可以参考:webbench剖析基本原理:Webbench 首先 fork 出多个子进程,每个子进程都循环做 web 访问测试。子进程把访问的结果通过pipe 告诉父进程,父进程做最终的统计结果。编译安装1.wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz2.tar zxv原创 2021-12-13 21:29:39 · 4088 阅读 · 0 评论 -
Reactor模式,Proactor模式以及采用Reator模拟Proactor模式详解,以及他们在网络IO处理中的应用
关于Reactor模式和Proactor模式原理性的详细介绍可以参见:如何深刻理解Reactor和Proactor? - 小林coding的回答 - 知乎不管是Reactor模式还是Proactor模式都是事件驱动模式,采用了面向对象的思想,如果是IO复用的方式实现高并发是基于面向过程的思想。Reactor模式是一种同步IO模式,什么是同步IO操作什么是异步IO操作可以参见UNP 卷1 P126:同步IO操作导致请求进程阻塞,直到IO操作完成。对于不同类型的IO模型(Linux下有四种,可以看我的原创 2021-12-13 21:04:49 · 1450 阅读 · 0 评论 -
C语言中的回调函数(callback function)
网络上有很多对于对于回调函数的解释,还有人做了一些很有意思的比喻,比如下面这个:回调函数(callback)是什么? - no.body的回答 - 知乎打个比方,有一家旅馆提供叫醒服务,但是要求旅客自己决定叫醒的方法。可以是打客房电话,也可以是派服务员去敲门,睡得死怕耽误事的,还可以要求往自己头上浇盆水。这里,“叫醒”这个行为是旅馆提供的,相当于库函数,但是叫醒的方式是由旅客决定并告诉旅馆的,也就是回调函数。而旅客告诉旅馆怎么叫醒自己的动作,也就是把回调函数传入库函数的动作,称为登记回调函数(to re原创 2021-12-13 15:41:30 · 1703 阅读 · 0 评论 -
Unix下的五种IO模型是什么?区别是什么?
Unix下有5种IO模型:阻塞IO针对阻塞IO的系统调用(如read, write)可能因为无法完成而被系统挂起,直到等待的事件发生为止。通俗的解释,用户进程(也有叫应用进程的)需要进行IO操作,如调用read,如果内核中的数据没有准备好,用户进程就阻塞,直到内核数据拷贝到了用户缓冲区,用户进程才返回。采用这种方式在需要进行IO的进程很多的时候,由于大部分的进程都是处于阻塞状态,会带来很大的进程切换开销,和内存开销。非阻塞IO针对非阻塞IO的系统调用总是立刻返回,不管事件是否发生,如果事件原创 2021-12-12 22:05:04 · 485 阅读 · 0 评论 -
Linux中的信号驱动IO模型是什么?有什么优势?
首先要开启套接字的信号驱动 IO功能,并通过sigaction系统调用安装一个信号处理函数,该系统调用立即返回,进程继续运行并不阻塞,当IO事件就绪(也就是数据报准备好读取时),内核为该进程产生一个SIGIO信号,进程收到SIGIO 信号,然后处理 IO 事件。这种IO模型的优势在于在等待数据的过程中进程可以不用阻塞,只要等待信号处理函数的通知。...原创 2021-12-12 20:11:45 · 626 阅读 · 0 评论 -
什么是IO多路复用?为什么需要IO多路复用?
首先,多路复用(multiplexing) 是计算机里面很常见的一个概念,我觉得他的核心思想就是利用一组资源做很多件事。常见的多路复用(multiplexing)除了网络编程里面的IO多路复用;还有计算机网络的时分多路复用,频分多路复用;还有操作系统里面的时间复用(Time multiplexing,指在多个用户之间安排连续可重用的资源如CPU ),空间复用(Space multiplexing ,将多用途资源分配给几个用户,如内存(虚拟内存),磁盘空间(文件系统))这里详见:https://sites.原创 2021-12-12 19:09:59 · 5631 阅读 · 0 评论 -
阻塞IO和非阻塞IO的区别
定义非官方定义:我个人理解阻塞就是执行系统调用的进程或者线程被挂起。阻塞IO:称阻塞的文件描述符为阻塞IO非阻塞IO:称非阻塞的文件描述符为非阻塞IOsee: Linux高性能服务器编程 游双 P126区别阻塞IO针对阻塞IO的系统调用(如read, write)可能因为无法完成而被系统挂起,直到等待的事件发生为止。举例:read和write,通常IO操作都是阻塞I/O的,也就是说当你调用read时,如果没有数据收到,那么线程或者进程就会被挂起,直到收到数据。坏处:see: I/O多路复原创 2021-12-12 11:26:02 · 7981 阅读 · 0 评论 -
线程池的概念以及原理
池的概念池(pool)是一组资源的集合,这组资源在服务器启动之初就被完全创建好并且初始化,称之为静态资源分配,当服务器开始运行的时候如果需要相关的资源,可以直接从池中获取,无需动态资源分配。池的好处池事实上是一种以空间(硬件资源消耗)换取效率的作法。当服务器需要相关资源的时候可以直接从池中获取,释放资源的时候直接释放回池里,如果不采用池的技术,动态分配资源会产生很大的系统调用开销,需要对内核频繁访问。池的类型根据资源的不同,分为内存池,进程池,线程池,连接池等。线程池根据上面的定义,就是指资源原创 2021-12-11 23:11:31 · 225 阅读 · 0 评论