uniapp使用signalR进行socket连接,适用pc和app端

1,293 阅读2分钟

ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功能添加到应用程序的功能。 实时 web 功能使服务器端代码可以立即将内容推送到客户端。

1.引入方式:import * as signalR from '@microsoft/signalr'

或 const signalR = require("@microsoft/signalr");

此时web端正常连接,app出现报错:

ReferenceError: require is not defined

2.引入方式: const signalR = require('../../common/signalr.js')

此时web端正常连接,app出现报错:

TypeError: Cannot read property 'call' of undefined

3.使用uniapp提供的"renderjs",引入方式使用如下:

方式一:const signalR = require("@microsoft/signalr");

方式二:import * as signalR from '@microsoft/signalr'

方式三: const signalR = require('../../common/signalr.js')

此时web端和app端均可正常连接, 建议使用方式三,因为其他方式需要npm安装@microsoft/signal,影响打包速度

image.png

总结(原因查找思路):

1.插件版本

2.引入方式

3.手机需要连接同ip的网络

在后测试中又发现新的问题,renderJs中的data与其他script的data是相互隔离的,在render中无法直接拿到其他script中data数据(如使用this.severIp会报undefined)

解决办法:通过uni-app 与 renderjs 通信拿到数据 参考:blog.csdn.net/M_Eve/artic…

成功实现数据通信

后续开发中遇到的问题:

1.如何在app所有界面都实时监听消息推送?

可以全局注册公共组件,公共组件内建立长连接

2.公共组件如何全局引入,不用在每个页面的template中写入组件?在uniapp中没有像pc端那种公共头部html,且无法操作dom

目前还没完美的解决方案,我只能在需要用到组件的页面进行写入,后续可关注论坛uniapp怎么设置所有页面共用的组件 - DCloud问答