首页 百科知识 关键功能设计与实现

关键功能设计与实现

时间:2022-04-09 百科知识 版权反馈
【摘要】:应用服务器与客户机的通信采用Socket技术。服务器依据协议负责转发,电子白板收到这些消息后,依据协议触发相应事件并同时向服务器端发送消息。该电子白板的通信利用套接字实现网络上客户端和服务器端之间的连接。必要时,把此图像重绘于画布上即可实现白板的重绘。

应用服务器与客户机的通信采用Socket技术。用户通过Web浏览器进入,将操作消息发送到应用服务器。因为白板系统中存在大量动态设计文字、图形及图片,所以客户端的图形用户界面选择Java Applet来实现。

5.3.1 Socket编程

电子白板的通信基石是Socket(套接字),利用套接字实现网络上客户程序和服务器程序之间的连接。启动服务器后,服务器将在10000端口上侦听以等待客户的连接请求。当一个客户连接请求到达时,10000这个本地端口号被分配给客户并且与一个Socket连接,客户通过写Socket来通知服务器,通过读Socket来获取信息。服务器也需要给它的本地端口连接一个Socket,通过读写Socket来与客户端通信。

应用服务器与客户机的通信通常采用Socket技术。Java引进了Socket的概念,提供了java.net.Socket和java.net.Server-Socket类库,这两个类共同提供完整的TCP/IP连接支持。前者用于客户端,后者用于服务器。一种服务通过监听一个端口号,可以与向该端口号发出请求的客户程序进行通信。

服务器端和客户端在通信之前首先约定一组标准协议。用户对白板的操作被作为事件进行处理,按照协议打包成相应的消息通过Socket传到服务器。服务器依据协议负责转发,电子白板收到这些消息后,依据协议触发相应事件并同时向服务器端发送消息。

该电子白板的通信利用套接字实现网络上客户端和服务器端之间的连接。启动服务器后,开辟一个未用端口,用于等待客户端连接请求,服务器将在此端口上侦听以等待客户的连接请求,让服务器永远等待,直到客户端连接到该端口,一旦有客户送来正确的请求,连接到该端口,随即确认连接就返回一个Socket对象,表示已经建立好连接,客户被分配给一个本地端口号并且与一个Socket连接。客户通过写Socket来通知服务器,通过读Socket来获取信息。服务器也需要给它的本地端口连接一个Socket,通过读写Socket来与客户端通信。用Socket对象获得一个输入/输出流在服务器和客户这两个端点进行信息传递。客户端与服务器端的顺序图描述如图5-2所示。

图5-2 客户端与服务器端的顺序图

系统定义了一个服务器套接字ss,利用s=ss.accept()监视端口10000,其作用是让服务器永远等待,直到客户端连接到该端口,一旦有客户送来正确的请求,连接到该端口,accept方法就返回一个Socket对象,表示已经建立好连接。Socket连接建立好之后,需要用Socket对象s获得一个输入/输出流,用于在服务器和客户这两个端点进行信息传递。如此不断循环执行,直到客户端发出退出请求,才关闭输入/输出流和Socket。整个过程如图5-3、5-4所示。

图5-3 电子白板时序流程图

图5-4 一对一的Socket通信流程图

5.3.2 多线程的应用

目前有些操作系统的线程操作机制不够健全,在线程销毁时线程所占资源不能被完全释放,以至于在白板服务器运行的过程中将逐渐消耗掉系统资源,所以应在服务器初始化时按最大允许同时上线的用户数建立所有用户服务线程。这些线程将等待客户端接入,当用户退出交谈室时线程并不销毁,而是清除用户数据,重新进入等待接入状态,准备为下一个用户服务。当用户在白板上连续绘画时可能产生大量的图形数据,尤其是绘制自由曲线,客户端Applet若在白板的AWT事件处理程序中完成将这些数据传输给服务器的任务,则很有可能由于网络I/O的瓶颈作用,使得AWT事件处理线程受阻,从而影响白板Applet、浏览器等正在运行的应用软件。解决的办法就是使Applet再建立一个后台绘图数据传输线程,白板的AWT事件处理程序将用户的绘图数据通过管道流(Piped Stream)传输给这个线程后就返回,把网络传输的任务留给这个线程进行。

5.3.3 图形的保持

Java的绘图程序代码不负责保持显示在白板区域的图形,所以当电子白板窗口状态改变时,白板上的图形信息会部分或全部丢失,这显然不满足用户的要求,用户希望可以随意改变白板窗口的状态而保持原有的图形信息。为了解决图形丢失问题,传统的做法是采用队列作为存储空间,把绘图信息如直线的起点、终点等放入队列,但诸如曲线之类的图形所需的存储空间就会很大,队列大小较难设置。该系统的存储空间采用图像的形式,用户是通过获取Canvas对象的图形环境对象绘于画布上的,所以可在用户绘图的同时将这些图形绘于一个Image类的对象上。必要时,把此图像重绘于画布上即可实现白板的重绘。可见存储空间可选用这个Image对象。

存储空间里的数据只有符合前面定义的通信协议集,才能在重新绘制时被识别并再现。在只存储规则图形如圆、直线和矩形时,存储空间可以设置得比较小,但是徒手画和橡皮擦包含的信息量非常大,对存储空间要求比较高。

数据的存储和调出用循环队列来实现。循环队列有许多基本操作,根据功能需要,本文只涉及入队、判断队列是否满、设置队列空这三项操作。有两种图形信息需要加入到循环队列中,一种是用户在白板上绘制的图形,另一种是客户终端接受由白板服务器传来的图形。客户端接受传来的图形信息,打包成一个通信协议集的类实例data,再将data作为入队元素插入到循环队列中。

在用户未点击清除白板屏幕命令前,所有需要保存的数据以循环队列容量为限,最大可能地保留。如果用户点击了清除白板屏幕命令,此时需要设置队列为空。设置队列为空的过程比较简单,只要依次将队列中的所有数据清除即可,其过程是用空数据包给队列中的所有元素赋值,达到清除数据的目的。

存储数据的目的是为了在必要的时候,对循环队列中的数据进行出队操作,再现这些信息的内容。当白板窗口状态发生改变,比如窗口缩小后放大、最小化后最大化等,此时需要调用循环队列中的图形数据并重绘白板绘图区。本文利用Java中Swing的基础类JComponet的paint方法进行重绘。paint方法用于绘制组件,用户通过调用repaint方法来激发paint方法。由于Java中默认的paint方法不符合网络电子白板中重绘白板绘图区的要求,为了实现特殊的功能,文中重载了该方法。在窗口状态改变时,由系统自动调用paint方法。由于重载了paint方法,系统会依次读取循环队列中的所有图形数据,并将其显示在白板绘图区,从而完成重绘功能,达到了窗口状态改变而图形仍然保持的效果。

5.3.4 安全方案设计

5.3.4.1 用户认证、共享密钥分发与注册

在进行安全方案设计过程中,由于“操作一次验证一次”的方法会占用较多的网络带宽资源,影响电子白板的实时性和方便性,故而采用加入白板操作时用户身份的注册和认证的方法并计时,若规定的时间内未进行任何操作,则需要重新注册和认证。为了确保认证过程的有效性和安全性,采用基于证书的身份认证方法,协议流程图如图5-5所示。

图5-5 用户认证注册流程

身份认证协议的设计步骤及逻辑如下:

(1)用户申请证书:用户注册后,向证书服务器发送自签名证书并获取由CA(身份认证)签发的证书和CA根证书。

(2)服务器申请证书:白板服务器向证书服务器申请服务器证书,过程同(1)。

(3)用户向白板服务器发出加入请求:Client_Hello。

(4)服务器应答请求:服务器根据当前系统可用资源(如当前用户数),发送应答(同意或拒绝)Server_Hello,若同意则发送服务器证书。

(5)用户验证:用户验证服务器证书,并向白板服务器提交用户证书。

(6)服务器验证:服务器验证客户证书(通过根CA),若验证通过,则从用户证书中取得用户公钥public-key,并用其加密共享密钥,将加密结果发送到客户端。

(7)用户解密:用户用私钥解密得到加入白板后的共享密钥,并向服务器发出注册请求Request_Register。

(8)服务器返回应答生成一次性随机数random,用共享密钥加密后,返回应答:Answer_Register。

(9)用户用MD5加密:用户解密得到一次性随机数random,同用户名和共享密钥连接后,用MD5算法生成消息摘要digester,再将digester与用户名连接后发送到服务器。

(10)服务器解密验证:服务器取出用户名,同随机数和共享密钥连接后,计算消息摘要,将其与digester比较,若相同,则用户注册成功。

5.3.4.2 用户对象权限控制

电子白板系统作为一种群组协同工作方式,需要有一种良好的工作秩序保障,而这种保障不能单纯地依靠系统所有用户的自觉遵守。系统本身必须能对用户权限和访问策略加以控制,以协调各用户的操作。

系统中的用户担任的角色不同,对于每一个白板系统对象元素,主要有4种角色:系统创建者(管理者)、对象创建者、其他合法用户和非法用户。各种用户及其操作权限对应表如表5-1所示。

表5-1 用户角色及操作权限对应表

在表5-1中,在操作权限方面,系统管理者和对象创建者可以对对象进行各种操作,故而操作权限均为7,非法用户则没有任何权限。在优先权方面,创建者对自己的对象拥有最高的优先级,管理者次之,其他用户的优先级最低,以至于在编辑、删除对象时,必须向系统提出操作请求,应允后才可做出相应的操作。对于具有同等的操作权限和优先级的用户,当对同一对象进行操作时,则按照时间优先的原则进行:先来的先服务(FIFO机制),后到的则丢弃。

5.3.4.3 传输过程中的时戳业务

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈