微信小程序如何使用原生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年8月20日
    27
  • 非标产品如何提升竞争力?(非标产品如何提升竞争力的方法)

    其实大多数产品都需要面临一个问题,即如何提升自身的产品竞争力,以便在市场上占领更多优势。而一款To B软件产品大概率也逃不过类似问题,即非标产品要如何才能提升竞争力。本篇文章里,作…

    科研百科 2023年5月13日
    78
  • sap招标管理系统项目

    SAP招标管理系统项目概述 随着市场竞争的加剧,企业对于招标采购的需求也越来越大。为了提升招标采购的效率和质量,企业纷纷选择使用SAP招标管理系统。本文将介绍一个典型的SAP招标管…

    科研百科 2024年12月16日
    0
  • 小程序“微信刷掌支付”已上线,今年3月腾讯已申请设备专利(腾讯回应微信刷掌支付)

    红星资本局10月14日消息,微信小程序“微信刷掌支付”目前已上线。 该小程序的简介为“伸手感应,识别支付”,账号主体为腾讯旗下的财付通支付科技有限公司。在进入小程序后,页面会提示“…

    科研百科 2023年4月8日
    108
  • 项目管理10大知识领域案例集–(74个实战案例总结)(项目管理的九大知识领域案例)

    项目管理10大知识领域一直是我们工作中运用最多的。项目管理作为一门学科,里面有很多知识领域,第六版已经增加到十大知识领域,我们在工作这些知识对我们究竟该怎么运用呢?PMP项目管理知…

    科研百科 2024年4月24日
    49
  • 雀巢科研项目

    雀巢科研项目: 探索人工智能在食品领域中的应用 随着人工智能技术的不断发展,越来越多的领域开始引入人工智能技术。在食品领域,人工智能技术也被广泛应用,旨在提高食品的生产和安全性。 …

    科研百科 2025年2月21日
    0
  • 从事科研项目 从事科研项目有哪些

    从事科研项目是许多科学家和研究人员的共同目标。这些项目涉及到许多不同的领域,包括自然科学,社会科学,医学和工程技术等。以下是一些常见的科研项目类型和领域: 1. 自然科学:物理学,…

    科研百科 2024年4月1日
    72
  • 装修科研项目思路

    装修科研项目思路 随着现代都市的不断发展和进步,人们对于居住环境的要求也越来越高。因此,装修科研项目成为了现代家居装修中不可或缺的一部分。装修科研项目可以让人们更好地了解家居装修的…

    科研百科 2025年2月20日
    2
  • 怎么查找科研项目

    查找科研项目 如果你想查找一些科研项目,那么你需要一个计算机和互联网连接。你可以在大学的实验室或研究机构网站上查找科研项目。这些网站通常提供有关科研项目的详细信息,包括项目名称、研…

    科研百科 2025年2月12日
    1
  • 利用科研项目科普

    利用科研项目科普 随着科技的发展,科研项目已经成为了科普的一个重要渠道。科研项目不仅可以让人们了解最新的科学技术,还可以让人们更深入地了解科学研究的过程和成果。在这篇文章中,我们将…

    科研百科 2025年1月31日
    0