在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连接,每个连接在一个独立的任务中进行处理,避免阻塞主线程。