除了http request之外,websocket時常被用來進行常鏈接的網路功能實作。

本篇文章講述如何使用C# WebSocketSharp實作websocket功能。

Websocket Class設計

引用library

沒有WebSocketSharp的人記得要先去擴充庫下載。

筆者使用的是能夠自訂header的版本:websocket-sharp-customheaders
Install-Package websocket-sharp-customheaders
下方會解釋原因及使用方法。

創建websocket class

宣告WebSocket ws。

宣告事件Handler,用來對接收websocket訊息後發出通知。

創建設定websocket function

上方程式碼中,使用該function先帶入ip, port, (UserID),進行連線設定。

這邊有個小技巧,由於預設的WebSocketSharp library並無法簡單自訂連線header,
所以我們要去下載websocket-sharp-customheaders。
https://www.nuget.org/packages/websocket-sharp-customheaders

指令安裝:
Install-Package websocket-sharp-customheaders

上方程式碼及為自訂連線header。
更詳細使用方式如下圖:

server連線資料設定完後,創建websocket事件,其中包含:
OnOpen: websocket開啟。
OnMessage: websocket訊息進入。
OnError: websocket發生錯誤。
OnClose: websocket關閉。

異步連接function/斷連function

我們所使用的library支援異步連接,讓連接在程式背景執行,就不會干涉UI行為。

當斷連時,我們必須將監聽的事件移除,讓下次重新連線時重新加入事件。
並且清空物件。

websocket事件接收function

這段程式碼主要針對websocket事件做接收後的行為。

筆者的程式是在有訊息進入時將data帶入class變數中(用來回傳給UI),
並發出事件。

發出事件function

將OnMessage收到的資料帶入事件中發出。

定義class變數

設定回傳訊息為string。


UI接收事件設定

引用websocket class

初始化物件

在form load時加入事件並新增接收事件後之行為

下方新增事件行為function是在上方新增+=事件時按下tab會自動帶出。

這邊我們將事件中的行為改寫為呼叫webSocketMsgIn callback function並帶入事件本身(sender)以及data內容(e)。

UI連線

這邊就是呼叫我們在class中的連線設定及連線function。

可綁定在Button事件中(或是其他任何事件)。

UI斷線

事件callback function

最後修改日期: 2021-03-31

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。