服务器开发
文章平均质量分 84
ghscarecrow
这个作者很懒,什么都没留下…
展开
-
【服务器系统设计】select函数的用法及其原理总结
在Linux上,为我们提供了三种IO多路复用的函数供我们使用,select函数是网络通信编程中很常用的一个函数。select函数一般用于检测在一组socket中是否有事件准备就绪。select的声明:#include <sys/time.h> //for struct timeval#include <unistd.h> //for select/*** return 状态变化的文件描述符的个数* @param nfds: linux上的socket也是一种原创 2022-04-17 16:03:36 · 755 阅读 · 0 评论 -
【服务器系统设计】socket的阻塞模式和非阻塞模式总结
前言对socket在阻塞和非阻塞模式下各个socket函数的表现进行深入理解,是掌握网络编程的基本要求之一,也是重点和难点。在阻塞和非阻塞模式下,我们常常讨论的具有不同行为表现的socket函数一般有connect,accept,send和recv。定义阻塞模式:指的是当某个函数执行成功的条件当前不满足时,该函数会阻塞当前执行线程,程序执行流在超时时间到达或执行成功的条件满足后恢复继续执行。非阻塞模式:即使某个函数执行成功的条件不满足,该函数也不会阻塞当前执行线程,而是立即返回,继续执行程序流。原创 2022-04-10 15:05:50 · 5937 阅读 · 0 评论 -
【服务器系统设计】缓冲区的设计总结
为什么需要发送缓冲区和接收缓冲区网络层在发送数据的过程中,由于TCP窗口太小,会导致数据无法发送出去,而上层可能源源不断地产生新的数据,此时就需要将数据先存储起来,以便等到socket可写时再次发送,这个存储数据的地方就叫做发送缓冲区。对于接收缓冲区也是一样的道理,在收到数据后,我们可以直接对其进行解包,但是这样做不好,有三个理由理由一:除去一些通用的协议格式,大多数业务都是采用的自定义协议格式,也就是说对一个数据包里面的数据格式的解读应该是业务层应该做的。不同的业务一般有不同的协议格式,协议格式与具原创 2022-01-22 22:07:54 · 1673 阅读 · 0 评论 -
【服务器系统设计】收包时粘包问题的处理
在计算机技术体系中存在很多网络通信协议。那么通信协议的本质究竟是什么呢?其实,通信协议实质上就是一段数据,通信双方事先约定好按照规定的格式去编码和解码,最终达到传输消息的目的。而对通信协议的设计与处理其中隐藏着许多问题从TCP协议说起TCP是一种流式协议,所谓流式协议就是说协议的内容是流水一样的字节流,内容与内容之间没有明确的分界标志,需要我们人为地给这些内容划分边界。如果没有人为地划分边界,那会发生什么问题呢?举个例子,A和B进行TCP通信,A先后给B发送了两个大小分别是100字节和200字节的数原创 2022-01-22 17:39:33 · 2199 阅读 · 0 评论