当前位置: 首页 > 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应用
  • [case10]使用RSQL实现端到端的动态查询
  • 【刷算法】从上往下打印二叉树
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • CODING 缺陷管理功能正式开始公测
  • docker容器内的网络抓包
  • es的写入过程
  • happypack两次报错的问题
  • Javascript编码规范
  • java小心机(3)| 浅析finalize()
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Markdown 语法简单说明
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • mysql外键的使用
  • mysql中InnoDB引擎中页的概念
  • PAT A1017 优先队列
  • PAT A1050
  • ReactNativeweexDeviceOne对比
  • Webpack 4x 之路 ( 四 )
  • 机器学习中为什么要做归一化normalization
  • 记录一下第一次使用npm
  • 解析带emoji和链接的聊天系统消息
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 力扣(LeetCode)22
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 使用API自动生成工具优化前端工作流
  • 移动端唤起键盘时取消position:fixed定位
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​香农与信息论三大定律
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (70min)字节暑假实习二面(已挂)
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Matlab)使用竞争神经网络实现数据聚类
  • (Oracle)SQL优化技巧(一):分页查询