4. 体系结构


  • 4.1 服务器框架


    • 基本概念

      • Environment: 整个框架实现为一个运营体系

      • Application: 一个运营体系里可以运行多个应用

      • Provider: 一个应用可以由多个Provider组成

      • PVID: 一个Provider由一个PVID唯一决定,整个Environment可以分配2^24个PVID


    • 服务器组件

      • Switcher: 接受客户端连接,其它服务器组件的汇集点,根据PVID完成信息交换,一个运营体系里可以部署多个Switcher,典型的情况下,一台服务器运行一个。

      • GlobalId: 全局Id分配服务,一个应用可能需要运行在多台服务器上,可以使用GlobalId服务提供全局Id;同一应用隔离运行的情况下,为了未来的合并方便,也可以使用GlobalId服务提供全局Id。根据具体需求在运营体系下部署。

      • Auany: 统一认证服务,可以提供运营体系自己的认证服务,也可以通过插件方式支持其它运营体系的第三方认证服务。认证成功后,给客户端提供当前运营体系内的SessionId,标识该用户。一个运营体系下可以部署一个或者多个运营体系共用一个。Auany同时提供支付框架的支持,可以通过插件方式扩展第三方支付系统。

      • Provider: 提供具体应用的服务,应用开发的主体,开发应用就是开发应用的Provider,严格意义上讲,上文描述View时涉及到的服务器特指Provider,没有特别说明,后文的服务器开发特指Provider开发。


    • 服务器开发接口

      服务器开发纯java实现,关键的两个包,provider,zdb

      • limax.provider: 提供了View相关的基础类,主要由生成的框架代码引用,应用开发应该在生成的代码基础上完成;支持对GlobalId服务的访问。

      • limax.zdb: 数据库支持, 使用键值对的方式访问的事务化内存数据库, 支持ACI除了D 。底层通过配置, 使用limax自带的edb键值对数据库, 或者mysql。存储过程是事务化的, 支持level2, level3两种事务隔离度, 是zdb的关键, 实现一个应用的大部分代码都可以在存储过程中实现, 保证事务完整性。

      Zdb对View的扩充,可以在View描述中使用bind特性,将一张表上一个特定key对应的value,或者value中的某些字段bind到View上,事务成功提交后,发现相应value或者value中相应字段在数据库操作时发生改变,value或者value中相应字段的数据作为字段数据自动设置到View上——如果是SessionView或者TemporaryView这些数据也就自动同步到客户端。View与表的bind实现为多对多关系。特别要注意的是,同一View上bind字段的改变时序不作假设,这些改变具有事务原子性。


    • 服务器管理

      框架提供的基本服务都可以通过JMX控制,并且提供一系列运行状态数据。

      应用可以定义自己的数据监视集合,在运行阶段执行数据采集。


  • 4.2 客户端框架


    • 基本概念

      • 类型客户端: JAVA,C#,C++实现的客户端

      • 脚本客户端: 通过嵌入LUA,Javascript等脚本语言实现的客户端

      • Endpoint: 端点,类型化客户端框架总入口

      • EndpointConfig: 端点配置,提供登陆服务器所需要的用户名,密码,请求的认证平台,请求的PVID集合等信息。

      • EndpointListener: 基础网络事件接收接口,报告连接进度,链路测试结果,发生的网络错误等信息。

      • EndpointManager: 端点管理器,EndpointConfig与EndpointListener,共同决定一个EndpointManager。EndpointManager代表了一次网络会话,一个客户端应用允许存在多个,通过SessionId区分。EndpointManager将所有的View汇集到以PVID分类的ViewContext中。


    • Java客户端开发接口

      • limax.endpoint: 提供Endpoint基础支持

      • limax.endpoint.script: 提供嵌入脚本语言的接口,鉴于OracleJDK内嵌了javascript脚本引擎,示例性实现了javascript脚本支持

      • limax.endpoint.variant: 动态类型化的View访问支持,这种模式下开发的客户端无需生成静态的View代码。


    • C#客户端开发接口

      与Java版本基本一致,如果要求实现脚本支持,需要按照脚本语言接口规范,集成需要的脚本引擎。



    • C++客户端开发接口

      除了没有实现嵌入脚本语言的接口,与Java版一致

      提供了可直接嵌入Lua的版本


    • 脚本开发接口

      limax.lua, Lua版本, 完整的View支持, 所有的View数据按照View定义的名字空间, 完全映射到脚本名字空间, 只需要按照规范定义各个view的onXXX方法接收View改变消息, 驱动客户端表现

      limax.js, Javascript版本,实现上与limax.lua完全一致


    • HTML5开发接口

      直接使用limax.js,limax.js已经内建了WebSocket访问


上一页 下一页