Asp.Net Core SignalR 与微信小程序交互笔记
什么是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 与微信小程序交互笔记相关推荐
- 微信小程序 登录 服务器 c,asp.net core 3.x 微信小程序登录库(也可用于abp)
库版本.net core 3.1 我的abp版本:abp5.3 .net core 3.1 请先看微信小程序官方文档.下面说说abp中如何使用.原生asp.net core可以参考实现 服务端配置 1 ...
- .Net Webapi SignalR与微信小程序的交互
.Net Webapi SignalR与微信小程序的交互 一.SignalR与Webapi 1.SignalR的安装: Signalr与跨域仅需要安装两个开源库 Microsoft.Owin.Cors ...
- 微信小程序开发笔记——wsdchong
微信小程序开发笔记 一.小程序简介 小程序起源于微信的webview:此类API最初是提供给腾讯内部一些业务使用,很多外部开发者发现后,照葫芦画瓢,逐渐成为微信中网页的事实标准.2015年初,微信发布 ...
- 微信小程序开发-笔记
一.开发文件结构 1.根目录下有三个文件:app.js,app.json和app.wxss.一个小程序项目必须有的三个描述App的文件.这三个文件是应用程序级别的文件.这3个文件的意义: 表1.1 ...
- 一个C#程序员学习微信小程序的笔记
一个C#程序员学习微信小程序的笔记 客户端打开小程序的时候,就将代码包下载到本地进行解析,首先找到了根目录的 app.json ,知道了小程序的所有页面. 在这个Index页面就是我们的首页,客户端在 ...
- 小程序 pagescrollto_微信小程序学习笔记(三)-- 首页及详情页开发
一.常用组件 在上一个章节中讲解了封装请求数据的模块,在此处请求轮播图的数据 1.首页轮播图数据的请求以及渲染 1.1 轮播图数据的请求 pages/home/home.js import 2 使用组 ...
- 云开发(微信-小程序)笔记(十四)---- 收藏,点赞(上)
云开发(微信-小程序)笔记(十三)---- 注册登陆 1.简介 点赞,收藏等都是程序的最简单的功能,在现实的应用中也很常见.这里我就来给大家介绍一下小程序的这个功能. 图标下载地址 先去网站上http ...
- 微信小程序开发笔记,你收藏了吗?
** 微信小程序开发笔记,你收藏了吗? ** 最近在开发微信小程序,把自己在项目中经常遇到的知识点记录下来,以便下次开发的时候查看. 开发小程序开发工具推荐vscode写代码,微信开发工具用于查看效果 ...
- 微信小程序开发笔记 进阶篇④——getPhoneNumber 获取用户手机号码(小程序云)
文章目录 一.前言 二.前端代码wxml 三.前端代码js 四.云函数 五.程序流程 一.前言 微信小程序开发笔记--导读 大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机号码. 但是,因 ...
最新文章
- 前端(移动端)开发利器Chrome Developer Tools秘籍(下)
- docker挂载本地目录_Docker:使用本地卷和tmpfs挂载
- linux屏幕分辨率文件,Ubuntu 16.04 LTS设置屏幕分辨率显示Unknown display 解决
- 国内最火的 HTML、CSS、JavaScript 开源项目 Top 榜,你知多少?
- kafka java 生产消费程序demo示例
- ELK日志搜索平台搭建
- 目前最全的R语言-图片的组合与拼接
- Android源码下载(包括最新8.0版本)
- 组装台式计算机的部件,台式电脑组装三大件讲解挑选指南
- 使用注册表管理桌面新建文件
- 高中计算机教室标语,高中教室布置标语
- 激光干涉仪测量五轴机床旋转轴精度的方法
- 企业逼迫员工离职,员工可以收集哪些证据进行维权?
- UnRAR.dll解压rar文件
- kali Linux的优点与缺点
- 2019年的学习计划
- 如何用PPT编制方案 — 1. PPT的总体规划
- 使用Tensorflow训练LSTM+Attention中文标题党分类
- 最强整理!写给程序员的Flutter详细教程,大厂直通车!
- 手机联系人不见了怎么恢复?简单的恢复方法
热门文章
- windows 提权 cve-2018-8897
- 清北·NOIP2017济南考前冲刺班 DAY1 morning
- linux学习-简单命令介绍及安装VMware Tools
- 浅谈python中的一般方法、静态方法(staticmethod)和类方法(classmethod)
- 酷桌面:随身携带你的企业
- Windows Phone 7Silverlight控件之--Panorama
- 基于 Azure 的认知服务将文本合成语音
- 基于事件驱动架构构建微服务第8部分:在应用程序上实现事件溯源
- AgileConfig - RESTful API 介绍
- .NET 中 async 和 await