UC故事2012/05/03 Server

来源:互联网 发布:php网络验证系统源码 编辑:程序博客网 时间:2024/05/19 03:43

 

1. 总结

* message bus

是否有一个中心的注册机制保存所有注册的server相关信息?或者是分布在所有server上的? 

 

* ServerConnect

里面有一个handler的列表,根据pdu的type调用相关handler的OnNewConnection处理方法。

Ping Request只是其中一种。

 

* 关于MCS与Port

 

## Port的概念是以MCS为中心来说的

SendData,意味着从MCS往Port代表的通讯end point发信息,对于User,则意味着向client side发信息

OnReceiveData,意味着通过port接收信息到MCS,对于User,意味着将由client发过来的音视频接收进来,然后直接调用mcs->SendData就发送出去了,以后的事由mcs处理,无论最终目的是local port,或远方很远另一个服务器上的一个user port。

 

Q:在client代码里,肯定没有对port的处理,只有对ID的处理,对吧?

Q:client code在向远方发送信息,到底通过什么接口?Connection.SendData?如何到达UserPort::OnReceiveData()的?

Q:所有不同user之间的信息传递,都要经过MCS instance中转?

 

## MCS之数据转发

Port把所有需要传给第三方的东东都扔给MCS的SendData

SendData取名ForwardData更好。

 

Q:如果Channel是一种特殊port,why特殊处理(MCS有不少关于Channel的方法)?

    A:Channel是一种特殊port,只是站在它和所有port一样,都有SendData()方法,但Channel本身在业务上有独特含义,

          故MCS的接口中会出现Channel的东东  2012/07/15

 

Q:SendData与EvtSendData的区别?

     A:前者供MCS层对象在net thread中调用,后者提供给GCC在user thread中调用(通过event queue)2012/07/15

 

* Channel

Q:Channel的存在就是为了处理1:N通讯?

Q:一个client向另一个client发chat消息,中间要通过类似Chat Channel一样的东东吗?或者private chat不需要,但public chat需要?

Q:为什么同时存在Channel与ChannelPort?

Q:客户端真地需要有区别地处理不同种类的Channel吗?都向all Channel发信息,server如何处理的?

 

* Bind and Function

在其它线程执行异步动作的关键

Functor是一种Event,最终通过EventQueue来执行的相关动作。

Q:细节需要仔细研究!

 

*  再议MCS 与 Proxy

proxy只有SendData一个方法,供gcc层对象调用;转换成对mcs::evtSendData的调用(异步、异线程)

                                                                                                                   ^ 因为是通过event queue来调用的,故名为evtSendData() 2012/07/15

mcs中有两个方法,一个是SendData,另一个是evtSendData;前者用于mcs层内的forward操作,后者仅供gcc层对象通过proxy调用

Q:mcs::SendData到底什么时候被什么对象调用了?

    A:我的理解是被port实例在SendData()或OnRecvData()调用 2012/07/15

 

Q:Why evtSendData不直接调mcs -> SendData而要单独实现?

    A:我以为evtSendData()只是简单实现对一个dest port id发送数据,并没有转发的语义,而后者有在mcs层内部转发的语义,

         要实现的功能不一样的。在evtSendData()的某个调用链上,可能会用上SendData(). 2012/07/15

 

*  Port与data direction

Port的有意义的public biz method只有一个SendData(),而OnRecvData未定义

LocalPort定义了Private的OnRecvData方法,被SendData在另一个thread中调用,这样,SendData/OnRecvData是一个方向的数据流动。

     补充:SendData()通过在user thread异步调用了OnRecvData();

                 OnRecvData()通过ILocalPortSink()向上层(Session, conference)传递数据。2012/07/15

 

Q:LocalPort只有向gcc端的流动?若gcc向mcs方向流动如何处理?应该是通过thread proxy!(这样的话,Port的语义就不单纯了)

 

总结下:

* user port:双向

* local port:单向

* master server port(S2SSerevr?):单向,仅仅slave -> master?

* slave server port(S2SClientPort?):单向,仅仅 master -> slave ?

 

另:user port / master server port / slave serve port都继承自NetMiddleLayer,故有很多共同行为(不同的行为在哪里定义的???

 

* conference and Local port

Q:有多少种不同种类的数据会通过lcoal port到达conference?

CONF_ENROLL_RQST

SESS_ENROLL_RQST

CONF_LEAVE_RQST

NET_DISCONNECT_CALLBACK_REQUEST

CONF_INVITEH323_RQST

TYPE_TOP_KICK_USER

 

* 一个client向另一个不同info server上的client发消息的过程

对一个特定的client user port(非local port),执行OnRecvData只是简单地把数据扔给mcs(mcs->SendData()),由mcs视情况转发到ocal port、另一个user port、上线server或下级server的port。

Q:中转的info server中,数据如何到达当前conference的mcs中的?

   A:通过master / slave server port接收(OnReceive),再通过SendData发给mcs,传播出去!应该是这样 3:00 PM,05/03/2012

 

* mcs与thread

Q:如果只有一个net thread,这些不同的conference的mcs层是如何协调执行的?

Q:info svr启动后,main thread与net thread一直在执行什么?就是event queue循环吗?

 

* Channel与ChannelPort

Channel Port是MCS的概念,故只存在于server的mcs层

    A:我以为ChannePort存在的原因是在多个physical server之间建立一个统一的Channel的概念,是为了辅助Channel概念的实现而存在的技术类 2012/07/15

 

Q:Channel是一个业务概念,存在于client/server中??? 

 

2. 杂想杂问

Q:GC向Info发消息以及Info向GC发消息,总是通过message bus吗?具体说,GeneralControl::OnConfCreat如何被调用的?

    A:Yes, I think so. 2012/07/15

 

Q:SvrConfProxy的职责:一句话?

Q:是否通过PDU传的东东都是通过MB或MCS的?或者两者没有任何关联?

Q:列一个表,各种不同的信息在各种不同的port之间传递? 

原创粉丝点击