Linux高性能服务器程序
- 基于epoll多路IO复用
- reactor事件驱动
对于TCP服务器, 只提供接受客户端连接(对于监听文件描述符)和数据收发(对于通信文件描述符)两个功能
不直接对数据进行处理, 而向上提供接口, 由用户决定对收到的数据进行何种处理, 编写要执行的代码, 由
TCP服务程序调用即可
对于通信文件描述符:
- TCP服务程序在可读事件发生时, 将数据读到 读缓冲区(readBuffer)中
- 对读到的数据进行处理(例如本回显程序将字母转换成大写之后发送)
- TCP服务程序在可写事件发生时, 将写缓冲区(writeBuffer)中的数据发出
上面的第2点提到的对读到的数据进行处理的操作就是可以提供给用户使用的接口
在目前的回显程序中, 通信文件描述符可读事件发生时会执行回调函数, 这个读数据函数直接把数据处理和发数据两步包含在其中, 这是不合理的点
改进:
- 将数据处理和发数据分离出来, 读数据到读缓冲区(readBuffer)完成后, 进入数据处理阶段
- 处理完成后, 将数据写到写缓冲区(writeBuffer), 让epoll监控此通信文件描述符的可写事件(只要通信文件描述符的写缓冲区(这是内核中的写缓冲区, 不是自定义的Buffer类)未满就可写, 所以这个事件一般马上就会触发)
- 调用可写事件的回调函数将将写缓冲区(writeBuffer)中的数据发出