Thursday, May 31, 2012

UDP Multicast

在 Silverlight 4.0 提供了 UDP MultiCast的功能。什麼是 UDP,可以參考下列說明:

UDP 則是一個非連線型(Connectionless)的非可靠傳輸協定﹐它並不會運用確認機制來保
證資料是否正確的被接收、不需要重傳遺失的資料、資料的接收可不必按順序進行、也不提
供回傳機制來控制資料流的速度。因此﹐ UDP 信息可能會在網路傳送過程中丟失﹑重複﹑
或不依順序﹐而且抵達速度也可能比接收端的處理速度還快。對於某些訊息量較大、時效性
大於可靠性的傳輸來說(比方說語音 / 影像),UDP 的確是個不錯的選擇。

Silverlight 4.0 在 System.Net.Sockets 命名空間下有兩個類別分別實作了 MultiCast
的功能:

接收端僅接收單一來源的伺服器的內容,這是屬於一(Server)對多(Client)的關係(Source
Specific Multicast (SSM))。


UdpAnySourceMulticastClient
接收端可接收多重來源的伺服器的內容,這是屬於多(Server)對多(Client)的關係(也可以稱為 Any Source Multicast (ASM) or Internet Standard Multicast (ISM))。

 這裡我們要建立 Policy Server,在多點傳送時,需要設定一個 Policy 檔案來驗證
 client 是否能傳送訊息,內容如下:
   1: <?xml version="1.0" encoding="utf-8" ?>
   2:  
   3: <!--  an example configuration file  -->
   4: <slmp:multicast-policy-responder xmlns:slmp="http://schemas.microsoft.com/silverlight/policyservers/multicastpolicyserver">
   5:   <slmp:ssm-responder>
   6:     <slmp:respond-to application="http://www.contoso.com/">
   7:       <slmp:allowed-resource group="232.0.0.1" port="12345" />
   8:       <slmp:allowed-resource group="ff3e::8000:1" port="12345-12346" />
   9:     </slmp:respond-to>
  10:   </slmp:ssm-responder>
  11:   <slmp:asm-responder>
  12:     <slmp:respond-to application="http://www.contoso.com/">
  13:       <slmp:allowed-resource group="224.0.0.1" port="12345" />
  14:       <slmp:allowed-resource group="ff0e::1" port="12345-12346" />
  15:     </slmp:respond-to>
  16:   </slmp:asm-responder>
  17: </slmp:multicast-policy-responder>

傳遞的順序為:
Client傳遞一個「announcement」訊息給 Policy Server,向 Server 要求 Policy 檔案,
然後 Server 傳遞 Policy 檔案給 Client 端,驗證 Client 端是不是有符合檔案內的 ip
以及 port 設定。

我們來看 UdpAnySourceMulticastClient 怎麼處理的?
1.
首先要加入 multicast group:
image

2.
傳送訊息給 Group 內的人。
image

3.
接收的處理:
image 



我們直接來看 Silverlight 在聊天室中運用 Multicast 傳遞的結果:
首先要執行 Policy Server:
image

User 分別為:
image image

展開對話:
image


這個功能還可以運用在語音的傳遞上,因為語音傳遞較需要時效性,可以透過 UDP 來處理。

希望這篇文章對您有幫助。

參考網址:

No comments: