您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 造纸印刷 > 通达信网上交易V6架构体系090430
第1节前言目前通达信网上交易V5.X客户端存在5大缺陷:序号问题说明解决方法1紧耦合客户端程序模块化程度不足,内部逻辑复杂,代码可读性差。在响应业务快速变化的定制开发需求时导致工作量大,开发周期长等问题按照Observer(观察者)设计模式重新编写客户端程序适当增加代码注释2底层抽象不够大量采用全局变量控制业务逻辑,导致程序维护与版本管理均较难于把握和控制。3不支持双工增加异步双工特性4安全性弱虽然已经采用了用户登陆对话框防病毒、防木马、防后门钩子等技术处理,但是客户端程序整体仍然能够通过“脱壳”程序编写欺骗代码,在行情登陆时候可绕过用户验证直接登陆;通过同样的技术,能够跳过用户登陆验证,输入非法代码登陆交易客户端,获取交易客户端功能界面,但是由于未进行后台验证,无法进行正常委托交易;交易中心检查客户端的逻辑顺序,例如必须存在正确登陆才能进行其他业务类请求,否则记录地址备查,对于特定版本首先违背业务流程的一定是破解者本身,对于这些用户我们将进行封锁和警告,警告无效则请求警方介入处理。接口实施用户输入信息合法性检查,以避免冲击后台客户端加强破解的防范措施,这个任务相对而言比较长远,目前已经完成基本措施建立更加及时的集中跟踪报警机制及破解跟踪响应机制Level2行情服务和交易中心进行用户联合验证5版程序通用框架代码与客户的个性化代码重叠,导致严格划分框架代码与业务功能代码的版本号,使用TFS系第2页共50页本管理混乱客户端版本混乱,在长期的版本升级与维护过程中,框架代码与业务代码纠结不清,版本升级已成为系统风险最大的环节。统进行版本规范化管理第3页共50页第2节V6技术总介2.1设计思想财富趋势网上交易V6(内部版本标识V6)是深圳财富趋势科技有限公司基于原有网上交易5.X系列产品(内部版本V5,外部发布版本6.X-8.X等)重新设计后形成的全新产品。财富趋势网上交易V6的主要改进方向在于客户端的模块化和高度抽象化,主要设计思想在于:网上交易V6主要设计思想强化客户端体系结构的层次性直达代码维护混乱和管理缺乏的根源,实现模块化和组件化,从体系上提高代码的可靠性,例如:分离出基础类、抽象出通讯底层等等。弱化各模块之间的关联解决模块之间相互牵扯和影响的问题,模块之间通过接口抽象和接口标准化,减少或规范化相互之间耦合,最大限度的减少模块之间的关联性(这些关联包括界面模块和界面模块之间、界面模块和全局状态之间、界面模块和通讯底层之间的关联),规范后每个模块意识不到其他模块的存在和,更谈不上相互牵扯和影响。提高个性化能力一方面大幅度提高客户端定制的弹性,一方面大幅度减少定制时相互关联引发的升级风险。简化业务逻辑通过大幅度的抽象,使得复杂的业务逻辑标准化、透明化,减少业务和实际通讯的勾连,从而简化业务代码和界面代码的编写。提高透明度和开放性基于有限的封装,向部分合作客户提高业务代码的开放性和透明度,和针对交易接口的抽象一样,系统提供单独针对业务层的抽象,隔离复杂的系统逻辑,剥离出清晰简单的业务逻辑。2.2模块组织财富趋势网上交易V6(后简称V6)设计中将系统划分为:基础层、协议层(通讯层)、业务模块层,所有元素通过架构层进行控制和管理,第4页共50页如下图:业务界面层业务界面层业务界面层基础层(CLIBHLPR.DLL)通讯层(TCAPI.DLL)架构层(ETRADE.DLL)外壳程序(SHELL.EXE)业务界面层各层详细描述如下表所示:V6模块组织描述外壳程序(SHELL.EXE)外壳程序可以是行情主程序(TDXW.EXE),也可以是单独的主程序(ETRADE.EXE),主程序承担DLL的装载工作以及开辟工作区域,不承担主要的业务功能调用,也不承担任何细致的管理工作。若外壳程序需要调用业务,可以采用两种途径,分别为RAW模式和ADVANCE模式:可直接通过架构层(ETRADE.DLL)查询到TCAPI.DLL的工作实例,直接发起调用,不需要通过架构层处理,这种方式被称为RAW模式,例如闪电下单功能和盘面下单功能即可通过当前途径实现,RAW模式下,调用者需要和TCAPI发生交互,需要理解业务本身,但具有更强的界面控制能力。若外壳程序需要调用界面,可直接通过ETRADE.DLL调用到对应的业务界面层界面,通过统一的接口和业务界面层进行交互处理,这种方式被称为ADVANCE模式,闪电下单功能和闪电手功能可用过当前模式实现,这种模式下业务逻辑由实际的业务界面层来完成,界面形式由业务界面层规定,定制性相对不如RAW模式,但调用者不需要理解业务,第5页共50页只需要了解界面的外部引用入参即可。架构层(ETRADE.DLL)系统架构层承担协调人的角色,承担如下工作:向SHELL.EXE提供接口查询和交互接口(仅在必要的情况下)向下依赖于基础层,同时管理通讯层和业务界面层为界面业务层提供对象查询等等支持性工作提供跨界面调用的指令通道。业务层业务层主要承担实际业务和界面的处理。业务层可以向架构层查询各种接口信息,其中最重要的为客户实例句柄以及配置存储对象句柄。业务层可以向架构层查询各种系统配置信息。业务层可根据客户登录实例句柄调用通讯层向后台发起请求,这里存在两种调用模式:异步双工模式和异步单工模式。通讯层通讯层主要承担实际通讯处理,通讯层除完成到交易中心异步全双工模式的封装外,还提供自动策略交易功能(本地数据缓存),并且提供委托单跟踪功能,支持数据订阅和推送等机构版功能。业务层构建于通讯层上,对实际通讯过程,登录逻辑、实际业务通讯处理、数据分页、数据缓存等全透明。基础层基础层完成财富趋势基础库的建设,基础库包括四大主要部分:SafeVCRT类库、ClibHlpr类库(含派生库簇)、GuiHlpr类库(老版本MFC扩展库)、MfcHlpr(新版本MFC扩展库)。业务界面层组织功能包功能实现功能重载通讯交互框架交互功能交叉引用第6页共50页2.3架构模块简介2.3.1架构模块的基本作用架构模块基本作用管理全部系统模块,其中包括通讯层模块(TCAPI.DLL)以及全部的业务功能模块。组织系统的初始化,承担系统配置、缓存数据、本地配置、用户私有敏感数据和配置的统一加密存储。负责管理客户账号列表以及全部客户连接实例。组织界面布局,其中包括功能导航、工具条、主窗口区、选项对话框、托盘窗口区等等。2.3.2架构模块的基本结构管理模块的内部结构:第7页共50页系统配置本地配置缓存数据敏感数据客户实例账号列表TCAPI架构模块本地IO功能埠功能包功能包功能功能功能功能通讯埠界面控制单元导航工具栏选项功能窗口架构模块通过界面控制单元完成界面布局和处理,界面元素主要包括三大区域:主功能区、设置功能区、浮动功能区。主功能区主要包括导航栏、工具栏、功能窗口,其中功能窗口包括主功能视图和弹出功能视图。如下图:第8页共50页主窗口主窗口股票功能买入卖出市价买入市价卖出功能窗口(主视图)工具栏导航功能窗口(弹出视图)功能窗口(弹出视图)取消确认功能窗口(弹出视图)设置功能区主要由设置页构成。设置页设置页设置1设置2设置3取消确认设置视图浮动功能区为系统的第二功能区,用于显示各账号的最新状态。第9页共50页工具窗口工具窗口顶级功能窗口功能1功能2功能32.4架构模块的子模块2.5传统通讯模式传统通讯模式的主要特点是在半双工,即在完成一个请求和应答前,通讯上不能再次发起请求,务必等待上一请求完毕后,服务器在处理上采用半双工方式,即每路连接仅仅保持一个缓冲区,且不保障客户端发送的时序。半双工方式在通讯上可以采用同步和异步模式,采用同步模式时,通讯全过程和等待应答数据全过程会阻塞发起线程,采用异步模式时,通讯和数据应答的等待在单独的线程中完成,通讯全过程和等待应答数据全过程不会阻塞发起线程。半双工同步模式的时序如下图所示:第10页共50页数据发送数据接收数据处理完成?否是请求完成功能请求通道繁忙?否等待空闲是半双工异步模式的时序如下图所示:第11页共50页数据发送接收数据数据处理完成?否是完成请求请求发送网络忙?否等待空闲是发送完成设置网络忙设置网络闲是应答接收2.6V6全新的通讯模式V6采用全新的通讯模式,主要改进点包括:V6通讯模式使用全双工方式允许收发并行,即将发送请求后,不必等待该应答返回,即可在同一套接字上发送下一请求。采用全异步方式脱离界面线程存在,不受界面线程干扰。使用IOCP技术可在有限工作线程上挂载大量连接,可最大限度并行。封装通讯事务,隔离通讯逻辑使上层应用可摆脱复杂的通讯操作以及冗余的错误判断。支持共性操作内含翻页逻辑等,避开应用层复杂处理。V6通讯模式如下图所示:第12页共50页请求队列业务请求提交请求应答队列等待队列完成处理发送接收提取请求就绪队列完成请求完成通知通知完成业务应答提取应答处理机V6的基础通讯模型经过高度的抽象,对外封装后分别提供连接管理器、虚拟连接对象、作业对象、参数集对象、结果集对象五种标准对象。2.6.1连接管理器连接管理器用于管理全部的站点配置数据、虚拟连接对象、作业对象、参数集对象和结果集对象。如下图所示:第13页共50页虚拟连接对象参数集对象作业对象连接管理器结果集对象连接管理器除管理上述数据外还承担基础通讯操作,例如自动控制存活包发送、自动控制断线重连等等。2.6.2虚拟连接对象虚拟连接对象是外部和站点沟通的通道,作业对象是位于通道内传递的请求和应答对,参数集是作业对象的输入参数,结果集对象是作业对象的输出参数。第14页共50页虚拟连接作业作业结果集作业作业作业参数集作业作业作业作业作业虚拟连接抽象了以往在通讯过程中繁复的错误和状态判断,例如网络状态、网络发送和接收错误,甚至对服务器端的错误类型也纳入其中。虚拟连接对外提供作业的封装,当上层需要调用业务时,只需要生成参数集,提交后即生成对应的作业,当作业发生错误或者作业顺利完成时候通知调用者,调用者可以通过通知的编号从完成队列中提取已经完成的作业,如果作业在异步通讯过程中或者处理过程中发生错误,可以从作业中提取到错误来源、错误号以及错误描述信息,若作业成功完成,可从作业中提取到一个有效的结果集,从结果集中可提取到返回的全部行列描述,包括字段名、字段属性以及各行数据。2.6.3作业对象作业对象是基本调用行为的封装,作业可以是一个登录或者登出行为,也可以是一个业务调用,作业在发起请求的时候产生,其生命周期将持续到作业完成或者发生错误,完成的作业调用者若不主动清除,连接管理器将在退出的时候自动清除。对于业务调用,作业产生的要件是功能第15页共50页ID,参数集不是作业产生的必要条件,若参数是可选的,发起作业并不需要生成参数集。待完成的作业处于内部锁定状态,外部可清除掉对应的作业,并不影响系统运行,系统仅仅会释放外部的引用,并不会彻底删除作业,直到两个条件(成功完成或者发生错误)满足为止。处于完成状态的作业,包含有错误类别(错误源),错误号以及错误信息,若作业被成功完成,作业还带有一个结果集对象,调用者可以通过结果集获取返回的数据。2.6.4数据字典V6的业务基础和V5是一样的,都是以数据字典为基础,在通讯层上完全兼容,这种规范约定:每个业务字段都具有唯一的ID请求由一系列参数构成,参数的字段ID不可重复,且含义不可具有二义性。请求的参数包括可选参数和必填参数,对于必填参数,调用者必须按约定填写,服务器不承担空值检查责任。对于可选参数,调用者可以选择是否填写,若不填写,系统将按照其默认含义理解。请求参数不一定为全部后台系统所必需,但按照适用率最大化的原则,要求应用层必须按照约定送入,以避免兼容性问题。应答由应答状态和数据行列构成,但数据行列不是构成应答的必要条件,允许应答只包含应答状态。应答字段序列由后台系统规定,后台可对返回各字段提供自身的解释(关键性字段除外,如账号类别、股东代码等等标识或者标志字段具有绝对的统一性)。2.6.5参数集对象参数集对象是产生业务调用作业的可选条件,对于具有要求有必填参数的业务调用,其参数集对象是必须的,参数集规定了一系列的入参,例如买入操作,入参最
本文标题:通达信网上交易V6架构体系090430
链接地址:https://www.777doc.com/doc-5791491 .html