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

 

即时通信之 SignalR的更多相关文章

  1. java即时通信小例子

    学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是 ...

  2. iOS开发之使用XMPPFramework实现即时通信(三)

    你看今天是(三)对吧,前面肯定有(一)和(二),在发表完iOS开发之使用XMPPFramework实现即时通信(一)和iOS开发之使用XMPPFramework实现即时通信(二)后有好多的小伙伴加我Q ...

  3. iOS开发之使用XMPPFramework实现即时通信(二)

    上篇的博客iOS开发之使用XMPPFramework实现即时通信(一)只是本篇的引子,本篇博客就给之前的微信加上即时通讯的功能,主要是对XMPPFramework的使用.本篇博客中用到了Spark做测 ...

  4. 基于XMPP协议的Android即时通信系

    以前做过一个基于XMPP协议的聊天社交软件,总结了一下.发出来. 设计基于开源的XMPP即时通信协议,采用C/S体系结构,通过GPRS无线网络用TCP协议连接到服务器,以架设开源的Openfn'e服务 ...

  5. 【原】iOS学习43即时通信之XMPP(2)

    本篇是 即时通信之XMPP(2) 接上次 即时通信之XMPP(1) 1. 好友列表 1> 初始化好友花名册 // 获取管理好友的单例对象 XMPPRosterCoreDataStorage *r ...

  6. 【原】iOS学习42即时通信之XMPP(1)

    1. 即时通信 1> 概述 即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软件也层出不穷,服务提供商也提供了越来越丰富的通讯服务功能 ...

  7. QQ 腾讯QQ(简称“QQ”)是腾讯公司开发的一款基于Internet的即时通信(IM)软件

    QQ 编辑 腾讯QQ(简称“QQ”)是腾讯公司开发的一款基于Internet的即时通信(IM)软件.腾讯QQ支持在线聊天.视频通话.点对点断点续传文件.共享文件.网络硬盘.自定义面板.QQ邮箱等多种功 ...

  8. (转)基于即时通信和LBS技术的位置感知服务(一):提出问题及解决方案

    一.前言.提出问题 公司最近举行2011年度创新设计大赛,快年底了正打算写写2010年以来Android开发的心得与经验,正好同事出了个点子:假如A和B两个人分别在不同的地点,能不能实现这样的功能,让 ...

  9. (转)基于即时通信和LBS技术的位置感知服务(二):XMPP协议总结以及开源解决方案

    在<基于即时通信和LBS技术的位置感知服务(一):提出问题及解决方案>一文中,提到尝试使用XMPP协议来实现即时通信.本文将对XMPP协议框架以及相关的C/S架构进行介绍,协议的底层实现不 ...

随机推荐

  1. GO反射类实例

    变量的内在机制 类型信息:是静态的元信息,是预先定义好的 值信息:是程序运行过程中动态改变的 反射的使用 获取类型信息:reflect.TypeOf,是静态的 获取值信息:reflect.ValueO ...

  2. [bug] kibana:prevMsg":"Request Timeout after 3000ms

    ES启动问题,内存不足 https://blog.csdn.net/qq_40907977/article/details/104499178 修改ES启动内存 https://blog.csdn.n ...

  3. [Java] SpringBoot

    背景 简化SSM(H)中大量的配置工作,开发人员只关心提供业务功能 可以看成简化了的.按照约定开发的SSM(H) 概念 JavaBean:满足规范的Java类(属性private+默认构造方法+get ...

  4. [刷题] 219 Contains Duplicate II

    要求 给出整型数组nums和整数k,是否存在索引i和j,nums[i]==nums[j],且i和j之间的差不超过k 思路 暴力解法(n2) 建立最长为k+1的滑动窗口,用set查找窗口中是否有重复元素 ...

  5. cent 7 识别exfat

    cent 7 识别exfat install fuse-exfat exfat-utils

  6. Linux_配置本地YUM源(RHEL8)

    [RHEL8] Linux-RHEL8配置本地YUM 源,按照之前传统的配置本地YUM的方法肯定不行,在RHEL8版本的软件源发生了变化,在RHEL8版本的软件仓库分成了两部分:[AppStream] ...

  7. www.heihei.work站长日记

    ____________2020-03-30_________________晴 昨天刚加的游客IP统计选取一部分查了下地址,小朋友你是不是有很多问号??? 36.99.136.142河南 电信 47 ...

  8. Jquery 常用方法及实例(Day_15)

    想要做一件事,永远都不要怕晚.只要你开始做了,就不晚. 而若是你不开始,仅仅停留在思考.犹豫甚至焦虑的状态,那就永远都是零. mouseover() / mouserout() 当鼠标进入 / 离开某 ...

  9. System Verilog MCDF(二)

    整形器的接口时序: reg,grant是维持了两个clk的. chid ,length在发送数据期间不可以变化. 第一个data数据必须在start上升沿的同一个clk发送. reg,grant两者之 ...

  10. uni-app 富文本解析-小程序

    原文:http://www.upwqy.com/manual/info/105.html 1 引入插件 gaoyia-parse 链接:https://pan.baidu.com/s/1UusfXxH ...