14.3.1 基于全局标识的数据表示模型
用户的任何一个操作都需要及时准确地呈现给其他用户,所以每个用户的每个有效操作都必须进行处理。用户的操作可以描述为一个三元组(Operation,Type,Object)。其中,Operation为操作类型,可以为New、Copy、Cut、Paste、Undo、Delete中的任何一种操作;Type为图元对象的类型,可以为Line、Rectangle、Ellipse、Text、Picture等中的一种;Object为图元对象,可以表示为一个四元组描述符(User ID、PageID、Object Num、Attribute)。其中User ID是参与者描述符,PageID是白板页面标识符,Object Num是该参与者在这张页面上所绘图元的ID,Attribute是要修改的Object的属性。这种数据命名方法可以保证所有绘制对象都有一个全局唯一的表示,以防止并发操作引起的数据同名的冲突。当参与者每进行一次操作,白板系统都会将该动作翻译成上述模型的数据。例如,用户A第2次在页面1上绘制了一个矩形框,则生成的数据实例为(New,Rectangle,(A,1,2),0),若在同一时刻,用户B第1次在页面1上绘制了一个圆,则生成的数据实例为(New,Circle,(B,1,1),0)。使用如上的数据表示模型很好地抽象了白板系统中的各种类型的数据和交互动作,并建立两者之间的关联关系,从而为实现界面数据向白板数据的转化提供描述的手段。
14.3.2 基于分页的报文转发机制
电子白板服务器主要功能是转发报文,当数据量或用户数增大时,服务器的开销也会随之增大,最终会导致性能下降、网络资源冲突。另外,白板还需要解决后加入者问题,即当用户在会议开始后进入仍可以获得历史数据,故白板服务器必须具备存储功能。显然,用户与会越迟,需要的历史数据就越多,这样势必造成历史数据抢占转发线程,延长了其他用户的响应时间。针对以上两种情况,提出了一种基于分页的转发机制来降低服务器的瞬时压力,并且降低了冲突发生的几率。
通常的白板都有白板页面的概念,即根据不同的讨论主题从逻辑上划分出多个共享画图空间。参与者可以创建页面,并在页面上进行图元的编辑。在某一时刻,用户关注的焦点只能是一张页面,而不可能也不需要感知到其他页面的变化,只有当浏览到其他页面时才需要感知。所以根据这一特点,提出了一种基于分页的转发策略,即什么时候看什么时候更新,服务器记录每个参与者的当前关注页面,并只为用户转发该页面上的事件报文,当用户切换至新页面时,为其恢复该页面上数据的更新。对于后加入者,服务器只在最初为其恢复所有的页面列表,而页面上的数据按照上述方法更新。基于分页传输算法的描述如下:
这种基于分页的转发机制,有效降低了服务器的转发频率和报文数量,较好地解决了服务器瞬时压力骤增的问题。值得一提的是,由于用户每次翻页都将向服务器请求更新,所以增加了一些控制报文的交互,但是这样的小报文对于大数据量对象的传输效率没有多大影响。
14.3.3 基于加锁机制的并发性控制
根据在加锁请求得到批准之前,对共享对象的操作是否暂停,加锁方法又可分为“悲观”和“乐观”两种。采用悲观加锁的方法,在能够对待处理的对象进行处理时,必须等待相应的加锁请求得到批准。在阻塞模式下,用户界面将被停止对用户操作的响应。在非阻塞模式下,在等待加锁请求期间,用户可能被允许进行其他的一些操作,但在请求被批准前不会被允许对待加锁的对象进行处理。乐观的加锁方法假定每个加锁请求都能得到批准,在发出尝试性加锁请求后就进行对对象的处理,如果请求未得到批准就撤消对对象的操作。根据在等待请求的批准期间的行为方式把乐观的加锁方式分成“半乐观”和“全乐观”两种。“半乐观”在批准前不再进行其他操作,故若请求得不到批准,仅需撤消一步操作。文中采用“半乐观“的加锁方法。图14-2说明了半乐观的加锁方法服务器端和客户端各自的流程。“全乐观”则继续执行其他操作,因此撤消时要撤消一系列操作。
图14-2 半乐观加锁方法流程图
14.3.4 基于接收者角色的因果保证机制
电子白板要求事件发生的因果一致性。因果一致性必须遵守以下条件:可能因果相关的写操作对所有进程可见,且顺序一致,并发写操作在不同机器上看顺序可以不同。由此可知,服务器在转发报文时,必须采取正确的分发机制来保证这种因果一致性。采用多线程技术实现了一种基于接收者角色的报文分发策略,有效地解决了CSCW中的一致性问题,同时还提高了服务器的并发能力。具体的实现方法是:服务器首先启动M个带有报文队列的转发线程,准备向N个用户转发报文,其中采用引用技术的方法对报文进行管理。根据服务器接收到报文的序列决定事件发生的因果关系,故接收者都必将遵循这一因果关系。服务器将转发给同一用户的所有报文引用按照这一因果关系放入同一转发线程队中。当M<N时,转发线程不能再单独地为一个接收者服务,故可将多个用户的报文引用放入同一线程队列中,且这并不违背文中的因果一致性。服务器转发报文时的示意图如图14-3所示。
图14-3 基于接收者的因果保证机制的服务器处理报文的示意图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。