什么是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的目的。

两种协议

  • 文本协议:JSON

  • 二进制协议:MessagePack

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来自定义获取用户的方法,例如:

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的消息之后进行回调

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

进行连接

_client.connection(url, methodMapping);
  • url : signalR服务器

  • methodMapping : 方法和字符串之间的Mapping

调用SignalR方法

 _client.call(methodName, args, success, fail)
  • methodName:远程方法名

  • args:参数,这里注意一定要数组格式

  • success:调用成功后的回调

  • fail:失败后的回调

写在最后

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

原文地址:https://www.cnblogs.com/inday/p/signalr-wechat-miniapp.html

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

Asp.Net Core SignalR 与微信小程序交互笔记相关推荐

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

    库版本.net core 3.1 我的abp版本:abp5.3 .net core 3.1 请先看微信小程序官方文档.下面说说abp中如何使用.原生asp.net core可以参考实现 服务端配置 1 ...

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

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

  3. 微信小程序开发笔记——wsdchong

    微信小程序开发笔记 一.小程序简介 小程序起源于微信的webview:此类API最初是提供给腾讯内部一些业务使用,很多外部开发者发现后,照葫芦画瓢,逐渐成为微信中网页的事实标准.2015年初,微信发布 ...

  4. 微信小程序开发-笔记

    一.开发文件结构 1.根目录下有三个文件:app.js,app.json和app.wxss.一个小程序项目必须有的三个描述App的文件.这三个文件是应用程序级别的文件.这3个文件的意义: 表1.1  ...

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

    一个C#程序员学习微信小程序的笔记 客户端打开小程序的时候,就将代码包下载到本地进行解析,首先找到了根目录的 app.json ,知道了小程序的所有页面. 在这个Index页面就是我们的首页,客户端在 ...

  6. 小程序 pagescrollto_微信小程序学习笔记(三)-- 首页及详情页开发

    一.常用组件 在上一个章节中讲解了封装请求数据的模块,在此处请求轮播图的数据 1.首页轮播图数据的请求以及渲染 1.1 轮播图数据的请求 pages/home/home.js import 2 使用组 ...

  7. 云开发(微信-小程序)笔记(十四)---- 收藏,点赞(上)

    云开发(微信-小程序)笔记(十三)---- 注册登陆 1.简介 点赞,收藏等都是程序的最简单的功能,在现实的应用中也很常见.这里我就来给大家介绍一下小程序的这个功能. 图标下载地址 先去网站上http ...

  8. 微信小程序开发笔记,你收藏了吗?

    ** 微信小程序开发笔记,你收藏了吗? ** 最近在开发微信小程序,把自己在项目中经常遇到的知识点记录下来,以便下次开发的时候查看. 开发小程序开发工具推荐vscode写代码,微信开发工具用于查看效果 ...

  9. 微信小程序开发笔记 进阶篇④——getPhoneNumber 获取用户手机号码(小程序云)

    文章目录 一.前言 二.前端代码wxml 三.前端代码js 四.云函数 五.程序流程 一.前言 微信小程序开发笔记--导读 大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机号码. 但是,因 ...

最新文章

  1. 前端(移动端)开发利器Chrome Developer Tools秘籍(下)
  2. docker挂载本地目录_Docker:使用本地卷和tmpfs挂载
  3. linux屏幕分辨率文件,Ubuntu 16.04 LTS设置屏幕分辨率显示Unknown display 解决
  4. 国内最火的 HTML、CSS、JavaScript 开源项目 Top 榜,你知多少?
  5. kafka java 生产消费程序demo示例
  6. ELK日志搜索平台搭建
  7. 目前最全的R语言-图片的组合与拼接
  8. Android源码下载(包括最新8.0版本)
  9. 组装台式计算机的部件,台式电脑组装三大件讲解挑选指南
  10. 使用注册表管理桌面新建文件
  11. 高中计算机教室标语,高中教室布置标语
  12. 激光干涉仪测量五轴机床旋转轴精度的方法
  13. 企业逼迫员工离职,员工可以收集哪些证据进行维权?
  14. UnRAR.dll解压rar文件
  15. kali Linux的优点与缺点
  16. 2019年的学习计划
  17. 如何用PPT编制方案 — 1. PPT的总体规划
  18. 使用Tensorflow训练LSTM+Attention中文标题党分类
  19. 最强整理!写给程序员的Flutter详细教程,大厂直通车!
  20. 手机联系人不见了怎么恢复?简单的恢复方法

热门文章

  1. windows 提权 cve-2018-8897
  2. 清北·NOIP2017济南考前冲刺班 DAY1 morning
  3. linux学习-简单命令介绍及安装VMware Tools
  4. 浅谈python中的一般方法、静态方法(staticmethod)和类方法(classmethod)
  5. 酷桌面:随身携带你的企业
  6. Windows Phone 7Silverlight控件之--Panorama
  7. 基于 Azure 的认知服务将文本合成语音
  8. 基于事件驱动架构构建微服务第8部分:在应用程序上实现事件溯源
  9. AgileConfig - RESTful API 介绍
  10. .NET 中 async 和 await