C# 实现WebSocket服务端教程

C# 实现WebSocket服务端教程

1. 介绍

WebSocket 是一种在Web浏览器和Web服务器之间建立双向通信的技术。它允许服务器主动向客户端推送数据,而不需要客户端不断地发起请求。WebSocket 在实时应用程序中非常有用,例如在线聊天应用程序、股票市场实时报价等等。本教程将重点介绍如何使用 C# 实现一个 WebSocket 服务端。

2. 准备工作

2.1 安装 NuGet 包

首先,我们需要安装一个叫做 "Microsoft.AspNetCore.WebSockets" 的 NuGet 包。可以使用 Visual Studio NuGet 包管理器安装,或者使用以下命令在命令行中安装:

Install-Package Microsoft.AspNetCore.WebSockets

2.2 创建 WebSocket 服务端

接下来,我们需要创建一个 C# 类来实现 WebSocket 服务端。打开 Visual Studio,并创建一个新的类文件,命名为 "WebSocketServer.cs"。在此文件中,我们将编写我们的 WebSocket 服务端代码。

3. 编写代码

3.1 引入命名空间

首先,我们需要引入相关的命名空间:

using Microsoft.AspNetCore.Builder;

using Microsoft.AspNetCore.Hosting;

using Microsoft.AspNetCore.Http;

using Microsoft.AspNetCore.WebSockets;

using System;

using System.Net.WebSockets;

using System.Text;

using System.Threading;

using System.Threading.Tasks;

3.2 编写 WebSocket 中间件

接下来,我们需要编写一个 WebSocket 中间件,来处理 WebSocket 连接的建立和消息的传递。在代码文件中添加以下代码:

public class WebSocketServer

{

private readonly RequestDelegate _next;

public WebSocketServer(RequestDelegate next)

{

_next = next;

}

public async Task Invoke(HttpContext context)

{

if (context.WebSockets.IsWebSocketRequest)

{

WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync();

await HandleWebSocket(webSocket);

}

else

{

await _next.Invoke(context);

}

}

private async Task HandleWebSocket(WebSocket webSocket)

{

var buffer = new byte[1024 * 4];

while (webSocket.State == WebSocketState.Open)

{

var result = await webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None);

if (result.MessageType == WebSocketMessageType.Close)

{

await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None);

}

else

{

// 处理接收到的消息

string message = Encoding.UTF8.GetString(buffer, 0, result.Count);

// TODO: 处理接收到的消息

}

}

}

}

3.3 配置中间件

接下来,我们需要在 Startup.cs 文件中进行中间件的配置。在 Configure 方法中添加以下代码:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

{

// 省略其他中间件配置

app.UseWebSockets();

app.UseMiddleware<WebSocketServer>();

// 省略其他中间件配置

}

4. 启动服务端

现在我们已经完成了 WebSocket 服务端的编写和配置。接下来,我们需要启动服务端并等待客户端的连接。

4.1 编写入口文件

为了方便测试,我们可以编写一个简单的入口文件来启动服务端。创建一个新的类文件,命名为 "Program.cs",并添加以下代码:

using Microsoft.AspNetCore.Hosting;

using Microsoft.Extensions.Hosting;

using System.Threading.Tasks;

namespace WebSocketServerExample

{

public class Program

{

public static async Task Main(string[] args)

{

await CreateHostBuilder(args).Build().RunAsync();

}

public static IHostBuilder CreateHostBuilder(string[] args) =>

Host.CreateDefaultBuilder(args)

.ConfigureWebHostDefaults(webBuilder =>

{

webBuilder.UseStartup<Startup>();

});

}

}

4.2 启动服务端

现在我们可以运行程序,服务端就会启动并开始监听客户端的连接请求。可以使用浏览器或者其他 WebSocket 客户端工具来进行连接和通信。

5. 总结

通过本教程,我们学习了如何使用 C# 实现一个 WebSocket 服务端。我们首先介绍了 WebSocket 技术及其在实时应用程序中的作用。然后,我们学习了如何安装必要的 NuGet 包和创建 WebSocket 服务端的基本结构。最后,我们编写了一个 WebSocket 中间件并配置了服务端,然后启动了服务端并等待客户端的连接。希望本教程对你理解并实现 WebSocket 服务端有所帮助。

本教程同时适用于使用 .NET Core 和 .NET Framework 开发的 WebSocket 服务端。

后端开发标签