一開始進入公司開發的專案都是單機版,一台電腦跟多個硬體設備做通訊連線而已
最近開始準備接觸多台連線的架構
所以紀錄了一下這陣子看得關於 C# .Net 提供的網路通訊的一些Lib
首先當是Goolge關鍵字 C# WebSocket、C# 網路通訊
其實上網找的很多範例,基本上照著做也都可以Work沒有問題
不過我也發現很多範例不知道為什麼都是混著的
所以紀錄關於網路通訊的部分,提供自己以後複習的時候比較方便。
這部分我打算分成3-4個部分來做紀錄,也順便整理一下自己的思緒
(找了一堆文件跟範例看到最後自己都暈了 阿...)
至於通訊相關的詳細技術等等就不會再多做介紹
首先在.Net Framework 裡面提供了幾個關於 Web通訊的一些Lib
。WebSocket
。TcpListener / TcpClient
。UdpClient
。SignalR
Server 與 Client
在找到這些相關通訊範例程式的時候,多半都會看到所謂的Server與Client的程式碼區別
在這邊我定義的Server 與 Client 其實只是在收到資料後處理的事情不同
因為很多範例都寫成Server是接收資料,Client是發送資料
但其實不管是Server、Client都應該是有收與送的功能,當然在程式法宣告監聽的部分還是有差
簡單討論 TCP / UDP差異
TCP:
一進一出的發送方式,需要驗證資料,確保雙方的位元資料流之統一性。
缺點:當多台Client或是有Client斷線時,可能導致訊息送出打死結
UDP:
廣播的方式傳送,不需要驗證資料,不保證正確性,速度較快
缺點:會有資料遺漏的情況。
WebSocket
WebSocket 使得用戶端和伺服器之間的資料交換變得更加簡單,允許伺服端主動向用戶端推播資料。在 WebSocket API 中,瀏覽器和伺服器只需要完成一次交握,兩者之間就直接可以建立永續性的連線,並進行雙向資料傳輸。 (擷取維基百科)
對我而言Websocket就是這些網路通訊Lib的爸爸感覺
微軟將這個技術時做到.Net Framework
然後我們可以直接透過他提供的物件、方法去使用這樣的技術
所以其實上面講了那麼多Lib裡面,只要使用Websocket這個Lib函式庫
其實就可以達到我需要的功能
至於TcpListener 、 TcpClient 、 UdpClient這些東西呢
就是讓我們在寫程式的時候,又可以更快速方便使用這樣的技術
至於SignalR又可以說是另外一個部分,我自己是解讀成WebSocket高級版。
TcpListener 、TcpClient
就如上續所說的,TcpListener、TcpClient跟WebSokcet其實是很類似的東西
就是在宣告、撰寫程式碼的時候語法有些不同而已
主要都是建立一個TcpListener,搭配執行緒與無窮迴圈去監聽Client是否有連線
再針對收到的訊息坐進一步的處理。
UdpClient
UDP在建置就比較不一樣,他只有UdpClient這個函式去監聽指定IP位置幾網路阜而已
另外UDP再傳訊息有兩種方式,其中一種與TCP一樣,對指定IP及Port發送訊息
另一種就是廣播的方式,直接對同網域的最後一個位置 .255 (ex:192.168.1.255)做Send動作
那所有開啟監聽的電腦都會收到訊息
但是這個部分是沒辦法在同一台電腦測試的!!!!
因為一台電腦只能開啟一個網路阜,所以在開的時候就會直接跳錯誤訊息了
SignalR
至於SignalR真的是非常強大
其實這個東西主要是為了網頁設計RealTime跟需要做及時處理的部分而生的一個Lib
建置的時候非為兩個部分,一個是建立類似TcpListener的監聽,另一個是建立一個Hub
在Hub裡面去定義提供公連線進來的Client端有些方法可以去使用
並且支援很多相關的Event事件,斷線重連等等部分
就我自己解讀,就是WebSokcet強化優化版。
接下來開始記錄程式碼的部分,依序會是
TcpListener/TcpClient
UdpClient
WebSocket TCP
WebSocket UDP
SignalR
沒有留言:
張貼留言