WebSocketSharp 基礎語法:連線、架設、訊息收發與伺服器廣播

2023.02.14 / Dev

WebSocketSharp 是一個 C# 版本的 WebSocket 程式庫,透過少許的語法就能輕易實作跨裝置、平台、軟體的資料傳輸功能。WebSocketSharp 除了能在一般的 C# 專案中使用,也可用於 Unity 開發。

WebSocketSharp 是一個 C# 版本的 WebSocket 程式庫,透過少許的語法就能輕易實作跨裝置、平台、軟體的資料傳輸功能。WebSocketSharp 除了能在一般的 C# 專案中使用,也可用於 Unity 開發。

開發環境

於同一解決方案中建立兩個主控台應用程式專案,分別用於開發客戶端與伺服器。

作業系統Windows 10
開發軟體Visual Studio 2022
程式語言C#
框架版本.NET 6.0
專案類型主控台應用程式

安裝 NuGet 套件

開啟 工具 > NuGet 套件管理員 > 管理方案的 NuGet 套件 面板,搜尋 WebSocketSharp 套件並安裝。

伺服器架設

基礎語法

首先需建立伺服器處理邏輯運算用的行為類別 (CustomBehavior),繼承 WebSocketBehavior 後,覆寫 OnOpen 與 OnMessage 方法。

 1using WebSocketSharp;
 2using WebSocketSharp.Server;
 3
 4namespace TEDLIOU.WebsocketSharp.Example.Server
 5{
 6    internal class CustomBehavior : WebSocketBehavior
 7    {
 8        protected override void OnOpen()
 9        {
10            // TODO
11        }
12
13        protected override void OnMessage(MessageEventArgs e)
14        {
15            // TODO
16        }
17    }
18}

實體化 WebSocketServer 後,建立路徑與定義其行為類別。

 1using WebSocketSharp.Server;
 2
 3namespace TEDLIOU.WebsocketSharp.Example.Server
 4{
 5    internal class Program
 6    {
 7        static void Main(string[] _)
 8        {
 9            var port = 8080;
10            var path = "/";
11            var wssv = new WebSocketServer(port);
12            wssv.AddWebSocketService<CustomBehavior>(path);
13            wssv.Start();
14
15            Console.ReadLine();
16        }
17    }
18}

接收訊息

於 OnMessage 中讀取輸入的 MessageEventArgs 參數的 Data 即是收到的字串,或讀取 RawData 取得 Byte 陣列。

1protected override void OnMessage(MessageEventArgs e)
2{
3    if (e.IsText)
4        Console.WriteLine(e.Data);
5
6    if (e.IsBinary)
7        Console.WriteLine(e.RawData);
8}

回應訊息

於 CustomBehavior 的 OnMessage 呼叫 Send 以送出回應訊息。需先接收後才能回應,適用於一對一溝通。

1protected override void OnMessage(MessageEventArgs e)
2{
3    Send("Hello World!");
4}

廣播訊息

於 CustomBehavior 的任意位置呼叫 Sessions.Broadcast 以送出廣播訊息。由伺服器主動推送至所有客戶端,適用於一對多溝通,例如:聊天室。

1Sessions.Broadcast("Hello World!");

客戶端連線

基礎語法

ws://IP:Port/Path 格式的位址實體化 WebSocket 後,註冊 OnMessage 事件與啟動連線。

 1using WebSocketSharp;
 2
 3namespace TEDLIOU.WebsocketSharp.Example.Client
 4{
 5    internal class Program
 6    {
 7        static void Main(string[] _)
 8        {
 9            var server = "127.0.0.1";
10            var port = 8080;
11            var path = "/";
12            var ws = new WebSocket($"ws://{server}:{port}{path}");
13            ws.OnMessage += OnMessage;
14            ws.Connect();
15
16            Console.ReadLine();
17        }
18
19        static void OnMessage(object? sender, MessageEventArgs e)
20        {
21            // TODO
22        }
23    }
24}

發送訊息

在任何能存取 WebSocket 物件的位置呼叫 Send 方法即可送出訊息。

1ws.Send("Hello World!");

接收訊息

於 OnMessage 中讀取 Data 或 RawData 以接收訊息,用法與伺服器的相同。

1static void OnMessage(object? sender, MessageEventArgs e)
2{
3    if (e.IsText)
4        Console.WriteLine(e.Data);
5
6    if (e.IsBinary)
7        Console.WriteLine(e.RawData);
8}

WebSocketSharp 適用於需於 C# 中實作跨裝置、平台或軟體連線功能的專案,無論是本機、區域或網際網路連線,皆無須煩惱底層的封包傳輸問題,能有效節省開發成本。

相關文章

Ted Liou

雲科碩士在讀中,專注於 Unity C#、TouchDesigner 技術。
只要願意以超連結標註本文,歡迎轉載或用於教材製作!