什么是Asp.Net Core SignalR

Asp.Net Core SignalR 是微软开发的一套基于Asp.Net Core的与Web进行实时交互的类库,它使我们的应用能够实时的把数据推送给Web客户端。

功能

  • 自动管理连接
  • 允许同时广播到所有客户端
  • 也可以广播到指定的组或者特定的客户端
  • 在Github上开源,传送门

SignalR 提供了多种连接方式,在现代化应用中,WebSocket是最佳的传输协议,在客户端无法实现WebSocket协议的时候,SignalR就会采取其他方式,比如Server-Sent或者长轮询(在ws未出现之前,我们讨论的推拉模式)

中心 Hubs

SignalR是采用中心客户端和服务器进行通讯。

中心是一种高级的管道,允许客户端和服务器之间相互调用方法。

中心通过强类型参数传递给方法,进行模型绑定

Hubs.Clients

Clients属性包含了所有的客户端连接信息,它包含了3个属性:

  • All 所有客户端
  • Caller 进行此次请求的客户端
  • Others 排除此次请求客户端的其他客户端

    包含了多个方法:

    = AllExcept 在指定的连接除外的所有连接的客户端上调用方法
  • Client 在特定连接的客户端上调用方法
  • Clients 在特定连接的客户端上调用方法
  • Group 调用指定的组中的一种对所有连接方法
  • GroupExcept 调用中指定的组,除非指定连接到的所有连接的方法
  • Groups 调用一种对多个组的连接方法
  • OthersInGroup 调用一种对一组的连接,不包括客户端调用 hub 方法方法
  • User 调用一种对与特定用户关联的所有连接方法
  • Users 调用一种对与指定的用户相关联的所有连接方法

每个属性和方法返回的对象都包含一个SendAsync方法,可以对客户端进行调用。

HubContext

可以在应用其他地方通过使用IHubContext,达到调用Hub的目的。

两种协议

MessagePack类似于JSON,但传输比JSON更快,数据大小比JSON更小

服务器事项

  • 创建的Hub必须继承Microsoft.AspNetCore.SignalR.Hub,Hub类已经包含了管理连接、组和发送接收消息的属性及事件
  • 在Hub中使用的方法应该尽量使用异步的方式,因为SignalR在发送和接收消息的时候使用的是异步方法。
  • Startup.ConfigureServices中通过services.AddSignalR对SignalR进行注册
  • Startup.Configure中通过app.UseSignalR方法对Hub路由进行配置

代码解析

微软官方示范中的ChatHub:

using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks; namespace SignalRChat.Hubs
{
public class ChatHub : Hub
{
//服务端方法
public async Task SendMessage(string user, string message)
{
//ReceiveMessage 为客户端方法,让所有客户端调用这个方法
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
}

上述代码为当收到客户端发来的SendMessage请求后(发送聊天信息),我们把消息发送到所有客户端,让他们调用自身的ReceiveMessage方法。

用户标识

通常情况下,在用户进行连接后,Connection会保存用户的用户标识,以便对特定用户进行发送消息。

可以实现IUserIdProvider来自定义获取用户的方法,例如:

public class CustomUserIdProvider : IUserIdProvider
{
public virtual string GetUserId(HubConnectionContext connection)
{
return connection.User?.FindFirst(ClaimTypes.Email)?.Value;
}
}

Startup.ConfigureServices中注册:

    services.AddSingleton<IUserIdProvider, CustomUserIdProvider>();

Group 分组

分组类似于聊天室中的每个房间,通过分组,我们可以给特定小组发送消息。

用户标识和组名称都是区分大小写的。

微信小程序与SignalR交互

小程序因为无法直接使用websocket,所以无法使用signalR.js,你可以试着把signalR.js中的webcosket使用部分换成wx.xxSocketxxx。

在参考了算神代码后,归了一个小类库,方便大家使用,源码较长,我放到了github上,点击【传送门】进入。

如何使用

调用类库

在要使用的页面上:

///引入这个类库
var signalR = require('../../lib/signalr/signalr.js')
///实例化一个对象
let _client = new signalR.signalR();

创建 一个映射方法

这是为了让小程序收到SignalR的消息之后进行回调

callMethods(methods, args) {
console.log(methods, args);
let self = this;
switch (methods) {
case 'sayHello':
self.sayHello(args[0]);
break;
}
},

例子里有一个sayHello方法,我们用字符串作为key。

进行连接

_client.connection(url, methodMapping);
  • url : signalR服务器
  • methodMapping : 方法和字符串之间的Mapping

调用SignalR方法

 _client.call(methodName, args, success, fail)
  • methodName:远程方法名
  • args:参数,这里注意一定要数组格式
  • success:调用成功后的回调
  • fail:失败后的回调

写在最后

最近真的忙,忙成一道闪电,正好遇到这个问题随之记录下。类库可能并不完善,你可以在github上提issue,我会跟进的,有好的修改方式,你也可以PR我。

Asp.Net Core SignalR 与微信小程序交互笔记的更多相关文章

  1. asp.net core 3.x 微信小程序登录库(也可用于abp)

    视频教程(使用+实现原理):https://share.weiyun.com/57HKopT 建议直接看视频 源码地址:https://github.com/bxjg1987/abpGeneralMo ...

  2. .Net Webapi SignalR与微信小程序的交互

    .Net Webapi SignalR与微信小程序的交互 一.SignalR与Webapi 1.SignalR的安装: Signalr与跨域仅需要安装两个开源库 Microsoft.Owin.Cors ...

  3. 微信小程序练习笔记(更新中。。。)

    微信小程序练习笔记 微信小程序的练习笔记,用来整理思路的,文档持续更新中... 案例一:实现行的删除和增加操作  test.js // 当我们在特定方法中创建对象或者定义变量给与初始值的时候,它是局部 ...

  4. 【微信小程序学习笔记】入门与了解

    [微信小程序学习笔记(一)] IDE 下载安装 下载地址 官方工具:https://mp.weixin.qq.com/debug/w … tml?t=1476434678461 下载可执行文件后,可按 ...

  5. 微信小程序学习笔记二 数据绑定 + 事件绑定

    微信小程序学习笔记二 1. 小程序特点概述 没有DOM 组件化开发: 具备特定功能效果的代码集合 体积小, 单个压缩包体积不能大于2M, 否则无法上线 小程序的四个重要的文件 *js *.wxml - ...

  6. 微信小程序学习笔记一 小程序介绍 & 前置知识

    微信小程序学习笔记一 1. 什么是小程序? 2017年度百度百科十大热词之一 微信小程序, 简称小程序, 英文名 Mini Program, 是一种不需要下载安装即可使用的应用 ( 张小龙对其的定义是 ...

  7. 微信小程序实战笔记

    前言: 微信小程序最近刚从鹅厂生产出来,我有幸参与了一次小程序的实战,有必要记录我的开发过程.看上去小程序很简单,但是在深入开发的时候才能具体体会里面的变化,接下来记录我的第一个微信小程序的点点滴滴! ...

  8. 微信小程序学习笔记(阶段一)

    一阶段学习过程: (一)看官方文档的简易教程:https://mp.weixin.qq.com/debug/wxadoc/dev/ (二)看小码哥视频:https://chuanke.baidu.co ...

  9. 一个C#程序员学习微信小程序的笔记

    客户端打开小程序的时候,就将代码包下载到本地进行解析,首先找到了根目录的 app.json ,知道了小程序的所有页面. 在这个Index页面就是我们的首页,客户端在启动的时候,将首页的代码装载进来,通 ...

随机推荐

  1. windows查看端口占用 windows端口占用 查找端口占用程序 强制结束端口占用 查看某个端口被占用的解决方法 如何查看Windows下端口占用情况

    windows下查询端口占用情况 ,强制结束端口占用程序 查询8080端口被那个程序占用 如何强制结束windows下端口占用情况? 下面操作在win10下 在控制台执行命令   1.列出所有端口的情 ...

  2. 微信公众号通过图片选取接口上传到阿里oss

    前言 之前写过一篇微信JS-SDK的使用方法,可进行参考 https://www.cnblogs.com/fozero/p/10256862.html 配置并调用公众号接口权限 1.配置权限微信公众号 ...

  3. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU特性介绍(3)- 命名规则

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的命名规则. 打开任何一款i.MX RT系列芯片的Data Sheet均可找到如下命名规则表,以i.MX ...

  4. .net mvc 导出excel表格

    使用using System.IO; /// /// 导出Excel文件,并自定义文件名 /// public static void DataTableExcel(System.Data.DataT ...

  5. C#线程同步--线程通信

    问题抽象:当某个操作的执行必须依赖于另一个操作的完成时,需要有个机制来保证这种先后关系.线程通信方案:ManualResetEventSlim.ManualResetEvent.AutoResetEv ...

  6. Dynamics 365 Online-Security Updates On TLS 1.2

    不仅仅是Dynamics 365,现在MS许多产品都开始主推使用TLS1.2,所以在日常开发中,需要注意这部分的改动. 如果访问某个服务,出现错误信息类似于“Could not create SSL/ ...

  7. WebService访问oracle数据库本地调试

    WebService访问oracle数据库本地调试-一步一个坑 上篇文章提到我们额数据库挂了,重装了数据库,然后呢我需要在本地调试WebService,看看那些数据结构缺失,迁移到新数据库中去.踩坑之 ...

  8. SpreadJS使用进阶指南 - 使用 NPM 管理你的项目

    前言 SpreadJS作为一款性能出众的纯前端电子表格控件,自2015年发布以来,已经被广泛应用于各领域“在线Excel”数据管理项目中.NPM,作为管理Node.js库最有力的手段,解决了很多Nod ...

  9. 系统前端基本文件+ajax部分理解

    静态页面: 一.static: css dist fonts images js model 二.templates: html ajax搜索操作: <html> <head> ...

  10. Docker入门笔记

    Docker入门笔记 随笔记录初学Docker遇到的问题, 以免下次再犯. 本机系统Ubuntu18.04 安装 Docker有2个版本 Community Edition (CE) 社区版(免费) ...