中转server
中转传输概要设计
中转传输的消息架构为模拟MFC的消息架构,请參考我的上一篇文章。
1. 概述
中转server採用事件驱动的方式,与socket结合。其层次例如以下:
在事件驱动层中,将相关消息发送给相应的用户事件处理函数处理。
在命令解析层中发送和接收数据。在接收到数据时,须要验证数据合法性,收到一帧完整的数据后调用消息驱动层的send相关方法,调用该类方法后会将消息传递给用户事件处理中。
在命令解析层中,会引入socket控制,同一时候管理多个socket的读。
在用户事件处理中,须要像MFC那样,定义消息处理的映射表。仅仅有在用户层定义了消息映射表,命令解析层接收到的命令才干被处理,否则被丢弃。
2. 事件驱动层
消息分两种:post类消息和Send类消息。
Post类消息首先须要将消息放入消息列表中,由消息处理线程负责派发消息,所以消息的发送与处理是异步的。
Send类消息不须要经过消息列表,直接由send相关方法派发消息,所以仅仅有等待消息被处理完毕send方法才返回。
post事件驱动流程图:
事件驱动贯穿整个流程,一般事件驱动流程退出,则程序退出。
2.1 事件信息
事件分为例如以下两种:
a. 整型事件,用一个整型数字标志一个事件,该事件參考MFC的基本结构;
b. 字符串事件,以命令的形式定义一个事件;
事件目标:
事件目标能够是目标的直接handle,也能够是目标的名称。
2.2 基本事件
我们规定在1024以内的整型事件为基本事件,由事件驱动层定义。用户能够定义不论什么大于1024的事件,不同对象之间事件号能够反复。
3. Socket控制
在socket控制中,主要监控socket的读和异常状态。对于写上层能够直接调用send发送数据。
外部假设须要释放已经放入到控制列表的sokcet,必须调用控制层的接口。
4. 用户事件处理
时序图例如以下:
登录、心跳和退出流程
转发文件流程图
中转server的更多相关文章
- 用Postfix + Dovecot 搭建的邮件server被垃圾邮件其中转server的处理
今天发邮件. 发送失败.然后到server上看日志, 发现硬盘被垃圾邮件的缓存队列和日志塞满了. tail -f /var/log/maillog 发现疯狂刷屏.部分日志例如以下 : ...
- Qt搭建多线程Server
起因是MySQL在Android上没有驱动.也就是说,移动端想要访问远程数据库,必须通过一台(或多台)PC进行中转. 中转PC作为Server,接受来自移动端Socket访问数据库的要求,Server ...
- 高性能 Socket 组件 HP-Socket v3.2.1-RC5 公布
HP-Socket 是一套通用的高性能 TCP/UDP Socket 组件,包括服务端组件.client组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C+ ...
- 高性能 Socket 组件 HP-Socket v3.2.1-RC4 公布
HP-Socket 是一套通用的高性能 TCP/UDP Socket 组件,包括服务端组件.client组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C+ ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.2.3 正式宣布
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包括服务端组件.client组件和 Agent 组件.广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#. ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.2.2 正式公布
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包括服务端组件.client组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#. ...
- 高性能 Socket 组件 HP-Socket v3.2.1-RC2 公布
HP-Socket 是一套通用的高性能 TCP/UDP Socket 组件,包括服务端组件.client组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C+ ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.2.3 正式公布
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包括服务端组件.client组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#. ...
- 高性能 Socket 组件 HP-Socket v3.2.1 正式公布
HP-Socket 是一套通用的高性能 TCP/UDP Socket 组件,包括服务端组件.client组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C+ ...
随机推荐
- struts OGNL数据标签
OGNL对象图导航语言,类似于el表达式,strut的底层就是用这个写的在导入struts-core的时候会导入ognl.jar public class Test { public static v ...
- TabSpec和TabHost实例
TabSpec与TabHost TabHost相当于浏览器中浏览器分布的集合,而Tabspec则相当于浏览器中的每一个分页面.d在Android中,每一个TabSpec分布可以是一个组件,也可以是一个 ...
- 1104--DNA排序
问题描述: 逆序数可以用来描述一个序列混乱程度的量.例如,“DAABEC”的逆序数为5,其中D大于它右边的4个数·,E大于它右边的1的个数,4+1=5,又如,“ZWQM”的逆序数为3+2+1+0=6. ...
- BZOJ 1015
program bzoj1015; {$inline on} ; type node=record togo,next:longint; end; var tot,n,m,d,cnt:longint; ...
- Android 使用动态载入框架DL进行插件化开发
如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 (来自时之沙的csdn博客) 概述: 随着应用的不断迭代.应用的体积不断增大,项目越来越臃肿,冗余添 ...
- POJ--1300--Door Man【推断无向图欧拉通路】
链接:http://poj.org/problem?id=1300 题意:有n个房间.每一个房间有若干个门和别的房间相连.管家从m房间開始走.要回到自己的住处(0),问是否有一条路能够走遍全部的门而且 ...
- 使用ORACLE SQL Tuning advisor快速优化低效的SQL语句
ORACLE10G以后版本的SQL Tuning advisor可以从以下四个方面给出优化方案 (1)为统计信息丢失或失效的对象收集统计信息 (2)考虑优化器的任何数据偏差.复杂谓词或失效的统计信 ...
- SQL常用语句集合(不断更新)
1.多条件 查询 上下级 所有数据 select * from OrgUnit where (ParentId = '3' or OrgId='3' or ParentId in (select Or ...
- Hibernate 多对一
Hibernate的many-to-one 关联. 具体看配置文件: <?xml version="1.0"?> <!DOCTYPE hibernate-mapp ...
- PyQt中如何隐藏Menu
PyQt中隐藏一个Menu Item,可以通过QAction的setVisible(False)来设置,而QMenu的setVisible(False)是不管用的. 现在问题来了,我们有一个菜单,它有 ...