在 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:
2.
傳送訊息給 Group 內的人。
3.
接收的處理:
我們直接來看 Silverlight 在聊天室中運用 Multicast 傳遞的結果:
首先要執行 Policy Server:
User 分別為:
展開對話:
這個功能還可以運用在語音的傳遞上,因為語音傳遞較需要時效性,可以透過 UDP 來處理。
希望這篇文章對您有幫助。
參考網址:
No comments:
Post a Comment