首页
Serica
取消

「网络编程101」事件驱动,有模有样!

开始基于事件编程 有了poll和epoll提供的事件通知机制,我们可以开始基于事件驱动编程了!基于事件驱动,我们可以构建出一个简单的网络编程框架,常见的设计模式包括Reactor模式。 Reactor模式 意会一下Reactor模式的名字,我们可以感受到这个设计模式的核心是“对事件作出反应”。例如,当有读事件(文件描述符可读)产生时,我们开始读取;有写事件产生时,开始写入。进程在没有事...

「网络编程101」提升效率,减少等待!

上一篇文章实现的简单服务器中,所有的操作都是阻塞式的。服务器运行时,要等待一个I/O事件完成后才能继续下一个I/O事件。当有多个I/O事件要处理时,这些I/O事件要排队处理。即使后来的I/O事件是已就绪状态,可以立马处理完成的,也无法得到服务器的优先响应。例如,服务器要处理来自两个客户端的请求。当前处理的请求在使用write向客户端返回消息时,由于TCP的发送缓冲区满了而陷入等待,而另一个客...

「网络编程101」来封装一个简单的TCP服务吧!

我们已经熟悉了Linux中的TCP状态机与网络编程模型,让我们来简单回顾一下:无论是客户端还是服务器,我们都要先使用socket函数申请一个套接字作为与网络交互的交界面。对于服务器进程而言,为了让别人在熟知端口上找到自己,使用bind与端口号绑定,然后使用listen通知操作系统这是一个“被动”的套接字,外界有网络数据包发往这个套接字对应的端口时,请帮忙转发。使用accept函数可以获取一个...

TCP状态机和Linux网络编程

TCP协议是传输层的可靠数据传输协议,是有连接、面向字节流的。TCP协议支持流量控制和拥塞控制,是一种广泛应用的协议。 与停等协议、比特交换协议等可靠传输协议类似,TCP协议也可以用状态机来表示。在Linux中,用了11种状态表示TCP协议的执行,便于人们了解当前连接处于什么阶段。当然,实际中TCP的行为比状态机中的更复杂,与实现可靠传输、流量控制和拥塞控制相关的状态被省略了。 TCP状...