前言

一晃一个月又过去了,上个月有个比较大的项目要验收上线.所以忙的脚不沾地.现在终于可以忙里偷闲,写一篇关于SignalR Core的文章了.

先介绍一下SignalR吧,如下:

ASP.NET SignalR是ASP.NET开发人员的一个库,它简化了向Web应用程序添加即时通讯功能的过程。

它可以让服务器在可用时立即向连接的客户端推送内容,而不是让服务器等待客户端请求新数据。

当然,在新的ASP.NET Core中,它也被重新设计并加入到ASP.NET 全家桶中....

Core版本的SignalR基础通讯的用法与原来并没有多大的区别,大家可以自行参考前面的资料,或者参考园子里的相关资料.

今天我们主要来讲讲SignalR Core发布的预览版2的一些让人兴奋的新特性.

准备工作

安装.NET Core2.0+

引用预览版的Microsoft.AspNetCore.SignalR 1.0.0-alpha2-final

需要了解ASP.NET Core的管道机制.

正文

1.消息订阅(观察者模式)

这里不对这个模式做过多的讲解,具体内容请移步:百度百科

首先我们创建一个ASP.NET Core的空项目

然后添加相关引用Microsoft.AspNetCore.SignalR .

然后,添加我们的熟悉的SignalR Hub,如下:

public class StreamingHub : Hub
{         public void SendStreamInit(){            //开启客户端订阅Clients.All.InvokeAsync("streamStarted");}        //被订阅的消息public IObservable<string> StartStreaming(){             return Observable.Create(                 async (IObserver<string> observer) =>{ for (int i = 0; i < 10; i++){observer.OnNext($"发送内容......{i}");                        await Task.Delay(1000);}});}}

hub里面的内容,我先讲解一下:

我们首先创建一个SendStreamInit的方法,来开启所有的客户端订阅.

也就是调用客户端的 streamStarted 方法.

然后客户端的streamStarted 方法来订阅我们的StartStreaming,

StartStreaming里面创建一个观察者,来观察一个序列,每一秒发送一个内容,循环10次

然后,我们在Startup中注册我们添加的hub,如下:

public void Configure(IApplicationBuilder app, IHostingEnvironment env){              if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseFileServer();            //注册hubapp.UseSignalR(routes =>{routes.MapHub<StreamingHub>("streaming");});}

接下来,实现我们的客户端JS,如下:

        //设置连接方式//var transport = signalR.TransportType.WebSockets;var transport = signalR.TransportType.LongPolling; //创建连接var connection = new signalR.HubConnection(`http://${document.location.host}/streaming`, { transport: transport });//获取按钮var button = document.getElementById("startStreaming");        //注册订阅方法function startStreaming(){connection.stream("StartStreaming").subscribe({next: onStreamReceived,err: function(err){console.log(err);},complete: function(){console.log("完成流传输");}});}        

//注册开启注册的方法connection.on("streamStarted", function(){startStreaming();});        //添加按钮事件,调用初始化订阅的方法button.addEventListener("click", event => {connection.invoke("sendStreamInit");});        

//展示订阅得到的消息function onStreamReceived(data){console.log("收到消息: " + data);            var liElement = document.createElement('li');liElement.innerHTML = '<strong>' + "收到消息" + '</strong>:&nbsp;&nbsp;' + data;document.getElementById('discussion').appendChild(liElement);}        //开启连接connection.start();

解释都已经在注释里面了,请仔细看注释.

最后实现的效果如下:

这里的demo是直接开启所有连接的客户端的消息订阅..你也可以针对单独用户来开启订阅.

2.发送二进制字节

这是一个重大的进步.到目前为止,我们只使用了JSON协议来发送数据。新的SignalR Core在数据协议方面有一个很大的进步.就是提升了发送二进制编码数据的能力。

下面将介绍如何设置客户端使用messsagepack的协议来传递二进制数据。

首先我们来了解一下messsagepack协议,大家可以搜一下他的官网,很简单粗暴的一句话.

它类似JSON,
但是更快,更小。

使用的方式也很简单.

后台代码不需要任何改动.

前端需要多引用一个消息协议的JS文件

如:    <script type="text/javascript" src="signalr-msgpackprotocol-1.0.0-alpha2-final.js"></script>

JS代码修改如下:

//设置连接方式var transport = signalR.TransportType.LongPolling;//设置消息协议var protocol = new signalRMsgPack.MessagePackHubProtocol();//初始化连接var connection = new signalR.HubConnection('http://localhost:58619//chat', { transport: transport, protocol: protocol });

这样,我们就完成了相关的消息设置.

我们来看看效果:

我们传递一个字符串.采用JSON传递,大小为1.4K

response内容如下:

然后我们改为MessagePack协议发送同样的数据,会发现数据稍微小了一点,为1.2KB

response内容如下:

发现对用户传输的数据好像没有什么精简,但是对一些SignalR自己传递的JSON做了相关的二进制化..也许是我使用的方法不对 - -,

写在最后

本文到此也就结束了,SignalR core版本目前还是在预览的状态,所以很多东西并不是完全确定下来的,以后有更新的消息,我会第一时间写出博客分享.

文章中的demo源码地址:https://github.com/l2999019/Signalr_AspNetCoreDemo

相关文章:

  • 在ASP.NET CORE 2.0使用SignalR技术

  • 在ASP.NET Core下使用SignalR技术

  • SignalR的性能监测与服务器的负载测试

  • ASP.NET SignalR 高可用设计

  • ASP.NET SignalR 2.0入门指南

  • SignalR SelfHost实时消息,集成到web中,实现服务器消息推送

  • ASP.NET WebHooks Receivers 介绍-WebHooks 让其变得便捷

  • Signalr系列之虚拟目录详解与应用中的CDN加速实战

  • 采用HTML5+SignalR2.0(.Net)实现原生Web视频

  • 基于.NET SingalR,LayIM2.0实现的web聊天室

  • 基于SignalR的消息推送与二维码描登录实现

原文:http://www.cnblogs.com/GuZhenYin/p/7992127.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

Asp.net Core中SignalR Core预览版的一些新特性前瞻,附源码(消息订阅与发送二进制数据)相关推荐

  1. 在.NET Core中三种实现“可插拔”AOP编程方式(附源码)

    一看标题肯定会联想到使用动态编织的方式实现AOP编程,不过这不是作者本文讨论的重点. 本文讨论另外三种在netcore中可实现的方式,Filter(过滤器,严格意义上它算是AOP方式),Dynamic ...

  2. 基于DevExpress的SpreadsheetControl实现对Excel的打开、预览、保存、另存为、打印(附源码下载)

    场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  3. .NET 6 预览版 7:新功能已完成 ,将专注于改进

    .NET 团队的项目经理 Richard Lander在宣布 .NET 6 Preview 7 时说:"这是 .NET 预览的又一季的结束.", 中文翻译:.NET 6 预览版 7 ...

  4. 通用权限管理系统组件 中集成多个子系统的单点登录(网站入口方式)附源码

    通用权限管理系统组件 (GPM - General Permissions Manager) 中集成多个子系统的单点登录(网站入口方式)附源码 上文中实现了直接连接数据库的方式,通过配置文件,自定义的 ...

  5. 微软商店中的WSL预览版现已可用!Windows 11用户狂喜

    微软官方今天宣布,Windows Subsystem for Linux (简称WSL) 作为应用程序在微软商店中普遍提供给Windows 11 PC用户. WSL预览版登陆微软商店将给用户带来巨大的 ...

  6. VS 2019 for Mac 第 3 个预览版发布,新编辑器、Xamarin 开发改进

    Visual Studio 2019 for Mac 的第 3 个预览版发布了. 此版本侧重于改进 Visual Studio for Mac 的核心,主要亮点包括: 从 macOS dock 轻松启 ...

  7. lodopa5预览时默认横向_微软Windows 10 20H1预览版18922开始推送,附更新内容

    IT之家6月20日消息 今天微软推送了最新的Windows 10 20H1快速预览版18922系统更新,本次更新带来了一系列的新功能,包括语言设置提升,Feedback Hub更新,并且进行了常规Bu ...

  8. java中batch基础_详解Spring batch 入门学习教程(附源码)

    详解Spring batch 入门学习教程(附源码) 发布时间:2020-09-08 00:28:40 来源:脚本之家 阅读:99 作者:achuo Spring batch 是一个开源的批处理框架. ...

  9. Winforn中DevExpress的TreeList中显示某路径下的所有目录和文件(附源码下载)

    场景 Winform中DevExpress的TreeList的入门使用教程(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

最新文章

  1. flutter 应用场景_【Flutter 1-12】Flutter手把手教程Dart语言——什么是泛型和泛型的使用场景...
  2. xtrabackup实现数据备份与恢复
  3. 【流媒體】Android 实时视频采集—Camera预览采集
  4. kafka 消息顺序写入服务器
  5. Python编码格式导致的csv读取错误
  6. Java验证输入邮箱格式是否正确
  7. 使用bs4爬取《孙子兵法》(处理string属性遇见<br>标签时提取为空)
  8. C++之单例(singleton)模式
  9. 计算机主机电源灯不亮,电脑主机开不了机、电源灯不亮解决方法与技巧
  10. Please restart Word to load MathType addin properly;运行时错误53,文件未找到MathPage.WLL
  11. Mac安装并配置Git+SourceTree使用
  12. 怎么用计算机算ess tss,ESS、RSS、TSS分别表示什么?
  13. 常对象只能调用常函数成员 c++
  14. HashMap是怎样实现快速查找的
  15. macbook pro 用 DP 接口外接显示器系统音量不可用
  16. 石英加速度计的工作原理
  17. 电商客服议价技巧分享
  18. 【数据挖掘】十大算法之SVM支持向量机分类算法
  19. Android:MediaCodec基本原理
  20. linux 配置snmp端口号,Linux系统安装、配置SNMP 服务

热门文章

  1. 闲来没事写个记事本玩玩!!!
  2. 分库分表之历史表如何选择最佳分片路由规则
  3. .NET 6新特性试用 | ArgumentNullException卫语句
  4. 如何在 .NET Core 中获取 CPU 使用率
  5. 【招聘(北京成都)】北森 招聘.NET 架构师工程师
  6. 客户要求ASP.NET Core API返回特定格式,怎么办?
  7. Blazor 基础入门
  8. 记一次 .NET 车联网云端服务 CPU爆高分析
  9. 听说你刚转了Java?准备转回.NET吧!
  10. 腾讯招.NET要求以下几点,你准备好了吗?