即时通信之 SignalR
即时通信在日常的web开发场景中经常使用,本篇主要回顾一下SignalR的实现原理和通过例子说明如何在.NET Core 中使用。
SingnalR 应用
- 需要从服务器进行高频更新的应用程序。例如游戏、社交网络、投票、拍卖、地图和 GPS 应用程序。
- 仪表板和监控应用程序。示例包括公司仪表板、即时销售更新或旅行提醒。
- 协作应用程序。白板应用程序和团队会议软件是协作应用程序的示例。
- 需要通知的应用程序。社交网络、电子邮件、聊天、游戏、旅行提醒和许多其他应用程序都使用通知。
SingnalR 实现的技术
- 网络套接字 Websocket
- 服务器发送的事件 SSE
- 长轮询 Long Polling
这里对它们做一个简单的解释,长轮询 Long Polling 相比于简单的重复发送请求,它有以下的好处。长轮询的请求会一直pending在那,直到有状态更新或者timeout,如果timeout,前端会继续进行下一次的长轮询;
服务器发送的事件 SSE 是一个单向的,基于事件的处理方案,服务器发起http 连接到浏览器,之后浏览器会使用EventSource 这个object对后端传输过来的message进行处理,不过缺点是 SSE是单向的,并数据格式为文本信息;
网络套接字 Websocket: 利用TCP套接字,支持客户服务端双向的传输message,由于套接字的传输格式支持多种,因此websocket 本身不仅支持文本格式的消息还有二进制数据的传输。
SingnalR 开发
SingalR 在net core里使用变得比较简单, 主要有几个概念要理解透彻:
1. Hub: 可以看成一个集散中心,里面管理了通过webscoket 与之相连的客户端;
2. Clients: Hub 中的属性,与当前hub相连接的客户端;
3. Groups:对clients进行分组管理
Hub中还有一些虚方法,例如:OnConnectedAsync, OnDisconnectedAsync 用于我们重写去实现我们自己的逻辑。
Hub 示例:
public class CoffeeHub: Hub
{
private readonly OrderChecker _orderChecker; public CoffeeHub(OrderChecker orderChecker)
{
_orderChecker = orderChecker;
}
//override the OnConnectedAsync
public override async Task OnConnectedAsync() {
var connectionId = Context.ConnectionId;
await Clients.Others.SendAsync("Hello", $"I am {connectionId}");
} }
ConnectionId 唯一标识一个与HUb相连的connecttion。
-------------------------------------------------------------------
会持续整理发布关于后端和NET Core, .NET 的相关学习和认知,欢迎大家一起讨论学习。
最新文章
- win10中将默认输入法设置为英文
- 记录自己对EventLoop和性能问题处理的一点心得
- ORA-600(qerltcInsertSelectRop_bad_state)错误
- centos 7.0 菜鸟接触命令 记录
- jQuery的常用函数扩展
- iOS开发拓展篇—音效的播放
- css显示出三角形
- 关于Git中的一些常用的命令
- iOS 跳转至 指定 StoryBoard 中 指定的 Scene
- Smarty include使用
- 从客户端检测到危险的Request.Form值解决方案
- javascript instanceof
- .Net Attribute详解(一)
- Form.Close跟Form.Dispose
- Android IBinder的linkToDeath介绍
- 教育改革——国家认证 “网红” 编程语言 Python
- 由一个emoji引发的思考
- Buffer --缓冲器
- 机器学习入门12 - 分类 (Classification)
- Pycharm 安装 idea VIM
热门文章
- 3D饼/环Echarts图的实现
- JAVA的基本介绍和JDK的安装
- Aliyun SSL 证书签发&;安装
- [bug] java.sql.SQLException: Unknown initial character set index '255' received from server. Initial cl...
- IIS 10 设置FTP Passive Mode 固定端口
- Docker网络(5)
- 小程序webview涉及的支付能力、选用绑定多商户支付
- 微信公众号H5-网页开发须知
- Navicat Premium 15 linux 安装与激活 ArchLinux 2021
- grasshopper之python电池执行逻辑