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

背景

如题,这可能算是.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

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

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

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

Program.cs注册:

app.MapHub<SmartCutHub>(\"/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}\");
})

注意这里的消息内容就是要求下格式:

{
\"arguments\": [{
\"name\": \"wang\"
}], //你的参数
\"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传输过程的:

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年5月10日 上午10:54
下一篇 2024年5月10日 上午11:05

相关推荐

  • 科研项目的项目组织管理

    科研项目的项目组织管理 科研项目是现代科学发展的重要组成部分,它涉及到许多复杂的技术和知识,需要高效的项目组织管理来确保项目的成功完成。 科研项目的项目组织管理包括以下几个方面: …

    科研百科 2024年10月12日
    4
  • 重庆市科研项目管理系统

    重庆市科研项目管理系统 随着科技的不断发展,科研项目管理也在逐渐现代化。重庆市科研项目管理系统则是其中一种比较典型的现代化科研项目管理方式。本文将介绍重庆市科研项目管理系统的主要特…

    科研百科 2024年7月11日
    27
  • 2021年中小学公用经费(中小学公用经费管理办法)

    中小学公用经费管理办法中小学公用经费管理办法随着经济社会的发展,大学生的数量、就业压力越来越大,想要减少贫富差距的可能性也越来越大。所以很多学生想要通过高考来改变命运,这都是一个非…

    科研百科 2024年7月29日
    30
  • 今日头条循环播放怎么关闭

    今日头条是一款非常受欢迎的新闻资讯类应用,为用户提供了丰富的新闻内容,同时也带来了一些烦恼,比如循环播放。如果想关闭今日头条的循环播放,可以按照以下步骤进行操作: 1. 打开今日头…

    科研百科 2024年10月8日
    10
  • 科研项目的社会效益和经济效益

    科研项目的社会效益和经济效益 科研项目是推动科技进步和社会发展的重要力量。在科研项目的发展过程中,社会效益和经济效益通常是相辅相成的。本文将探讨科研项目的社会效益和经济效益,并分析…

    科研百科 3小时前
    0
  • 采购 合同管理

    采购合同管理:从入门到精通 采购合同管理是供应链管理中的重要组成部分,涉及到从采购订单的下达到合同的签署、执行和结束的整个流程。本文将介绍采购合同管理的基础知识,并提供一些实用的建…

    科研百科 2024年9月26日
    14
  • 国网信通产业集团:以信息安全排查助力系统网络可靠运行(国网公司网络信息安全)

    1月25日至2月6日期间,国网信通产业集团国电通人资与党建业务事业部人资项目组完成对所承建承运系统的快速全面排查与整改检修工作。 春节前夕,信产国电通召开网络安全宣贯会议,要求对所…

    科研百科 2023年1月8日
    161
  • 制定项目进度计划的步骤

    制定项目进度计划的步骤 项目进度计划是项目管理中非常重要的一部分,它有助于跟踪项目的进展,确保项目按时完成,并降低项目失败的风险。以下是制定项目进度计划的步骤: 1. 确定项目目标…

    科研百科 2024年5月23日
    69
  • 科研项目引发公众质疑:华中农大“大科学实验”背后的疑云(华中农大重点实验室)

    近期,华中农业大学的一项科研项目引起了公众的广泛关注和质疑。据报道,该项目耗资18亿元人民币,旨在进行一项“大科学实验”,但最终结果仅是养活了80头猪,且这些猪在实验结束后神秘消失…

    科研百科 2024年6月21日
    34
  • 兴国镇:党建引领红色物业 社区夯实治理基础(红色物业 基层治理)

    今年以来,兴国镇党委以习近平新时代中国特色社会主义思想为指导,认真落实党中央及省市县委关于加强城市基层党建工作的各项部署要求,将社区内的各类网格整合为“一张网”,落实“一小区一支部…

    科研百科 2023年1月14日
    122