OMCS 开发手册(05) -- 集成与部署OMCS服务器
如果需要在软件系统中集成OMCS以增加视频通话或视频会议的功能,则需要重点考虑以下几个问题。
1. 服务端的两种集成方式
(1) 在现有的服务端进程中宿主OMCS服务端:只需要在当前的服务端程序中,new一个MultimediaServer实例就可以了,它需要使用一个TCP端口。
(2) 独立部署OMCS框架提供的OMCS服务端程序:独立部署可以最有效的将视讯流量与业务逻辑分离开来,使得业务逻辑的处理不会因为视讯的流量而导致额外的延迟。
2. 关于用户管理
由于OMCS没有具体的业务逻辑,所以其服务端的用户管理的实质只是标记用户是否在线。这个是OMCS内置的,不需要与现有的系统有任何瓜葛。
只是一点,MultimediaServer会通过构造函数注入的IUserVerifier接口来验证登录用户的帐号密码是否合法。
3. 连接状态同步
通常,集成OMCS之后,在客户端将有两个TCP连接,一个连接(A连接)指向应用服务器(如ESFramework服务器),另一个连接(B连接)指向OMCS服务器。那么,客户端在线或不在线的状态以哪个为准了?常用的有两种策略。
(1)以应用服务器的连接为主。
客户端的状态以A连接为主。比如,当与应用服务器的连接断开时,客户端就显示为“不在线”,当与应用服务器连接成功时,客户端就显示“在线”。
如果采用这种策略,那么在编程时,通常会在客户端成功登录了应用服务器之后,才去连接OMCS服务器(即调用IMultimediaManager的Initialize方法),这样就可能存在一个时间间隙 -- 即应用服务器已经连接成功,而OMCS服务器还未连接。 这个间隙的存在又可能会引发新的状况:如果在这个间隙,其它Guest要访问当前客户端的多媒体设备,就会返回TargetUserOffline的结果而连接失败。发生这种情况时,作为guest的客户端用户就会很纳闷:明明看到对方已经上线了,然而,连接对方的多媒体设备,却返回TargetUserOffline,是怎么回事了?针对这种新的状况,我们可以将连接器的WaitOwnerOnlineSpanInSecs属性设为一个稍大的值,比如10秒,以等待作为Owner的客户端的多媒体管理器初始化成功。
(2)兼顾应用服务器连接与多媒体服务器的连接
我们也可以使用更保险的策略,即只有A连接和B连接都正常时,客户端才“在线”。只要其中任何一个连接断开时,客户端状态就变为“不在线”。这样,就不会出现上面因状态不同步的间隙而出现的状况了。
策略(1)和(2)各有优劣。使用策略(1),客户端的登录会快一些,但是会有两个连接状态不一致而出现的种种问题;策略(2)不会出现连接不一致的问题,但是登录就会慢一些,因为要两个连接都成功,且多媒体管理器初始化完成才算进入“在线”状态。 当然,除这两个常用的策略之外,我们也可以根据项目的具体需求,采用更适合自己的方案。
就我们的经验而言:以A连接为主连接,即以A连接的状态作为当前客户端是否在线的依据。当A连接断开时,表示客户端离线,此时应主动断开B连接。
--------------------------------------------------------------------------------------------------------------------
阅读 更多OMCS开发手册系列文章 。
Q Q:168757008
官网: www.oraycn.com