(0)业务描述
来源:互联网 发布:新疆英吉沙小刀淘宝店 编辑:程序博客网 时间:2024/06/10 00:28
功能
服务器主要有两大功能:管理连接,传递信息。
管理连接
管理连接,因为连接的本质其实就是个描述符,在计算机里就是一个整型。为了知道连接上是否有通信信息的到来,系统内核已经提供给了我们能很好的管理方式,也就是常用的select/epoll描述符多路复用模型。当然这个模型只是知道哪些连接上面有通信信息的到来,并不能对到来的信息做管理和控制。
所以我们需要有在业务层面管理连接的方式,也就是根据连接所处的业务状态去进行处理。管理的连接的数据结构根据业务的不同去选择,比如树形结构、数组结构和链表结构等。但是处理模型终究只有一个,那就是状态机模型。每个连接都是在不同的业务状态之间进行迁移,所以针对每个连接都要有一个数据结构来记录这个连接的详细上下文信息。
传递信息
传递信息那就更简单了,首先要有一个存储连接信息到来的缓冲区,包括发送缓冲区和接收缓冲区。这个系统已经提供了,但是针对用户层的缓冲区还是需要自己来设计,最好是能够做到可控。接下来就是只要把信息进行整理发送给终端client或者路由给后端server就行了。
业务领域描述
由于操作系统没有把连接抽象成业务想要的形式,在业务层自己需要定义一个表示连接的抽象,用类Connection表示。
业务层面管理这个连接,需要有存储连接的容器,用ConnectionContainer表示。
管理连接上发生的事件需要管理连接的工具,可以对epoll和select工具进行抽象,用ConnectionController表示。
发生的事件需要进行抽象,用Event表示。
Connection
class Connection{ int fd; //描述符id int state; //TCP连接状态 time_t createTime; //TCP连接创建时间(utc时间) time_t lastAccessTime; //TCP连接上次处理时间(utc时间) struct sockaddr_in clientAddr; //客户端地址 int recvPkgLen; //接收业务包的长度 int recvedBytes; //已接收的字节数 char recvBuf[MAX_RECV_BUF_LEN]; //接收缓冲区 int sendingBytes; //将要发送的字节数 char sendBuf[MAX_SEND_BUF_LEN]; //发送缓冲区};
ConnectionContainer
class {public: virtual Connection* Get(int fd) = 0;//获取一个连接 virtual bool Set(int fd, const Connection& c) = 0;//设置一个连接 virtual bool Remove(int fd) = 0;//删除一个连接 };
Event
class{public: int event;//连接事件:读,写,错误。 int fd;};
ConnectionController
class ConnectionController{public: virtual bool Init()=0;//初始化管理器 virtual vector<Event> WaitEvents()=0;//获取产生事件的连接 virtual bool SetEvent(int fd, Event e)=0;//设置连接需要管理的事件 virtual bool RemoveEvent(int fd)=0;//删除需要管理的连接};
核心业务逻辑
本质上就是一个事件循环,针对描述符上发生的事件进行处理。
{ while(true){ vector<Event> events = controller.WaitEvents(); for(int i=0;i<events.size();++i){ if(events.events有错误事件){ //处理 } else{ if(events.events有读事件){ //处理 } if(events.events有写事件){ //处理 } } } }}
阅读全文
0 0
- (0)业务描述
- 圈内业务描述
- 业务现状描述
- 互联网广告系统综述三业务描述
- 互联网广告系统综述三业务描述
- 如何绘画状态机来描述业务变化
- MV*关于业务逻辑的描述
- 用例规约的编写--业务规则和实体描述
- 使用 UML 进行有效的业务建模: 描述业务用例和实现
- 使用 UML 进行有效的业务建模:: 描述业务用例和实现
- 使用 UML 进行有效的业务建模: 描述业务用例和实现
- 我的建模可以复制 -8 (体系化的描述业务场景、业务规则)
- Django框架之views(业务逻辑)简单后台首页展示的业务逻辑详细描述
- Django框架之views(业务逻辑)简单后台注册业务逻辑详细描述
- Django框架之views(业务逻辑)简单后台登录与退出的业务逻辑详细描述
- Django框架之views(业务逻辑)简单后台设置cookie,session信息业务逻辑详细描述
- bpmn2.0业务工作流
- 业务
- 练手的增,删,改
- 文件重叠操作
- tornado、django在linux下环境安装和配置
- Linux下保存的SVN帐号及密码
- 关于php5.5版本与curl文件上传
- (0)业务描述
- JDBC:1433端口
- 小白成长日记(15)--岛屿面积问题(算法设计--dfs深度优先搜索)
- LeetCode 409. Longest Palindrome
- php curl访问HTTPS页面502
- linux下源码安装opencv-python
- 通讯录项目(完善版)
- 【翻译】Ext JS从头开始之一
- hdu5033 Building(单调栈)