网站做违法的事情投诉,网络舆情应对及处置方案,西安谁家做网站,有了域名自己电脑怎么做网站服务器编程基本框架
虽然服务器程序种类繁多#xff0c;但其基本框架都一样#xff0c;不同之处在于逻辑处理 模块功能I/O处理单元处理客户连接#xff0c;读写网络数据逻辑单元业务进程或线程网络存储单元数据库、文件或缓存请求队列各单元之间的通信方式
I/O 处理单元是…服务器编程基本框架
虽然服务器程序种类繁多但其基本框架都一样不同之处在于逻辑处理 模块功能I/O处理单元处理客户连接读写网络数据逻辑单元业务进程或线程网络存储单元数据库、文件或缓存请求队列各单元之间的通信方式
I/O 处理单元是服务器管理客户连接的模块。它通常要完成以下工作等待并接受新的客户连接接收客户数据将服务器响应数据返回给客户端。但是数据的收发不一定在 I/O 处理单元中执行也可能在逻辑单元中执行具体在何处执行取决于事件处理模式。
一个逻辑单元通常是一个进程或线程。它分析并处理客户数据然后将结果传递给 I/O 处理单元或者直接发送给客户端具体使用哪种方式取决于事件处理模式。服务器通常拥有多个逻辑单元以实现对多个客户任务的并发处理。
网络存储单元可以是数据库、缓存和文件但不是必须的。
请求队列是各单元之间的通信方式的抽象。I/O 处理单元接收到客户请求时需要以某种方式通知一个逻辑单元来处理该请求。同样多个逻辑单元同时访问一个存储单元时也需要采用某种机制来协调处理竞态条件。请求队列通常被实现为池的一部分。
2种高效的事件处理模式
服务器程序通常需要处理三类事件I/O 事件、信号及定时事件。有2种高效的事件处理模式Reactor 和 Proactor同步 I/O 模型通常用于实现 Reactor 模式异步I/O 模型通常用于实现 Proactor模式。
Reactor模式
要求主线程I/O 处理单元只负责监听文件描述符上是否有事件发生有的话就立即将该事件通知工作线程逻辑单元将 socket 可读可写事件放入请求队列交给工作线程处理。除此之外主线程不做任何其它实质性的工作。读写数据、接受新的连接以及处理客户请求均在工作线程种完成。
使用同步 I/O 以epoll_wait为例实现的 Reactor 模式的工作流程是
1.主线程往 eopll 内核事件表中注册 socket 上的读就绪事件
2.主线程调用 epoll_wait 等待 socket 上有数据可读
3.当 socket 上有数据可读时epoll_wait 通知主线程主线程则将 socket 可读事件放入请求队列
4.睡眠在请求队列上的某个工作线程被唤醒它从 socket 读取数据并处理客户请求然后往 epoll 内核事件表中注册该 socket 上的写就绪事件
5.当主线程调用 epoll_wait 等待 socket 可写
6.当 socket 可写时epoll_wait 通知主线程主线程将 socket 可写事件放入请求队列
7.睡眠在请求队列上的某个工作线程被唤醒它往 socket 上写入服务器处理客户请求的结果。