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

640?wx_fmt=png

例子里有一个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

640?wx_fmt=jpeg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET优惠券领取微信小程序源码是一种基于ASP.NET框架开发的微信小程序源码,提供了用户领取优惠券的功能。优惠券是一种促销方式,可以吸引用户消费,提高销售额。微信小程序是一种轻量级的应用程序,用户可以在微信内直接使用,具有便捷性和实用性。 ASP.NET优惠券领取微信小程序源码通过ASP.NET框架提供了稳定、安全的后端支持,能够保障微信小程序的正常运行。该源码包含了优惠券的展示、领取、使用等功能模块,用户可以通过微信小程序浏览已发布的优惠券,并进行领取。同时,商家可以在后台管理系统中发布、编辑和删除优惠券,灵活调整促销策略。 该源码还包含了用户登录、支付、消息通知等基础功能,能够提供完整的用户体验。用户可以通过微信小程序登录自己的账号,查询已领取的优惠券并进行使用。在优惠券即将过期时,用户还会收到消息提醒,提高了用户对优惠券的关注度和使用率。 ASP.NET优惠券领取微信小程序源码的开发灵感来源于越来越多的商家希望借助微信平台进行促销活动,并提升用户互动体验。通过使用该源码,商家可以快速搭建自己的优惠券领取微信小程序,轻松实现促销目标。同时,用户也可以方便快捷地获取和使用优惠券,获得实实在在的优惠。 总之,ASP.NET优惠券领取微信小程序源码为商家和用户提供了一个便捷的优惠券领取和使用渠道,能够有效提升商家的销售额,提高用户的购物体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值