ASP.NET Core 使用 Web Socket

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: ASP.NET Core 使用 Web Socket

WebSocket:

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

基本使用:

在.NET 中,提供了websocket 的支持,在System.Net.WebSockets命名空间下,提供websocket支持。也有WebSocket4Net这样的进一步封装的nuget包。这里我们使用.net 默认提供的WebSockets命名空间。
新建ASP.NET Core web api项目,并添加如下代码。
startup代码

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
   
    if (env.IsDevelopment())
    {
   
        app.UseDeveloperExceptionPage();
    }


    app.UseHttpsRedirection();

    app.UseRouting();

    app.UseAuthorization();
    // 启用websocket中间件
    app.UseWebSockets();
    app.UseEndpoints(endpoints =>
                     {
   
                         endpoints.MapControllers();
                     });


        }

服务器端controller代码

namespace WebSocketTest1.Controllers
{
   
    [ApiController]
    [Route("[controller]")]
    public class WebSocketController : ControllerBase
    {
   
        [HttpGet("/ws")]
        public async Task Get()
        {
   
            // 判断是否是 websocket 协议的请求
            if (HttpContext.WebSockets.IsWebSocketRequest)
            {
   
                // 如果是 websocket 协议的请求,则获取到当前的 websocket 请求
                using var websocket = await HttpContext.WebSockets.AcceptWebSocketAsync();
                // websocket 建立完成,就执行定义的方法,该方法进行收发信息的逻辑代码
                await Echo(websocket);
            }
            else
            {
   
                // 如果不是websocket协议的请求,返回400
                HttpContext.Response.StatusCode = 400;
            }
        }

        [HttpGet("/test")]
        public IActionResult Test()
        {
   
            return Ok("test");
        }
        /// <summary>
        /// 收发信息
        /// </summary>
        /// <param name="webSocket"></param>
        /// <returns></returns>
        private static async Task Echo(WebSocket webSocket)
        {
   
            // 接受信息的数组
            var buffer = new byte[1024 * 4];
            // 接受客户端消息
            var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
            // 如果客户端没有关闭,一切正常没有异常,就保持和客户端的连接,正常收发
            while (!result.CloseStatus.HasValue)
            {
      
                // 解析客户端发送的消息,并且定义返回到客户端的消息,生产byte数组
                var serverMsg = Encoding.UTF8.GetBytes($"Server: Hello. You said: {Encoding.UTF8.GetString(buffer)}");
                // 将消息发送到客户端
                await webSocket.SendAsync(new ArraySegment<byte>(serverMsg, 0, serverMsg.Length), result.MessageType, result.EndOfMessage, CancellationToken.None);
                // 再次接收客户端的消息
                result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
            }
            // 客户端出现异常了,则服务器可以关闭连接了
            await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
        }
    }
}

客户端可以直接在浏览器console控制台
let webSocket = newWebSocket('wss://localhost:端口号/ws');
验证连接

目录
相关文章
|
7天前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
7天前
|
开发框架 .NET 中间件
ASP.NET Core Web 开发浅谈
本文介绍ASP.NET Core,一个轻量级、开源的跨平台框架,专为构建高性能Web应用设计。通过简单步骤,你将学会创建首个Web应用。文章还深入探讨了路由配置、依赖注入及安全性配置等常见问题,并提供了实用示例代码以助于理解与避免错误,帮助开发者更好地掌握ASP.NET Core的核心概念。
21 3
|
12天前
|
开发框架 前端开发 .NET
VB.NET中如何利用ASP.NET进行Web开发
在VB.NET中利用ASP.NET进行Web开发是一个常见的做法,特别是在需要构建动态、交互式Web应用程序时。ASP.NET是一个由微软开发的开源Web应用程序框架,它允许开发者使用多种编程语言(包括VB.NET)来创建Web应用程序。
39 5
|
29天前
|
开发框架 NoSQL .NET
利用分布式锁在ASP.NET Core中实现防抖
【9月更文挑战第5天】在 ASP.NET Core 中,可通过分布式锁实现防抖功能,仅处理连续相同请求中的首个请求,其余请求返回 204 No Content,直至锁释放。具体步骤包括:安装分布式锁库如 `StackExchange.Redis`;创建分布式锁服务接口及其实现;构建防抖中间件;并在 `Startup.cs` 中注册相关服务和中间件。这一机制有效避免了短时间内重复操作的问题。
|
29天前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
28 7
|
27天前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
38 0
|
2月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
36 0
|
2月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
2月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
93 0
|
5月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
159 0
下一篇
无影云桌面