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访问
-