即时通信在日常的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. Shell 脚本重启项目

    每次发打包好项目后都需要手动重启项目,写个Shell脚本一键重启项目 Shell 脚本 #!/bin/bash while getopts "n:p:" arg do case $ ...

  2. java基础——参数的应用

    命令行传递参数(少用) 有时候,你希望运行一个程序时,在传递给它信息.这个时候,要靠 传递命令行 参数 给main()函数实现. package com.dong.method;​public cla ...

  3. 国内Ubuntu16.04下载地址<其他系统可返回最首项>

     ubuntu16.04下载地址: 中科大源       http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/ 阿里云开源镜像站       http:/ ...

  4. 马哥Linux SysAdmin学习笔记(二)

    Linux网络属性管理: 局域网:以太网,令牌环网 Ethernet:CSMA/CD 冲突域 广播域 MAC:media access control地址 48bit: 24bits 24bits  ...

  5. Linux 用户管理_用户相关配置文件详解

    linux的用户管理 linux支持多个用户同时使用同一个用户登陆系统,windows在修改组策略的情况下,也可以多个人使用同一个用户登陆. 远程连接Linux的方式:ssh 远程连接windows的 ...

  6. VS Code 安装后的一些配置项

    说明: 个人一直使用Notepad++作为日常文本编辑器,由于之前出现的某个原因,故决定改用VS Code. •设置中文字体 • 输入快捷键 Ctrl+Shift+P • 输入 Configure D ...

  7. tar压缩文件 .tar.gz

    打包并压缩文件 tar -zcf ansible.tar.gz ansible/* z    gzip属性 c    建立压缩文件 f    指定文件名 v    显示过程 解压文件 tar xzf ...

  8. Sql server 多列去重复值,相同的只显示一条数据

    CREATE TABLE #tp( headerNo VARCHAR(10), machineNO VARCHAR(10), descrption nVARCHAR(20), artNo VARCHA ...

  9. 整数划分——区间dp(石子合并)

    这不是将一个数以一来划分,而是把一个整数以位来划分 题目描述 如何把一个正整数N(N长度<20)划分为M(M>1)个部分,使这M个部分的乘积最大.N.M从键盘输入,输出最大值及一种划分方式 ...

  10. 『动善时』JMeter基础 — 37、将JMeter测试结果写入Excel

    目录 1.环境准备 (1)引入操作Excel文件的基础JAR包 (2)引入封装自定义操作Excel文件的JAR包 2.准备测试需要的数据 3.测试结果写入Excel演示 (1)测试计划内包含的元件 ( ...