微信小程序如何使用原生Websocket与Asp.Net Core SignalR 通信

2023-06-15 06:27:55 来源:博客园
背景

如题,这可能算是.net 做小程序的服务端时,绕不开的一个问题,老生常谈了。同样的问题,我记得我2018/19年的一个项目的解决方案是:


(资料图片仅供参考)

修改官方的SignalR.js的客户端:把里面用到浏览器的Websocket改成微信小程序的官方api的。目前网上也有不少这样的方案,已经改好开源了;这种方案的缺点是可能有一段时间了,可能跟目前自己的服务端版本不兼容,跟目前自己微信小程序的运行环境不兼容。或者已经有些隐藏bug等等,用上写好业务了再发现bug头疼得很。使用起来很没有安全感;

我现在这里的方案是:

直接使用微信小程序的Websocket的原生api与服务端通信;

原生api文档:https://developers.weixin.qq.com/minigame/dev/api/network/websocket/wx.connectSocket.html

服务端

运行环境:.net core 6 On Linux(k8s)ubuntu 18.04

目前已有一个SignalR的Hub:SmartCutHub.cs

可以看到只有红圈函数GenerateVideoScript()接收一个强类型的参数:GenerateVideoScriptDto

ps:强类型参数传参时跟webapi一样用json对象即可;

Program.cs注册:

app.MapHub("/ws/smartcut");    //所以路由是ws://localhost:5055/ws/smartcut
小程序端

创建连接

这里代码是用的微信小程序原生api,请参考文档

var wsUrl = "ws://localhost:5055/ws/smartcut";//创建连接var conn= await wx.connectSocket({    url: wsUrl,    fail(err)    {        console.error(err)    },    success()    {        console.info(wsUrl+"链接成功")    }})//创建连接成功this.connection=conn;let that=this;

发送消息

这里的步骤不能省略

conn.onOpen(function (res){    console.log("SocketOpened");    //先要确认协议,版本    that.sendStrMsg("{\"protocol\":\"json\",\"version\":1}");    //确认类型    that.sendStrMsg("{\"type\":6}");        //再发送消息内容    that.sendStrMsg("{\"arguments\":[{\"scriptType\":\"口播类\",\"productName\":\"许愿池的王八\",\"productSpecialty\":\"在水里,爱许愿,晒太阳\",\"sceneCount\":5,\"sceneMini\":5,\"sceneMax\":10,\"remark\":\"\",\"language\":\"zh\",\"generateCount\":10}],\"invocationId\":\"0\",\"target\":\"GenerateVideoScript\",\"type\":1}");})

发送消息函数

//这里发送字符串到服务端sendStrMsg(msg){//连接成功后就示例好了    if(this.connection)    {        console.info("准备发送:"+msg);        this.connection.send({            data: msg+"", //注意,msg这里后面这个特殊的字符不能省略            fail(err)            {                console.error(err)            },            success(res)            {                console.info(res)            },            complete(res)            {                console.info(res)            }        });    }    else    {        console.error("ws连接不存在");    }}
总结

我其实这里这种方式是模拟浏览器端的Websocket传输过程的:

注意这里消息体后面一样有这个特殊字符的

也不算原创和多有技术含量,可能大家早就理清楚搞定了。但只有能帮到一位朋友我就开心了。ok,今天就水到这。

标签:

知识领域 在家怎么养猪

如果你家是在山区的情况下。如果选择去养猪是一个很不错的选择。在山区养猪最基本的就是可以满足猪的活...

2023-01-21 09:50:37

探索百科 济州岛自由行攻略

最佳旅游时间:春秋季节是最适宜游览济州岛的。济州岛的气候根据季节的变化可以明显地划分为大陆性的海...

2023-01-21 09:50:34

百科大全 上海格力空调维修电话

上海格力空调售后服务中心:4008205460;上海客户24小时报修热线:02164021703。上海格力空调维修承诺:1...

2023-01-21 09:50:30

百科全书 为什么古代有太监的出现呢

太监这个用词最早是出现在辽,在明朝时,因为宫廷出现了十二监二十四衙门,最大的官是由太监担任,于是...

2023-01-21 09:50:24

知识智库 一次成功的实验成功的原因是什么

一次成功实验的原因如下:1、实验前的认真准备、设计实验中的认真操作。2、有科学严谨的态度。3、善于寻...

2023-01-21 09:50:19

百科词典 西点揭秘剧情详解

部队罪刑调查部的高级官员布伦纳和其小助手森希尔领命36钟头内调研清晰一块儿神密的凶杀案,副总统的强...

2023-01-21 09:50:16

智库知识 三十多岁男人发型

背头、纹理烫、板寸是合适30岁上下男士的头型,三十几岁提议是挑选成熟期的头型,简约干脆利落,空气刘...

2023-01-21 09:50:11

百科问答 女穿男小说多部

1、《大唐女驸马》,作者暗香花落;2、《落棋无声》,作者梦浮桥;3、《南宫旧事》,作者洋洋得色;4、《穿...

2023-01-21 09:50:07

知识课堂 有木有像山河日月一样的小说

1、《浮生劫》,作者是焦糖布丁;2、《消听残雪》,作者是馨瑀;3、《双花双叶又双枝》,作者是藤藤小猫;4...

2023-01-21 09:50:04

字词小课堂 武大郎什么时候被毒死的

武大郎被毒死的时间大概是农历四月二十八日-四月三十日。论据:《金瓶梅》第九回:西门庆偷娶潘金莲武都...

2023-01-21 09:49:58
x 广告
x 广告

Copyright ©  2015-2023 亚商网版权所有  备案号:京ICP备2021034106号-51   联系邮箱:5 516 538 @qq.com