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

杨中科 ASP.NETCORE 高级14 SignalR

1、什么是websocket、SignalR

服务器向客户端发送数据

1、需求:Web聊天;站内沟通。
2、传统HTTP:只能客户端主动发送请求
3、传统方案:长轮询(Long Polling)。缺点是?(1.客户端发送请求后,服务端要等到有数据返回,返回数据后,才方法连接。2.或者是每秒向服务器发送消息,询问是否有数据返回)
一台服务器,能处理得并发量是有限的,这种方式就会很消耗资源

WebSocket

1、WebSocket基于TCP 协议,支持二进制通信,双工通信。
2、性能和并发能力更强
3、WebSocket 服务器独立于HTTP协议,不过我们一般仍然把WebSocket 服务器端部署到Web服务器上,因为可以借助HTTP 协议完成初始的握手(可选),并且共享HTTP服务器得端口(主要)。(好处是:不需要单独开放一个端口)

SignalR

1、ASP.NET Core SignalR(以下简称SignalR)是.NET Core平台中对WebSocket的封装,从而让开发人员可以更简单地进行WebSocket开发。
2、Hub(集线器),数据交换中心
在这里插入图片描述
SignalR中一个重要的组件是集线器(hub),它用于在WebSocket服务器端和所有客户端之间进行数据交换,所有连接到同一个集线器上的程序都可以互相通信。我们既可以通过集线器来完成服务器端向客户端的消息推送,也可以完成客户端之间的消息推送,当然WebSocket也允许客户端向服务器端发送消息。

SignalR使用场景

按照官方的说法,signal能够方便的为应用提供实时的服务器端和客户端双向通信功能,相当于服务器端能够观察到客户端的实时更新,并且将这个更新广播推送,这是一个很有用的功能。SignalR适用场景如下:

1、需要从服务器进行高频率更新的应用。 示例包括游戏、社交网络、投票、拍卖、地图和 GPS 应用。
2、仪表板和监视应用。 示例包括公司仪表板、即时销售更新或旅行警报。
3、协作应用。 协作应用的示例包括白板应用和团队会议软件。
4、需要通知的应用。 社交网络、电子邮件、聊天、游戏、旅行警报和很多其他应用都需使用通知。

基本SignalR项目1

需要分别编写服务器端Hub和前端代码
1、创建Web API项目,创建一个继承自Hub类

public class ChatRoomHub:Hub
{public Task SendPublicMessage(String message){string connId = this.Context.ConnectionId;string msg = $"{connId}{DateTime.Now}{message}";//某个客户端发送了消息msg 将他广播到其他客户端,广播模式项目中不可取//All 表示连接到的所有客户端return Clients.All.SendAsync("ReceivePublicMessage",msg);}
}

2、

builder.Service.AddSignalR()
在 app.MapControllers() 之前调用
app.MapHub<ChatRoomHub>("/Hubs/ChatRoomHub") //默认还要启用CORS

新建WebAPI 项目

在这里插入图片描述

编写MyHub类
在这里插入图片描述

相关文章:

  • Python循环语句——while循环的嵌套应用
  • 《Python 网络爬虫简易速速上手小册》第8章:分布式爬虫设计(2024 最新版)
  • Architecture Lab:Part C【流水线通用原理/Y86-64的流水线实现/实现IIADDQ指令】
  • 搭建游戏应该选择什么样的服务器?
  • C++类与对象(下)
  • JSR303参数校验-SpringMVC
  • Docker下安装GitLab
  • jmeter-02切换中文,改为白色背景
  • 深入理解Netty及核心组件使用—上
  • 通过神经网络模拟人类大脑的学习过程
  • 计算机网络-差错控制(纠错编码 海明码 纠错方法)
  • Linux|Grep 命令的 12 个实用示例
  • Docker Network
  • 神经网络激活函数到底是什么?
  • Flutter canvas 画一条会动的波浪线 进度条
  • 77. Combinations
  • CAP 一致性协议及应用解析
  • CentOS 7 修改主机名
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaWeb(学习笔记二)
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • NSTimer学习笔记
  • Redis字符串类型内部编码剖析
  • vue 个人积累(使用工具,组件)
  • 初识 webpack
  • 驱动程序原理
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 学习使用ExpressJS 4.0中的新Router
  • 如何正确理解,内页权重高于首页?
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • (6)添加vue-cookie
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (转)socket Aio demo
  • (转)平衡树
  • (转载)深入super,看Python如何解决钻石继承难题
  • .form文件_一篇文章学会文件上传
  • .mysql secret在哪_MySQL如何使用索引
  • .net core 控制台应用程序读取配置文件app.config
  • .net refrector
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .Net6使用WebSocket与前端进行通信
  • .Net7 环境安装配置
  • .NET序列化 serializable,反序列化
  • .net中生成excel后调整宽度
  • //解决validator验证插件多个name相同只验证第一的问题
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [④ADRV902x]: Digital Filter Configuration(发射端)
  • [ACM] hdu 1201 18岁生日
  • [Angular] 笔记 6:ngStyle
  • [BUG] Authentication Error
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
  • [C++]STL之map