基于asp.netCoreWebApi的webSocket通信示例(net6)

这篇具有很好参考价值的文章主要介绍了基于asp.netCoreWebApi的webSocket通信示例(net6)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:

    在阿里云服务器中搭建了常规的tcp server服务(基于.net framework 4.0)。用以实现远程控制家里的鱼缸灯,办公室的电脑开关机等功能。客户端采用PC桌面端和微信小程序端。

    服务端:tcp server(基于.net framework 4.0)

    客户端:PC桌面端软件(.net winform)、微信小程序

基于asp.netCoreWebApi的webSocket通信示例(net6)

    问题:

   微信小程序端支持websocket通信而且必须是wss(wss表示在TLS之上的websocket,相当于https),无法与tcp server直接通信。

    为什么不重新开发服务端呢?

    一是我懒。

    二是服务端TCP Server必须时刻保持与家里的鱼缸灯控制器,办公室的开关机控制器等设备的网络连接。而且还设定了定时执行的策略,故不适宜更换其他技术实现。

   解决方法:

   微信小程序的后端采用了asp.net web api (net6)搭建的接口服务。如果可以在该web api 接口服务中搭建websocket服务,中转微信小程序和tcp server服务端,同时升级TCP Server,使之同时支持tcp client连接和websocket连接,问题可得到解决。

基于asp.netCoreWebApi的webSocket通信示例(net6)

 

开干!

    一、新建ASP.NET Core Web API  项目(net6)

基于asp.netCoreWebApi的webSocket通信示例(net6)

    基于net 6.0

基于asp.netCoreWebApi的webSocket通信示例(net6)

    二、创建websocket中间件WebsocketHandler

    新建类,名为:WebsocketHandler

    在接收到websocket连接时,将触发Invoke函数。

    关键代码:    

 WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync();
                    _logger.LogInformation($"接收到websocket连接.");
                    try
                    {
                        WebSocketReceiveResult result;
                        do
                        {
                            var buffer = new byte[1024 * 1];
                            result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
                            if (result.MessageType == WebSocketMessageType.Text && !result.CloseStatus.HasValue)
                            {
                                var msgString = Encoding.UTF8.GetString(buffer);
                                _logger.LogInformation($"接收到数据:{msgString}.");

                                //发送接收到的信息
                                await webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, buffer.Length), WebSocketMessageType.Text, true, CancellationToken.None);
                            }
                        }
                        while (!result.CloseStatus.HasValue);
                    }
                    catch (Exception ex)
                    {
                        
                    }

    AcceptWebSocketAsync函数接收websocket连接,并把连接保存于变量webSocket。

    定义变量WebSocketReceiveResult result用来接收客户端发送的数据,webSocket.ReceiveAsync函数接收数据。

    webSocket.SendAsync函数实现向客户端发送数据的功能。

    可以看到,为了测试发送和接收的功能,服务端将接收到的数据直接返回给客户端

    三、添加中间件

    在Program中添加此中间件:

app.UseWebSockets();
app.UseMiddleware<WebsocketHandler>();

    至此,服务端已建好。

    四、运行服务端

    Ctrl+F5,运行服务端,可看到,监听端口为:5276    

基于asp.netCoreWebApi的webSocket通信示例(net6)

    五、创建客户端:测试.html

    创建静态页面:webSocketClient.html,作为客户端,该客户端将实现向服务端发送消息,并接收服务端的消息。

    使用原生javascript实现,不依赖其他js库。

    关键函数:

    创建websocket:new WebSocket(server + '/ws');

    websocket打开成功事件:WEB_SOCKET.onopen

    websocket接收消息事件:WEB_SOCKET.onmessage

    websocket关闭事件:WEB_SOCKET.onclose

    

<button type="button" onclick="javascript:connectWebSocket()">测试</button>
    界面上放置一个按钮,触发websocket。

    六、测试成功

    双击在浏览器中打开webSocketClient.html,同时按F12打开调试器。点击“测试”按钮,观察控制台面板,可看到websocket接收到来自服务器的消息“hello world”

    

基于asp.netCoreWebApi的webSocket通信示例(net6)

    而服务端面板:显示接收到websocket连接并接收到消息“hello world"

    

基于asp.netCoreWebApi的webSocket通信示例(net6)

    

基于asp.netCoreWebApi的webSocket通信示例(net6)

我已将代码上传,下载码是:C67F979907

    下载码是啥?如何下载=》点击查看文章来源地址https://www.toymoban.com/news/detail-421810.html

到了这里,关于基于asp.netCoreWebApi的webSocket通信示例(net6)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于.net6的WPF程序使用SignalR进行通信

    之前写的SignalR通信,是基于.net6api,BS和CS进行通信的。 .net6API使用SignalR+vue3聊天+WPF聊天_signalr wpf_故里2130的博客-CSDN博客 今天写一篇关于CS客户端的SignalR通信,后台服务使用.net6api 。其实和之前写的差不多,主要在于服务端以后台进程的方式存在,而客户端以exe方式存在,

    2024年02月16日
    浏览(52)
  • .NET6 项目使用RabbitMQ实现基于事件总线EventBus通信

    一、概念及介绍         通常通过使用事件总线实现来执行此发布/订阅系统。 事件总线可以设计为包含 API 的接口,该 API 是订阅和取消订阅事件和发布事件所需的。 它还可以包含一个或多个基于跨进程或消息通信的实现,例如支持异步通信和发布/订阅模型的消息队列或

    2024年04月28日
    浏览(53)
  • ASP.NET Core NET6 EFCore MySQL

    ASP.NET Core 下使用 EFCore 和 .NET Framework 下使用有点区别。 参考官方文档:https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework-core.html 1.创建 ASP.NET Core Web应用 项目 创建新的项目的 Program.cs 文件中使用了顶级语句,与NET5 有所区别。 .NET 6 的 创建的项目使用了C# 顶级语句 ht

    2024年02月07日
    浏览(55)
  • asp.net core 一种基于token 和 Permission 的权限管理中间件示例

    asp.net core webapi 下面,想做一个过滤权限的Filter,配合token,对api做一个较为细粒度的权限控制, 该filter (PermissionFilter) 的作用是用户LoginUser.Permissions 列表中有 Key指定的权限才可以访问,没有则返回403 错误码。   1. 先上封装后的使用效果 说明:要求登录即可,不要求特定权限

    2024年02月05日
    浏览(111)
  • ASP.NET基于TCP协议的简单即时通信软件的设计与实现(源代码+论文)

    即时通 信 ( I nstant M essage), 由于其具有 实时性、跨平台性、成本低、效率高等优点 而受到广泛的使用。设计并实现 一个能够处理 多用 户进行实时、安全的即时通 信系统 具有较强的现实意义。即时 通信 的底层 通信是 通过SOCKE T套接 字接口实现 的 。当前的主流UNIX系统和

    2024年02月09日
    浏览(67)
  • .net6中WPF的串口通信和USB通信

    之前写过串口通信,不过是winform的。 c#使用串口进行通信_c# 串口通信_故里2130的博客-CSDN博客 今天说一下,.net6中wpf的串口通信和USB通信,在工控行业中,这2种的方式非常多,还有网口通信,它们都是用来和硬件打交道的,进行交互信息。 一、串口通信 1.安装System.IO.Ports

    2024年02月16日
    浏览(43)
  • .Net6使用SignalR实现前后端实时通信

    后端代码 (Asp.net core web api,用的.net6) Program.cs 代码运行逻辑: ​1. 通过 WebApplication.CreateBuilder(args) 创建一个 ASP.NET Core 应用程序建造器。 2. 使用 builder.Services.AddControllers() 添加 MVC 控制器服务和 builder.Services.AddSignalR() 添加 SignalR 服务。 3. 注册 Swagger 和 Cors 跨域设置的服务

    2024年02月01日
    浏览(70)
  • asp.net与asp.net优缺点及示例

    Asp.net Mvc架构模式是一种低耦合、可测试的web应用程序框架,它是基于CLR和成熟的MVC架构构建的。ASP .NET MVC不支持 ViewState和服务器控件。 Asp.net优点: 1.架构降低了程序间的耦合性,M VC,分层,目标明确 2.性能不支持viewstate,完成html, 已于结合jquery使用, 提供程序性能 3.支持并

    2024年02月15日
    浏览(37)
  • C# Asp.Net6 MVC,Log4net NLog 日志插件应用 及Windows、Liux环境下程序发布

    connected Services 服务依赖(第三方) Properties 文件下 launchSettings.json 项目启动配置文件 wwwroad 存放静态文件 依赖项 管理Nuget程序包 appsettings.json 配置文件 C 业务逻辑运算–调用其他的服务做业务逻辑 M 实体对象,保存数据,数据传输 V 视图,表现层 第一步:寻找log4net 程序包

    2024年02月14日
    浏览(52)
  • 关于ASP.NET Core WebSocket实现集群的思考

    前言     提到 WebSocket 相信大家都听说过,它的初衷是为了解决客户端浏览器与服务端进行双向通信,是在单个 TCP 连接上进行全双工通讯的协议。在没有WebSocket之前只能通过浏览器到服务端的请求应答模式比如轮询,来实现服务端的变更响应到客户端,现在服务端也可以主

    2024年04月14日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包