
c++ 服务器开发
文章平均质量分 90
学习服务器开发的记录
xiaoxiao涛
从头开始学习计算机技术!!!
展开
-
Webbench阅读
Webbench工具原创 2022-09-08 18:01:46 · 242 阅读 · 0 评论 -
Tinyhttpd源码阅读
文章目录简介tinyhttpd的职责http请求和响应报文格式请求响应运行代码代码执行流程源代码windows版简介tinyhttpd 是一个超轻量型 Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,用来学习非常不错,可以通过阅读这段代码理解一个 Http Server 的本质。tinyhttpd的职责接收客户端链接读取客户端发送的信息解析请求处理请求(可能会执行对应的脚本)返回响应http请求和响应报文格式参照菜鸟教程请求一原创 2021-03-03 18:23:43 · 569 阅读 · 1 评论 -
TCP粘包原因及解决办法
1、粘包的概念粘包:多个数据包被连续存储于连续的缓存中,在对数据包进行读取时由于无法确定发生方的发送边界,而采用某一估测值大小来进行数据读出,若双方的size不一致时就会使指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。2、出现粘包的原因出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成。发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一包数据。若连续几次发送的数据都很少,通原创 2021-01-20 02:50:18 · 18938 阅读 · 0 评论 -
windows socket网络编程六:完成端口模型
文章目录分析服务器创建完成端口绑定端口与SOCKET创建线程线程内部代码投递accept、send、recv运行结果模型流程图源码链接分析我们的重叠IO模型还有什么问题吗?去掉我编写时候的逻辑bug,就网络模型来说主要问题还有:循环询问,延迟高,做了很多无用功采用多线程,数量可能太多,我们很难管理,切换线程消耗大量cpu资源/时间那最优线程数量是多少?网上的几种答案:CPU核数CPU核数*2CPU核数*2+2其中CPU核数*2+2 这个数量,是根据实际应用中的经验得来。线程函原创 2021-01-05 01:57:28 · 1990 阅读 · 13 评论 -
windows socket网络编程五:重叠IO模型
文章目录分析事件通知重叠IO结构体创建支持重叠IO的socket投递异步Accept投递异步Recv投递异步Send询问事件获取重叠信号分类处理运行结果完成例程投递异步Accept投递异步Recv投递异步Send分类处理运行结果模型流程图源码链接分析在解决了select模型本身的同步阻塞问题后,我们还要处理send、recv、accept的执行阻塞。我们socket的操作本质上都是字符串的拷贝复制,重叠IO是windows提供的一种异步读写文件的机制,将读的指令以及我们的buffer投给操作系统,然后原创 2021-01-05 00:41:46 · 1758 阅读 · 0 评论 -
windows socket网络编程四:异步选择模型
文章目录分析服务器异步选择绑定服务器事件绑定客户端事件事件分类处理处理错误处理其他消息问题运行结果模型流程图源码链接分析参考windows消息机制的模型。消息机制:所有的用户操作均依次按顺序(有序处理)被记录,装进一个队列,消息队列由操作系统维护,系统通过我们设置的回调函数处理不同类型的消息。操作系统为每个窗口创建一个消息队列并且维护,所以我们想要使用消息队列,那就要创建一个窗口,该模型只能用于windows,不过我们可以学到这种处理思想。服务器直到开始监听都是一模一样的。创建窗口也不是重点。原创 2021-01-04 16:31:59 · 625 阅读 · 2 评论 -
windows socket网络编程三:事件选择模型
文章目录分析分析前面使用的select模型还有没有问题?首先我们可以发现数组的数量默认为64,也就是说系统也是不希望数组很大的,所以我们处理的链接比较少。然后我们可以看到系统只是帮我们把socket选择出来(循环遍历拷贝也要求数组不能太大,不然效率很低),解决傻等问题,而我们在运行send、recv、accept的时候还是阻塞的,也就是执行阻塞的问题。这个问题我们先放一下,先来看看参考windows事件机制的模型。事件机制:根据需求,我们为用户的特定操作绑定一个事件,事件由我们自己调用API创建原创 2021-01-04 15:16:09 · 1158 阅读 · 0 评论 -
windows socket网络编程二:select模型
文章目录分析服务器定义一个装socket的结构select处理错误处理可写处理可读关闭服务器运行结果源码链接分析我们思考一下前面的程序有什么缺点?我们在调试程序的时候可以发现我们服务器在启动后,如果不打开客户端就一直卡着。乍一看可能没什么问题,因为我们只有一个客户端,如果我们有多个客户端,由于accept、recv是傻等阻塞的,做其中一件事,另外一件事就做不了,在傻傻的等着,服务器完全无法正常工作。解决方法:我们可以给操作系统一组SOCKET,让系统帮我们监视着SOCKET的动向,哪个SOCKE原创 2021-01-04 01:15:08 · 3149 阅读 · 2 评论 -
windows socket网络编程一:最简单的服务器和客户端搭建
文章目录简介服务器网络版本1、打开网络库2、校验版本3、创建socket4、绑定地址和端口5、监听6、接受链接7、与客户端收发消息客户端1、打开网络库2、校验版本3、创建socket4、连接服务器5、与客户端收发消息类比运行结果源码链接遇到的问题头文件冲突简介socket又是什么?将网络底层复杂的协议体系,执行流程,进行了封装后就是SOCKET了,也就是说,SOCKET是我们调用协议进行通信的操作接口,将复杂的协议过程与我们编程人员分开,我们直接操作一个简单SOCKET就行了,对于底层的协议 过程细节原创 2021-01-03 22:07:13 · 8071 阅读 · 2 评论