3. View 基础


  • 3.1 设计目标

    完全消除为了维护协议体系添加的结构性逻辑代码——上文提及的那些与最终需求无关的,难以维护的逻辑代码——实现的精力集中到最终需求上来。服务器的精力集中到功能性数据上,客户端的精力集中到数据表现上。



  • 3.2 基本概念

    • VIEW: 被命名的一个结构描述,名字的定义应该反映具体功能。这个数据结构包含了一系列的字段,服务器View与客户端View一一对应,服务器View的字段发生改变同步到客户端对应View的对应字段。

      这里的改变有4种类型,NEW,REPLACE,TOUCH,DELETE。NEW——服务器View初始化了这个字段,字段数据从无到有;REPLACE——服务器设置了这个字段,字段数据不同于前一个;TOUCH——服务器设置了这个字段,但是字段数据没有变化;DELETE——服务器删除了这个字段,字段数据从有到无。更进一步,以View为单位的时序是严格保证的,也就是说,客户端可以重现服务器设置同一View上的字段的顺序;不同View之间的时序不作保证。

    • CONTROL: 定义在View名字空间下,客户端给服务器发送的控制命令。

      View,Control两个概念合到一起看,就是客户端给服务器发送控制命令,服务器设置View的状态,这个状态被反映到客户端。当然了,Control与View状态改变的因果关系不是强制的,即便没有Control,服务器也可以改变View从而实现推送;Control尽管定义在View名字空间下,也不意味着这个Control的实现只能改变当前这个View。



  • 3.3 实现中涉及的概念

    • SessionId: 客户端登录服务器,相应的会话建立起来的时候系统给客户端分配的ID,作为客户端的唯一标识。

    • 三种View的类型,GlobalView,SessionView,TemporaryView。

    • GlobalView: 具有服务器生命周期的View。View的改变不能自动同步到客户端,必须手工调用同步方法,把整个View或者View的某个字段的最新版本数据同步到一个或者多个客户端。

    • SessionView: 具有会话生命周期的View。客户端登录服务器建立会话时自动创建,依据SessionId分类。View的字段发生变化时,字段数据自动同步到对应客户端。

    • TemporaryView: 具有临时生命周期的View,服务器应用执行过程中手工创建,手工删除。临时View是一种最灵活的,使用上也最复杂的View。通过Membership维护SessionId集合实现成员管理,提供广播特性,也就是说View字段发生变化时,字段数据自动广播给所有Membership成员。临时View还拥有更强大的能力——订阅成员的SessionView字段,某一成员的被订阅SessionView字段发生改变,这一改变自动广播给所有Membership成员。

    • ViewContext: View上下文,服务器,客户端,拥有各自的ViewContext,具有服务器或者客户端生命周期,通过它可以访问View,多数情况下被Limax生成代码使用。

    • ViewChangedListener: 客户端的关键应用接口,接收服务器同步过来的View字段改变事件,主要提供View改变的5个信息,哪一个View,哪一个字段,哪一个SessionId,字段当前值,此次改变的类型,NEW,REPLACE,TOUCH,DELETE。

    • Control: 客户端发送控制命令给服务器,有两种类型,Control,Message

    • Control: 定义在View名字空间下,一个名字空间下可以定义多个。类型化客户端框架支持该类型Control。

    • Message: 系统实现中用Message描述,客户端可以通过Message机制向服务器发送字符串消息,每个View名字空间下隐含有一个。类型化客户端,脚本客户端都支持。

      实现一个应用,需要同时支持类型化客户端和脚本化客户端,只能使用Message。


上一页 下一页