文章目录
前言
在 ASP.NET Core 中集成 WebSocket 是一种实现实时通信的有效方式。WebSocket 提供了一个在单个长时间运行的连接上进行全双工通信的渠道。这意味着服务器和客户端都可以在任何时候开始发送数据。
一、创建 ASP.NET Core 项目
首先,你需要有一个 ASP.NET Core 项目。你可以使用命令行工具(如 dotnet CLI)来创建一个新的项目:
dotnet new web -n WebSocketDemo
cd WebSocketDemo
二、配置中间件以支持 WebSocket
1.启动类Program.cs
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
ConfigureServices(builder.Services);
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
var webSocketOptions = new WebSocketOptions
{
KeepAliveInterval = TimeSpan.FromSeconds(5)
};
//启动WebSockets
app.UseWebSockets(webSocketOptions);
app.UseAuthorization();
app.MapControllers();
app.Run();
}
public static void ConfigureServices(IServiceCollection services)
{
// 注册自定义服务
services.AddSingleton<WebSocketConnectionManager, WebSocketConnectionManager>();
services.AddScoped<WebSocketHandler, WebSocketHandler>();
}
}
一定要添加app.UseWebSockets(webSocketOptions);,代表使用WebSocket协议。
2.WebSocket连接管理器
/// <summary>
/// WebSocket连接管理器
/// </summary>
public class WebSocketConnectionManager
{
#region Constructor
public WebSocketConnectionManager()
{
_sockets = new ConcurrentDictionary<string, WebSocket>();
_clientSendCommands = new ConcurrentDictionary<string, ConcurrentBag<string>>();
}
#endregion
#region Property
/// <summary>
/// WebSocket连接池
/// </summary>
private readonly ConcurrentDictionary<string, WebSocket> _sockets;
/// <summary>
/// 客户端发送的命令池
/// </summary>
private