这段示例代码展示了如何使用C#语言实现WebSocket通信,包括服务器端和客户端的基本操作与消息处理。适合初学者快速入门WebSocket编程。
WebSocket是一种在客户端与服务器之间建立持久连接的协议,它支持数据双向实时传输,并显著提升了Web应用性能。使用C#编程语言,在.NET框架提供的System.Net.WebSockets命名空间中可以实现WebSocket服务。
创建一个WebSocket服务的关键在于设置监听WebSocket连接的HTTP端点。通常情况下,在ASP.NET Web应用程序开发时,我们可以在Global.asax.cs文件中的Application_Start方法内配置WebSocket路由。例如:
```csharp
protected void Application_Start()
{
// ...
RouteTable.Routes.MapWebSocketRoute(
WebSocketRoute,
ws/{*pathInfo},
new WebSocketHandler());
}
```
这里,`WebSocketHandler`是一个自定义的类,继承于System.Net.WebSockets.WebSocketHandler接口,用于处理来自客户端的WebSocket请求。
接下来是实现`WebSocketHandler`类。在该类中通过覆盖重写ProcessRequestAsync方法来管理连接生命周期(包括接受新的连接、接收消息和发送响应)。以下为一个基础示例:
```csharp
public class WebSocketHandler : WebSocketHandler
{
protected override async Task ProcessRequestAsync(HttpListenerContext context)
{
if (context.IsWebSocketRequest)
{
var webSocket = await context.AcceptWebSocketAsync(null);
await HandleWebSocketConnection(webSocket);
} else {
context.Response.StatusCode = 400;
}
}
private async Task HandleWebSocketConnection(WebSocket webSocket)
{
byte[] buffer;
WebSocketReceiveResult result;
do
{
result = await webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None);
if (result.MessageType == WebSocketMessageType.Text)
{
var message = Encoding.UTF8.GetString(buffer, 0, result.Count);
Console.WriteLine(Received: + message);
// 处理接收到的消息,并准备回应
var response = $Hello, you sent {message}!;
byte[] sendBuffer;
sendBuffer = Encoding.UTF8.GetBytes(response);
await webSocket.SendAsync(new ArraySegment(sendBuffer), WebSocketMessageType.Text, true, CancellationToken.None);
}
} while (!result.EndOfMessage && !webSocket.CloseStatus.HasValue);
if (webSocket.CloseStatus.HasValue)
{
Console.WriteLine(WebSocket closed with status: + webSocket.CloseStatus.Value);
Console.WriteLine(webSocket.CloseStatusDescription);
}
}
}
```
在这个例子中,首先确认请求是否为WebSocket类型,并接受连接。在`HandleWebSocketConnection`方法内持续接收客户端数据直到断开为止;接收到文本消息时将其打印出来并发送响应。
实际项目中可能需要处理更复杂的情况(如错误管理、多线程支持等)。视图文件和控制器可以用于构建完整的Web应用程序,其中视图包含HTML与JavaScript来初始化WebSocket连接,而控制器则处理非WebSocket的HTTP请求。通过学习这段代码示例,你可以掌握如何在C#环境中创建WebSocket服务,并在此基础上开发出实时通信的应用程序(如在线聊天、游戏等)。