开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1340|回复: 3
收起左侧

[已解决] 求一个uniapp的WebSocket通讯例子

 关闭 [复制链接]
结帖率:67% (6/9)
发表于 2022-5-7 09:53:32 | 显示全部楼层 |阅读模式   内蒙古自治区兴安盟
100精币
求一个uniapp的WebSocket通讯例子
易语言这边的服务例子我这有
只要uniapp的WebSocket客户Duan即可
要能自定服务器地址
发送和接收的
希望能写的简便
界面无所谓 三个编辑框(地址,发送内容,接收内容) 两个按钮(连接/断开,发送)就行
注释详细一些
100精币 不成敬意,有会的大佬快来拿吧

最佳答案

查看完整内容

封装websocket [mw_shl_code=javascript,true]class websocketUtil { constructor(url, time) { this.is_open_socket = false //避免重复连接 this.url = url //地址 this.data = null //心跳检测 this.timeout= time //多少秒执行检测 this.heartbeatInterval= null //检测服务器端是否还活着 this.reconnectTimeOut= null //重连之后多久再次重连 try { return this.connectSocketInit() } catch (e) { ...

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值
结帖率:81% (34/42)

签到天数: 1 天

发表于 2022-5-7 09:53:33 | 显示全部楼层   广东省湛江市
封装websocket

[JavaScript] 纯文本查看 复制代码
class websocketUtil {
        constructor(url, time) {
                this.is_open_socket = false //避免重复连接
                this.url = url //地址
                this.data = null
                //心跳检测
                this.timeout= time //多少秒执行检测
                this.heartbeatInterval= null //检测服务器端是否还活着
                this.reconnectTimeOut= null //重连之后多久再次重连

                try {
                        return this.connectSocketInit()
                } catch (e) {
                        console.log('catch');
                        this.is_open_socket = false
                        this.reconnect();
                }
        }

        // 进入这个页面的时候创建websocket连接【整个页面随时使用】
        connectSocketInit() {
                this.socketTask = uni.connectSocket({
                        url: this.url,
                        success:()=>{
                                console.log("正准备建立websocket中...");
                                // 返回实例
                                return this.socketTask
                        },
                });
                this.socketTask.onOpen((res) => {
                        console.log("WebSocket连接正常!");
                        clearTimeout(this.reconnectTimeOut)
                        clearTimeout(this.heartbeatInterval)
                        this.is_open_socket = true;
                        this.start();
                        // 注:只有连接正常打开中 ,才能正常收到消息
                        this.socketTask.onMessage((res) => {
                                console.log(res.data)
                        });
                })
                // 监听连接失败,这里代码我注释掉的原因是因为如果服务器关闭后,和下面的onclose方法一起发起重连操作,这样会导致重复连接
                // uni.onSocketError((res) => {
                //         console.log('WebSocket连接打开失败,请检查!');
                //         this.is_open_socket = false;
                //         this.reconnect();
                // });
                // 这里仅是事件监听【如果socket关闭了会执行】
                this.socketTask.onClose(() => {
                        console.log("已经被关闭了")
                        this.is_open_socket = false;
                        this.reconnect();
                })
        }
        
        //发送消息
        send(value){
                // 注:只有连接正常打开中 ,才能正常成功发送消息
                this.socketTask.send({
                        data: value,
                        async success() {
                                console.log("消息发送成功");
                        },
                });
        }
        //开启心跳检测
        start(){
                this.heartbeatInterval = setInterval(()=>{
                        this.data={value:"传输内容",method:"方法名称"}
                        console.log(this.data)
                        this.send(JSON.stringify(this.data));
                },this.timeout)
        }
        //重新连接
        reconnect(){
                //停止发送心跳
                clearInterval(this.heartbeatInterval)
                //如果不是人为关闭的话,进行重连
                if(!this.is_open_socket){
                        this.reconnectTimeOut = setTimeout(()=>{
                                this.connectSocketInit();
                        },3000)
                }
        }
}

module.exports = websocketUtil

调用方式
1.单页面调用
引入
[JavaScript] 纯文本查看 复制代码
import wsRequest from './static/js/websocket.js'

使用
[JavaScript] 纯文本查看 复制代码
new wsRequest("ws://xxx:3100/connect/websocket",5000)

2.全局调用
在main.vue页面中
[JavaScript] 纯文本查看 复制代码
//引入websocket文件
import wsRequest from './static/js/websocket.js'
//开启websocket
let websocket = new wsRequest("ws://xxx:3100/connect/websocket",5000)
//挂载到全局
Vue.prototype.$socket = websocket

页面中调用
[JavaScript] 纯文本查看 复制代码
let data={value:"传输内容",method:"方法名称"}
this.$socket.send(JSON.stringify(data));

注意事项
[JavaScript] 纯文本查看 复制代码
//在测试环境时url可以写成  ws://xxx:3100/connect/websocket
new wsRequest("ws://xxx:3100/connect/websocket",5000)

//发布体验版或正式版,url一定要写成  wss://xxx:3100/connect/websocket
new wsRequest("wss://xxx:3100/connect/websocket",5000)


转载https://blog.csdn.net/weixin_42000816/article/details/113307548
回复

使用道具 举报

结帖率:99% (71/72)
发表于 2022-5-7 10:24:18 | 显示全部楼层   广西壮族自治区来宾市
https://www.kancloud.cn/guobaoguo/uniapp/820867
例子看一下了
回复

使用道具 举报

结帖率:67% (6/9)

签到天数: 5 天

 楼主| 发表于 2022-5-7 11:15:27 | 显示全部楼层   内蒙古自治区兴安盟
影知 发表于 2022-5-7 10:24
https://www.kancloud.cn/guobaoguo/uniapp/820867
例子看一下了

因为看不懂 所以要求个例子的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表