y***@qq.com
y***@qq.com
  • 发布:2025-04-23 18:37
  • 更新:2025-04-27 14:28
  • 阅读:168

websocket怎么用?

分类:uniCloud

我参考这个文档 https://doc.dcloud.net.cn/uniCloud/websocket.html

,写了如下demo,前端提示建立链接了,但是云对象没有打印信息,这个是什么原因?
vue页面

<template>  
     <view class="container">  
        <button type="primary" @click="connect()">连接 WebSocket</button>  
        <button type="warn" @click="disconnect()">断开连接</button>  

        <view class="input-area">  
          <input v-model="message" placeholder="输入要发送的消息" />  
          <button @click="sendMessage()">发送消</button>  
        </view>  

        <view class="logs">  
          <text v-for="(log, index) in logs" :key="index">{{ log }}</text>  
        </view>  
      </view>  
</template>  

<script setup>  
    import { ref,onBeforeUnmount } from 'vue';  
    import {onLoad} from "@dcloudio/uni-app"  
    let socketTask = ref(null) ;  
    const message = ref('');  
    const logs = ref([]);  
    onBeforeUnmount(()=>{  
        this.disconnect()  
    })   
    // 建立连接  
    async function  connect() {  
      this.socketTask = await uniCloud.connectWebSocket({  
        name: 'ws-demo',  
        query: { userId: 'user123' } // 自定义查询参  
      })  

      this.socketTask.onOpen(() => {  
        this.addLog('连接已建')  
      })  

      this.socketTask.onMessage((res) => {  
        this.addLog('收到消息: ' + res.data)  
      })  

      this.socketTask.onClose(() => {  
        this.addLog('连接已关')  
      })  

      this.socketTask.onError((err) => {  
        this.addLog('连接错误: ' + JSON.stringify(err))  
      })  
    }  

    // 发送消�?  
    function  sendMessage() {  
      if (!this.message) return  

      this.socketTask.send({  
        data: this.message  
      })  
      this.addLog('已发: ' + this.message)  
      this.message = ''  
    }  

    // 断开连接  
    function  disconnect() {  
      if (this.socketTask) {  
        this.socketTask.close()  
      }  
    }  

    // 记录日志  
    function   addLog(log) {  
      this.logs.unshift(`[${new Date().toLocaleTimeString()}] ${log}`)  
    }  
</script>  

<style>  
    .container {  
      padding: 20px;  
    }  

    .input-area {  
      margin: 20px 0;  
      display: flex;  
      gap: 10px;  
    }  

    .logs {  
      margin-top: 20px;  
      background-color: #f5f5f5;  
      padding: 10px;  
      max-height: 300px;  
      overflow-y: auto;  
    }         
</style>  

云对象


// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj  
// jsdoc语法提示教程:https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129  
console.log('云对象 ws-demo 已加载');  
module.exports = {  
_onWebsocketConnection:function(event){  
    console.log("onWebsocketConnection", event)  
},  
_onWebsocketMessage:function(event){  
    console.log("onWebsocketMessage", event)  
},  
_onWebsocketDisConnection:function(event) {  
    console.log("onWebsocketDisConnection", event)  
},  
_onWebsocketError:function(event){  
    console.log("onWebsocketError", event)  
},  
_before:function(){ // 通用预处理器  

},  

}  
2025-04-23 18:37 负责人:无 分享
已邀请:
y***@qq.com

y***@qq.com (作者)

我把云对象推到云端,数据库有产生数据的,websocket 是不是自动连接到云端的?

// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj  
// jsdoc语法提示教程:https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129  
console.log('云对象 ws-demo 已加载');  
const db = uniCloud.database();  
// 创建userscollection对象  
const testLogcollection = db.collection('test-log');  

module.exports = {  
_onWebsocketConnection:function(event){  
    testLogcollection.add({val:"onWebsocketConnection"});  
    console.log("onWebsocketConnection", event)  
},  
_onWebsocketMessage:function(event){  
    console.log("onWebsocketMessage", event)  
    testLogcollection.add({val:"onWebsocketMessage"});  
},  
_onWebsocketDisConnection:function(event) {  
    console.log("onWebsocketDisConnection", event)  
    testLogcollection.add({val:"onWebsocketDisConnection"});  
},  
_onWebsocketError:function(event){  
    console.log("onWebsocketError", event)  
    testLogcollection.add({val:"onWebsocketError"});  
},  
_before:function(){ // 通用预处理器  

},  

}  
DCloud_uniCloud_CRL

DCloud_uniCloud_CRL

云对象有日志吗?

y***@qq.com

y***@qq.com (作者)

现在的问题是,怎么链接本地的云对象,现在是自动链接云端的云对象,本地对象没有任何相应的

this.socketTask = await uniCloud.connectWebSocket({
name: 'ws-demo',
query: { userId: 'user123' } // 自定义查询参
})

要回复问题请先登录注册