当前位置: 首页 > news >正文

.Net6使用WebSocket与前端进行通信

1. 创建类WebSocketTest:

using System.Net.WebSockets;
using System.Text;namespace WebSocket.Demo
{public class WebSocketTest{//当前请求实例System.Net.WebSockets.WebSocket socket =null;public async Task DoWork(HttpContext ctx){socket = await ctx.WebSockets.AcceptWebSocketAsync();//执行监听await EchoLoop();}public async Task EchoLoop(){//创建缓存区var buffer = new byte[1024];var arraySeg = new ArraySegment<byte>(buffer);while (this.socket.State == WebSocketState.Open){var incoming = await this.socket.ReceiveAsync(arraySeg, CancellationToken.None);//判断类型读取if (incoming.MessageType == WebSocketMessageType.Text){//incoming.Count  代表,请求内容字节数量string userMessage = Encoding.UTF8.GetString(arraySeg.Array, 0, incoming.Count);//接收客户端的字符串userMessage = "客户端信息: " + userMessage + " 。时间: " +DateTime.Now.ToLongTimeString();ArraySegment<byte> segResult = new ArraySegment<byte>(Encoding.UTF8.GetBytes(userMessage));await socket.SendAsync(segResult, WebSocketMessageType.Text, true, CancellationToken.None);}else{}byte[] backInfo = System.Text.UTF8Encoding.Default.GetBytes("服务端相应内容结束");var outgoing = new ArraySegment<byte>(backInfo, 0, backInfo.Length);await this.socket.SendAsync(outgoing, WebSocketMessageType.Text, true, CancellationToken.None);}}}
}

2. 在program.cs中进行绑定

app.UseWebSockets();
app.Map("/websocket/test", con =>
{con.UseWebSockets();con.Use(async (ctx, next) =>{//创建监听websocketWebSocketTest ws = new WebSocketTest();await ws.DoWork(ctx);await next.Invoke();});
});

3. 使用websocket在线工具模拟请求:

相关文章:

  • C++类与对象(5)—流运算符重载、const、取地址
  • 通俗理解词向量模型,预训练模型,Transfomer,Bert和GPT的发展脉络和如何实践
  • 二叉树详讲(一)---完全二叉树、满二叉树、堆
  • Qt 串口编程-从入门到实战
  • flink的异常concurrent.TimeoutException: Heartbeat of TaskManager with id的解决
  • 河南省第五届“金盾信安杯”网络与数据安全大赛实操技能赛 部分wp(自己的一些思路和解析 )(主misc crypto )
  • 【华为OD】B\C卷真题 100%通过:字符串统计 C/C++实现
  • 记录一次因内存不足而导致hiveserver2和namenode进程宕机的排查
  • 千云物流 - 使用k8s负载均衡openelb
  • 【Spring源码】Spring Event事件
  • 如何给echarts的legend设置不同的样式和位置 legend分组显示
  • 备考雅思记录
  • u8g2图形库——丝滑菜单制作
  • Linux系统常用指令大全(图文详解)
  • 发布鸿蒙的第一个java应用
  • [PHP内核探索]PHP中的哈希表
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 4个实用的微服务测试策略
  • CSS实用技巧干货
  • Joomla 2.x, 3.x useful code cheatsheet
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • NSTimer学习笔记
  • Python_网络编程
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 机器学习中为什么要做归一化normalization
  • 嵌入式文件系统
  • 译米田引理
  • 正则表达式
  • RDS-Mysql 物理备份恢复到本地数据库上
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​用户画像从0到100的构建思路
  • #Z2294. 打印树的直径
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • 、写入Shellcode到注册表上线
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .Net Web窗口页属性
  • .NET 读取 JSON格式的数据
  • .net 反编译_.net反编译的相关问题
  • .net 生成二级域名
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @RequestBody与@ModelAttribute
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [Android View] 可绘制形状 (Shape Xml)
  • [android] 天气app布局练习