0

    Asp.Net Core SignalR 与微信小程序交互笔记

    2023.04.25 | admin | 152次围观

    什么是Asp.Net Core SignalR

    Asp.Net Core SignalR 是微软开发的一套基于Asp.Net Core的与Web进行实时交互的类库接收服务器消息回调url失败,它使我们的应用能够实时的把数据推送给Web客户端。

    功能

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

    中心 Hubs

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

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

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

    Hubs.Clients

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

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

    HubContext

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

    两种协议

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

    服务器事项

    代码解析

    微软官方示范中的ChatHub:

    usingMicrosoft.AspNetCore.SignalR;

    usingSystem.Threading.Tasks;

    namespaceSignalRChat.Hubs{

    由于在开发者中心开启了回调url和token,当前自动回复设_接收服务器消息回调url失败_dnf接收频道消息失败

    publicclassChatHub: Hub{ //服务端方法publicasyncTask SendMessage(stringuser, stringmessage) { //ReceiveMessage 为客户端方法,让所有客户端调用这个方法awaitClients.All.SendAsync( "ReceiveMessage", user, message); } }}

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

    用户标识

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

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

    在Startup.ConfigureServices中注册:

    services.AddSingleton< IUserIdProvider, CustomUserIdProvider>(); Group 分组

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

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

    微信小程序与SignalR交互

    小程序因为无法直接使用websocket,所以无法使用signalR.js接收服务器消息回调url失败,你可以试着把signalR.js中的webcosket使用部分换成wx.xxSocketxxx。

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

    如何使用 调用类库

    在要使用的页面上:

    ///引入这个类库varsignalR = require( '../../lib/signalr/signalr.js') ///实例化一个对象let_client = newsignalR.signalR(); 创建 一个映射方法

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

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

    进行连接 _ client.connection( url, methodMapping);

    调用SignalR方法 _client. call(methodName, args, success, fail) 写在最后

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

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论