在 .NET Core 中创建 Web Socket API

要在 ASP.NET Core 中创建 WebSocket API,您可以按照以下步骤操作:

设置新的 ASP.NET Core 项目

打开 Visual Studio 或您喜欢的 IDE。

创建一个新的 ASP.NET Core Web 应用程序项目。

选择API模板,因为这将成为您的 WebSocket API 的基础。

在启动时添加 WebSocket 支持

打开Startup.cs(或Program.cs在 .NET 6 或更高版本中)。

在Configure方法中,通过调用添加 WebSocket 支持 UseWebSockets()。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

{

if (env.IsDevelopment())

{

app.UseDeveloperExceptionPage();

}

else

{

app.UseExceptionHandler("/Home/Error");

app.UseHsts();

}

// Enable WebSocket support

var webSocketOptions = new WebSocketOptions

{

KeepAliveInterval = TimeSpan.FromSeconds(120),

ReceiveBufferSize = 4096

};

app.UseWebSockets(webSocketOptions);

app.UseRouting();

app.UseEndpoints(endpoints =>

{

endpoints.MapControllers();

});

}

创建 WebSocket 处理程序

创建将处理 WebSocket 连接的新服务或类。

public class WebSocketHandler

{

private readonly WebSocket _webSocket;

public WebSocketHandler(WebSocket webSocket)

{

_webSocket = webSocket;

}

public async Task HandleWebSocketAsync(CancellationToken cancellationToken)

{

var buffer = new byte[1024 * 4];

WebSocketReceiveResult result;

do

{

result = await _webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), cancellationToken);

if (result.MessageType == WebSocketMessageType.Text)

{

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

// Process message or forward it

}

else if (result.MessageType == WebSocketMessageType.Close)

{

await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", cancellationToken);

}

} while (!cancellationToken.IsCancellationRequested);

}

}

创建 WebSocket 控制器

在您的Controllers文件夹中,创建一个监听 WebSocket 连接的新控制器。

ApiController

Route("api/\[controller\]")

public class WebSocketController : ControllerBase

{

private readonly WebSocketHandler _webSocketHandler;

public WebSocketController(WebSocketHandler webSocketHandler)

{

_webSocketHandler = webSocketHandler;

}

HttpGet("connect")

public async Task<IActionResult> Connect(CancellationToken cancellationToken)

{

if (!HttpContext.WebSockets.IsWebSocketRequest)

{

return BadRequest("WebSocket request expected");

}

var webSocket = await HttpContext.WebSockets.AcceptWebSocketAsync();

await _webSocketHandler.HandleWebSocketAsync(cancellationToken);

return Ok();

}

}

配置依赖注入

在Startup.cs(或Program.cs在 .NET 6 中)将其注册 WebSocketHandler为服务。

public void ConfigureServices(IServiceCollection services)

{

services.AddSingleton<WebSocketHandler>();

services.AddControllers();

}

处理 WebSocket 消息

在您的 中WebSocketHandler,您可以添加逻辑来处理 WebSocket 消息。这包括读取、发送和处理不同类型的消息。

例如,在HandleWebSocketAsync方法中:

if (result.MessageType == WebSocketMessageType.Text)

{

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

// Send a response back to the client

var response = Encoding.UTF8.GetBytes($"You said: {message}");

await _webSocket.SendAsync(new ArraySegment<byte>(response), WebSocketMessageType.Text, true, cancellationToken);

}

运行应用程序

现在,运行您的应用程序。您可以使用 WebSocket 客户端(例如 Postman、WebSocket 测试工具)或浏览器中的自定义 JavaScript 客户端来测试 WebSocket API。

使用 JavaScript 测试 WebSocket

您可以使用 JavaScript 测试您的 WebSocket API,如下所示:

const socket = new WebSocket('ws://localhost:5000/api/websocket/connect');

socket.onopen = () => {

console.log('WebSocket connection established');

socket.send('Hello WebSocket Server!');

};

socket.onmessage = (event) => {

console.log('Message from server:', event.data);

};

socket.onclose = () => {

console.log('WebSocket connection closed');

};

处理错误和超时

为 WebSocket 逻辑添加适当的错误处理。处理客户端断开连接或超时等情况。

确保处理入站和出站消息场景。

完成这些步骤后,您已在 ASP.NET Core 中创建了一个 WebSocket API!这允许您在客户端(例如,浏览器或移动应用程序)和服务器之间发送和接收实时数据。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
神探小白牙1 小时前
eCharts 多系列柱状图增加背景图
javascript·ecmascript·echarts
薛定猫AI8 小时前
【深度解析】Gemma Chat 本地 AI 编程 Agent:Electron + MLX + 开源模型的离线 Vibe Coding 实战
javascript·人工智能·electron
全栈前端老曹8 小时前
【前端地图】多地图平台适配方案——高德、百度、腾讯、Google Maps SDK 差异对比、封装统一地图接口
前端·javascript·百度·dubbo·wgs84·gcj-02·bd09
笑虾8 小时前
Win10 修改注册表 让鼠标悬停PNG上时 tip 始终显示分辨率
开发语言·javascript·ecmascript
雾岛听风6918 小时前
JavaScript基础语法速查手册
开发语言·前端·javascript
用户2367829801689 小时前
从零实现 GIF 制作工具:LZW 压缩与 Median Cut 色彩量化
前端·javascript
棉猴9 小时前
Python海龟绘图之绘制文本
javascript·python·html·write·turtle·海龟绘图·输出文本
Highcharts.js9 小时前
线形比赛积分增长或竞赛图|Highcharts企业图表代码示列
开发语言·前端·javascript·折线图·highcharts·竞赛图
让学习成为一种生活方式10 小时前
大肠杆菌合成扑热息痛--对乙酰氨基酚--文献精读227
开发语言·前端·javascript
垦利不10 小时前
websocket通信
网络·websocket·网络协议