即时通信在日常的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 的相关学习和认知,欢迎大家一起讨论学习。

 

最新文章

  1. win10中将默认输入法设置为英文
  2. 记录自己对EventLoop和性能问题处理的一点心得
  3. ORA-600(qerltcInsertSelectRop_bad_state)错误
  4. centos 7.0 菜鸟接触命令 记录
  5. jQuery的常用函数扩展
  6. iOS开发拓展篇—音效的播放
  7. css显示出三角形
  8. 关于Git中的一些常用的命令
  9. iOS 跳转至 指定 StoryBoard 中 指定的 Scene
  10. Smarty include使用
  11. 从客户端检测到危险的Request.Form值解决方案
  12. javascript instanceof
  13. .Net Attribute详解(一)
  14. Form.Close跟Form.Dispose
  15. Android IBinder的linkToDeath介绍
  16. 教育改革——国家认证 “网红” 编程语言 Python
  17. 由一个emoji引发的思考
  18. Buffer --缓冲器
  19. 机器学习入门12 - 分类 (Classification)
  20. Pycharm 安装 idea VIM

热门文章

  1. 3D饼/环Echarts图的实现
  2. JAVA的基本介绍和JDK的安装
  3. Aliyun SSL 证书签发&安装
  4. [bug] java.sql.SQLException: Unknown initial character set index '255' received from server. Initial cl...
  5. IIS 10 设置FTP Passive Mode 固定端口
  6. Docker网络(5)
  7. 小程序webview涉及的支付能力、选用绑定多商户支付
  8. 微信公众号H5-网页开发须知
  9. Navicat Premium 15 linux 安装与激活 ArchLinux 2021
  10. grasshopper之python电池执行逻辑