在C#中可以使用System.Net.WebSockets命名空間中的WebSocket類來創建WebSocket服務器。要實現多線程處理,可以使用Task類或Thread類來處理每個WebSocket連接。
以下是一個簡單的示例代碼,展示了如何使用Task類來處理WebSocket連接:
using System;
using System.Net;
using System.Net.WebSockets;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://localhost:8080/");
listener.Start();
Console.WriteLine("Listening for WebSocket connections...");
while (true)
{
HttpListenerContext context = await listener.GetContextAsync();
if (context.Request.IsWebSocketRequest)
{
ProcessWebSocketRequest(context);
}
else
{
context.Response.StatusCode = 400;
context.Response.Close();
}
}
}
static async void ProcessWebSocketRequest(HttpListenerContext context)
{
WebSocketContext webSocketContext = await context.AcceptWebSocketAsync(null);
WebSocket webSocket = webSocketContext.WebSocket;
Task.Run(async () =>
{
byte[] buffer = new byte[1024];
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), System.Threading.CancellationToken.None);
while (!result.CloseStatus.HasValue)
{
//處理接收到的數據
//...
result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), System.Threading.CancellationToken.None);
}
await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, System.Threading.CancellationToken.None);
});
}
}
在上面的示例中,使用Task.Run來創建一個新的任務來處理每個WebSocket連接。在任務中,首先接收來自客戶端的數據,并在一個循環中持續接收數據直到連接關閉。處理接收到的數據的邏輯可以根據實際需求進行實現。
這樣就可以實現多線程處理WebSocket連接,每個連接在一個獨立的任務中進行處理,避免阻塞主線程。