(本文適用于ESFramework V0.3+)
在 ESFramework介紹之(7)-- 服務(wù)器代理IServerAgent(2006.06.06修正) 的介紹中,我們已經(jīng)認(rèn)識了IServerAgent的職責(zé)與作用,并且知道了 ITcpServerAgent和IUdpServerAgent是分別使用于Tcp和Udp的ServerAgent。但是它們與其它組件(比如通信組件、消息處理器、處理器工廠)之間的聯(lián)系是怎樣的,前文講的還不清楚,所以這里增加一篇文章,把這個關(guān)系理順。下面分別是ITcpServerAgent和IUdpServerAgent的組件關(guān)系圖:
上面兩個圖非常清晰的描述了組件間的依賴關(guān)系和消息的流向。
注意,上面的ITcpServerAgent和IUdpServerAgent兩個組件關(guān)系圖中右邊的部分是完全相同的,它們都是由IServerAgentHelper幫助構(gòu)建。紅線代表將消息發(fā)送出去,黑線代表對接收的消息的處理流程。可以看到ITcpServerAgent和IUdpServerAgent都是從IResponseManager提取回復(fù)消息,以此才可能將異步的消息請求/回復(fù)轉(zhuǎn)化為同步的“方法調(diào)用”。
關(guān)于IUdpServerAgent,還有一個地方需要注意,我們在客戶端和服務(wù)端都使用相同的Udp網(wǎng)絡(luò)組件--IEsbUdp(可復(fù)用性是ESFramework發(fā)展過程中一直堅守的目標(biāo)),只不過服務(wù)端為IEsbUdp裝配的消息分派器IMessageDispatcher復(fù)雜些。
在這兩個組件關(guān)系圖中,除了ISingleMessageDealer需要我們自己實現(xiàn)以外,其它的所有組件,ESFramework都提供了參考實現(xiàn),可以直接使用。
最后,引出一個問題,那就是當(dāng)客戶端使用了點對點的通信時,如果客戶A和客戶B之間能直接通信,那么A和B之間的P2PMessage就不需要經(jīng)過服務(wù)器轉(zhuǎn)發(fā),即不需要提交給IServerAgent,而是交給IP2PChannel發(fā)送;如果客戶A和客戶B之間不能直接通信,那么A和B之間的P2PMessage就需要經(jīng)過服務(wù)器轉(zhuǎn)發(fā)。為了對上層應(yīng)用屏蔽P2PMessage是通過服務(wù)器轉(zhuǎn)發(fā)器的還是通過IP2PChannel直接發(fā)送的,ESFramework引入了IMessageTransceiver,它的智能在于,如果P2PMessage可以通過IP2PChannel直接發(fā)送,則將其交給IP2PChannel,否則將其提交給IServerAgent由服務(wù)器轉(zhuǎn)發(fā)。這樣應(yīng)用只需要直接使用IMessageTransceiver提交(發(fā)送)消息就可以了,而不用關(guān)心下層的消息路由途徑。關(guān)于IMessageTransceiver和IP2PChannel的更多信息將在下文中介紹。
感謝關(guān)注!
上篇文章: ESFramework介紹之(33)―― AS與FS通信實現(xiàn)及相關(guān)
轉(zhuǎn)到: ESFramework 可復(fù)用的應(yīng)用框架(序)
在 ESFramework介紹之(7)-- 服務(wù)器代理IServerAgent(2006.06.06修正) 的介紹中,我們已經(jīng)認(rèn)識了IServerAgent的職責(zé)與作用,并且知道了 ITcpServerAgent和IUdpServerAgent是分別使用于Tcp和Udp的ServerAgent。但是它們與其它組件(比如通信組件、消息處理器、處理器工廠)之間的聯(lián)系是怎樣的,前文講的還不清楚,所以這里增加一篇文章,把這個關(guān)系理順。下面分別是ITcpServerAgent和IUdpServerAgent的組件關(guān)系圖:


上面兩個圖非常清晰的描述了組件間的依賴關(guān)系和消息的流向。
注意,上面的ITcpServerAgent和IUdpServerAgent兩個組件關(guān)系圖中右邊的部分是完全相同的,它們都是由IServerAgentHelper幫助構(gòu)建。紅線代表將消息發(fā)送出去,黑線代表對接收的消息的處理流程。可以看到ITcpServerAgent和IUdpServerAgent都是從IResponseManager提取回復(fù)消息,以此才可能將異步的消息請求/回復(fù)轉(zhuǎn)化為同步的“方法調(diào)用”。
關(guān)于IUdpServerAgent,還有一個地方需要注意,我們在客戶端和服務(wù)端都使用相同的Udp網(wǎng)絡(luò)組件--IEsbUdp(可復(fù)用性是ESFramework發(fā)展過程中一直堅守的目標(biāo)),只不過服務(wù)端為IEsbUdp裝配的消息分派器IMessageDispatcher復(fù)雜些。
在這兩個組件關(guān)系圖中,除了ISingleMessageDealer需要我們自己實現(xiàn)以外,其它的所有組件,ESFramework都提供了參考實現(xiàn),可以直接使用。
最后,引出一個問題,那就是當(dāng)客戶端使用了點對點的通信時,如果客戶A和客戶B之間能直接通信,那么A和B之間的P2PMessage就不需要經(jīng)過服務(wù)器轉(zhuǎn)發(fā),即不需要提交給IServerAgent,而是交給IP2PChannel發(fā)送;如果客戶A和客戶B之間不能直接通信,那么A和B之間的P2PMessage就需要經(jīng)過服務(wù)器轉(zhuǎn)發(fā)。為了對上層應(yīng)用屏蔽P2PMessage是通過服務(wù)器轉(zhuǎn)發(fā)器的還是通過IP2PChannel直接發(fā)送的,ESFramework引入了IMessageTransceiver,它的智能在于,如果P2PMessage可以通過IP2PChannel直接發(fā)送,則將其交給IP2PChannel,否則將其提交給IServerAgent由服務(wù)器轉(zhuǎn)發(fā)。這樣應(yīng)用只需要直接使用IMessageTransceiver提交(發(fā)送)消息就可以了,而不用關(guān)心下層的消息路由途徑。關(guān)于IMessageTransceiver和IP2PChannel的更多信息將在下文中介紹。
感謝關(guān)注!
上篇文章: ESFramework介紹之(33)―― AS與FS通信實現(xiàn)及相關(guān)
轉(zhuǎn)到: ESFramework 可復(fù)用的應(yīng)用框架(序)
ESFramework介紹之(34)―― ITcpServerAgent和IUdpServerAgent組件關(guān)系圖
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
