天天看點

P2P直連?經伺服器中轉?一.通道品質優先模型二.模型實作三.方式選擇

      當同一個系統的兩個用戶端A、B互相發送消息給對方時,如果它們之間存在P2P通道,那麼消息傳送的路徑就有兩種:直接經P2P通道傳送、或者經伺服器中轉。如下圖所示:

P2P直連?經伺服器中轉?一.通道品質優先模型二.模型實作三.方式選擇

      然而,有些系統可能不能就如此簡單的處理,最簡單的例子,如果A和B之間傳遞的某些類型的消息必需讓伺服器監控到,那麼,這樣的消息就必需經過伺服器中轉。接下來,我們讨論一種較為複雜的情況。比如,在網絡語音對話系統中,通道的品質直接決定着使用者體驗的好壞。我們希望,在這種系統中,語音資料需要始終經由兩條通道中的那個品質較高的通道進行傳送。這種政策就是所謂的“通道品質優先”模型。

      “通道品質優先”模型了解起來很簡單,但是在實際中實作時,卻還是很有難度的。通常有兩種實作方式:

(1)定時檢測、比較通道延時,并自動切換通道。

(2)由上層應用決定何時切換通道。一般而言,是當應用發現目前使用的通道不滿足要求時,就主動要求切換到另外一條通道。

       現在,我們對上面的實作簡單解釋一下。

(1)由于目前用戶端可能會與多個其它的用戶端進行通信,而與每一個其它的用戶端之間的通信都有通道選擇的問題,是以需要一個字典ObjectManager将它們管理起來。

(2)當某個P2P通道建立成功時,将進行首次ping比較,并将結果記錄到字典中。

(3)定時引擎每隔60秒,分别針對每個其它用戶端進行通道檢測比較,自動選擇ping值小的那個通道。

(4)當我們将PingTestSpanInSecs設為0時,就可以使用SwitchChannel方法來手動切換通道,即實作了上述的方式2。

      上面講到“通道品質優先”模型的兩種實作方式,那麼在實際的應用中,如何進行選擇了?

1.ping檢測比較,自動切換     

      就這種方式而言,其缺陷在于,在用戶端之間需要進行高頻通信的系統中,ping檢測可能是非常不準确的,甚至是錯誤的。

      比如,在實時視訊對話系統中,其對帶寬的要求是比較高的,假設,現在所有的視訊資料走的都是P2P通道,那麼P2P通道就非常忙碌,而經伺服器中轉的通道幾乎就是空閑的。是以,當下一次定時ping檢測到來時,P2P通道的ping值就會比實際的大。進而導緻判斷失誤,而發生錯誤的自動切換。

2.手動切換

      對于剛才視訊對話的例子,使用手動切換可能是更好的選擇,由應用根據上層的實際效果來決定是否需要切換通道。比如,還以視訊對話系統為例,應用可以根據資訊接收方的定時回報(在一段時間内,缺少音/視訊包的個數,音/視訊包的總延時等統計資訊)來決定是否要切換到另外一個通道。這種方式更簡潔描述可以表達為:如果目前通道品質已達到應用需求,即使另一個通道更快更穩定,也不進行切換;如果目前通道品質達不到應用需求,則切換到另一個通道(有可能另一個通道的品質更糟糕)。 

      本文隻是簡單地引出通道選擇模型的問題,實際上,這個問題是相當複雜的,特别是在一些通信要求很高的項目中,而且,如果将廣播消息的通道模型考慮進來就更麻煩了,有興趣的朋友可以留言進行更深入的讨論。

繼續閱讀