uni-app+vue3 +uni.connectSocket 使用websocket

前言

  • 最近在uni-app+vue3+websocket实现聊天功能,在使用websocket还是遇到很多问题

  • 这次因为是app手机应用,就没有使用websocket对象,使用的是uni-app的uni.connectSocket

  • 为了方便测试这次用的是node.js一个简单的dom,来联调模拟发数据,过程有意思

首先模拟一个node.js服务来测试-代码实现

1.在桌面建立一个空文件夹-命名英文

2.打开cmd

3.初始化-下包

// 初始化包
npm init -y
​
// 下载node框架包
npm i express --save
​
// 下载websocket模块
npm i ws

4.回到项目根文件创建根文件-app.js-代码如下

// 引入express框架
var app = require('express')();
var server = require('http').Server(app);
​
// 引入ws框架支持webSocket实现
var WebSocket = require('ws');
​
// 针对8080接口进行监听
var wss = new WebSocket.Server({ port: 8080 });
​
// 当建立连接后,打印日志
wss.on('connection', function connection(ws) {
​
    console.log('建立连接');
    // 同时返回服务端收到的信息
    ws.on('message', function incoming(message) {
        // const buffer = Buffer.from(message,'hex')
        // console.log('ddd',buffer.toString('utf-8'));
        // console.log('message',message);
        console.log('接受前端消息: %s', message);
    });
​
    // 返回信息
    ws.send('接收到消息了');
});
​
// 绑定访问地址
app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});
​
app.listen(3000);

5.来到终端运行服务

node ./app.js

6.websocket服务地址

本机ip+3000端口

来到uni-app+vue3项目

1.来到工具文件utils下创建websocket.js 文件-代码如下

import {
    ref
} from "vue"
​
​
const websoket = ref(null);
​
​
const webSoketInit = (role, id) => {
​
    const wsUrl = "ws://localhost:8080"
​
    // return Promise
​
    websoket.value = uni.connectSocket({
        url: wsUrl,
        success: () => {
            console.log('websoket连接成功');
        },
        fail: () => {
            console.log('websoket连接失败');
            uni.showToast({
                title: 'websoket连接失败',
                icon: 'error',
                duration: 2000,
            });
        },
    });
​
    websoket.value.onOpen((res) => {
        
        if (websoket.value.readyState === 1) {
            websoket.value.send({
                data: '测试回复',
            })
        }
​
    });
​
    websoket.value.onClose(() => {
        console.log('已经被关闭了');
    });
​
    websoket.value.onMessage((res) => {
        console.log('接收到后端发送消息', res);
    });
​
};
​
// 获取websocket对象
const getWebSocket = () => {
    return websoket
};
​
​
// 关闭websocket【离开这个页面的时候执行关闭
const closeSocket = () => {
    websoket.value.close({
        success(res) {
            this.is_open_socket = false;
            console.log('关闭成功', res);
        },
        fail(err) {
            console.log('关闭失败', err);
        },
    });
};
​
const sendMessage = (message) => {
    console.log("发送消息", message)
​
    if (websoket.value.readyState === 1) {
        websoket.value.send({
            data: message,
        })
    }
};
export {
    getWebSocket,
    websoket,
    webSoketInit,
    closeSocket,
    sendMessage,
};

2.来到任意页面-初始化建立连接

<script setup>
    import {
        nextTick
    } from "vue"
​
    import {
        onLoad,
        onReady
    } from "@dcloudio/uni-app";
​
​
    // websocket 通讯
    import {
        getWebSocket,
        websoket,
        webSoketInit,
        closeSocket,
        sendMessage
    } from "@/utils/webSocket.js"
​
    // 判断当前视口大小
    onLoad((options) => {
        webSoketInit()
    })
    onReady(() => {
    
​
        // 获取websocket对象
        let ws = getWebSocket()
​
​
        // 接受后端消息触发
        ws.value.onMessage((e) => {
            console.log('接受后端消息', e);
        })
    })
</script>

3.如图-代码效果

注意细节

1.前端使用websoket.value.send() 发送消息时后端接收一直都是undefined

  • 因为我们不是使用的浏览器的websocket对象,使用的是uni-app封装过一层的uni.connectSocket

  • 想在我们的实例对象是uni.connectSocket,需要按照uni-app的格式发送数据({data:'数据'})

  • 官网地址-uni.connectSocket(OBJECT) | uni-app官网

  • 如图

2.真机模拟时发现只有运行连接成功接收到消息,再用按钮触发后端服务也收不到消息-连接是成功的

  • 因为本机运行到浏览器测试时,是可以访问到自己内网服务

  • 真机运行虽然也是局域网连接wifi-但手机机制可能只会去公网上找-意思就是服务要上线


总结:

经过这一趟流程下来相信你也对 uni-app+vue3 +uni.connectSocket 使用websocket 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!

有什么不足的地方请大家指出谢谢 -- 風过无痕

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Uni-app使用 PDFH5,可以通过以下步骤实现: 1. 安装依赖:在你的 Uni-app 项目根目录下,打开终端并执行以下命令安装 pdfh5 插件: ```bash npm install pdfh5 --save ``` 2. 引入插件:在需要使用 PDFH5 的页面中,打开该页面的 vue 文件,添加以下代码: ```vue <template> <view> <pdfh5 :src="pdfUrl"></pdfh5> </view> </template> <script> import pdfh5 from 'pdfh5' export default { components: { pdfh5 }, data() { return { pdfUrl: 'your_pdf_url' } } } </script> ``` 上述代码中,通过 `<pdfh5>` 标签引入了 PDFH5 组件,并通过 `src` 属性绑定了一个 PDF 文件的 URL。 3. 配置页面样式:为了确保 PDFH5 组件正常显示,你需要在页面的样式文件中添加以下代码: ```css /* 页面样式文件(xxx.vue) */ <style> .pdf-container { width: 100%; height: 100%; overflow: auto; } .pdf-container iframe { width: 100%; height: 100%; border: none; } </style> ``` 上述代码中,我们为 PDFH5 组件的包裹容器 `.pdf-container` 设置了适当的宽度和高度,并移除了 iframe 的边框样式。 4. 替换 `pdfUrl` 的值:将上述代码中的 `pdfUrl` 替换为你实际的 PDF 文件的 URL。 5. 运行项目:保存文件后,通过运行 Uni-app 项目来查看 PDF 文件的显示效果。 通过以上步骤,你就可以在 Uni-app + Vue3 中使用 PDFH5 来展示 PDF 文件了。请确保你已经提前准备好了 PDF 文件,并将其链接或路径正确地赋值给 `pdfUrl` 属性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-風过无痕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值