websocket+vue使用(简单例子)

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。

浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。

当你获取 Web Socket 连接后,你可以通过 send() 方法来向服务器发送数据,并通过 onmessage 事件来接收服务器返回的数据。
在这里插入图片描述
在这里插入图片描述
目前大部分浏览器支持 WebSocket() 接口
看一下下面的例子:
需求:在一个表格中实时接收后端传过来的数据
1.定义表格需要绑定的数组,已经websocket的初始化对象

data () {
    return {
      tableData1: [],//表格数据
      ws: null//websocket
    }
  },

2.写关于websocket的方法

methods: {
    WebSocketTest () {
      if ('WebSocket' in window) {
        alert('您的浏览器支持 WebSocket!')
        // 打开一个 web socket
        this.ws = new WebSocket('ws://110.10.10.10:8585/websocket/textname')//与后端连接的端口
        //发送数据
        this.ws.onopen = function () {
          // Web Socket 已连接上,使用 send() 方法发送数据
          // alert('数据发送中...')
        }
        var that = this
        // 接收数据
        this.ws.onmessage = function (evt) {
          let received = JSON.parse(evt.data)
          alert('数据已接收...')
          //将收到的数据push到表格中去
          that.tableData1.push(received)
          console.log(that.tableData1)
        }
        //关闭
        this.ws.onclose = this.close
      }
    },
    // websocket关闭
    close () {
      alert('连接已关闭...')
    },
  }

这样就可以了

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

规范化的(适用于多种类型实时接受的数据)

第一步:添加js文件
在这里插入图片描述

第二步:在main.js中引用

import SocketService from '@/utils/socket_service'; //websocket

//对服务端进行 WebSocket 的一个连接
SocketService.Instance.connect()
//其它组件通过 this.$socket 更好的使用 SocketService 中定义的方法
Vue.prototype.$socket = SocketService.Instance;

第三步:在页面中使用

created () { 
    this.$socket.registerCallback("1", this.getBaseData);// 1是定义的类型标志,this.getBaseData数据过来处理数据的方法
  },
methids(){
// 获取基本信息
    getBaseData(ret){
      this.basicForm=ret //ret接收到的数据
      this.mapbasicList.set(ret.bsid,ret)
      // this.$forceUpdate()
      this.myMapChangeTrucher+=1
      console.log("1--接收到基本信息")
      console.log(this.mapbasicList)
    },
}
### Python 后端与 Vue3 前端 WebSocket 通信 #### Tornado 实现后端 WebSocket 为了实现实时双向通信,Tornado 提供了一个内置的 `WebSocketHandler` 类来处理 WebSocket 连接。通过继承该类并重写相应的方法,可以创建自定义的 WebSocket 处理逻辑[^1]。 ```python import tornado.ioloop import tornado.web import tornado.websocket class WSHandler(tornado.websocket.WebSocketHandler): def open(self): print('new connection') def on_message(self, message): self.write_message(u"You said: " + message) def on_close(self): print('connection closed') application = tornado.web.Application([ (r'/ws', WSHandler), ]) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start() ``` 此代码片段展示了如何设置一个简单WebSocket 服务器,在客户端打开连接时触发 `open()` 方法;当收到消息时调用 `on_message()` 并且回应给客户端;最后在关闭连接的时候执行 `on_close()` 函数。 #### Vue3 实现前端 WebSocket 对于 Vue3 应用程序来说,可以通过原生 JavaScript API 或者第三方库如 `vue-native-websocket-vue@next` 来集成 WebSockets 功能[^4]。下面是一个基于官方文档的例子: 安装依赖包: ```bash npm install vue-native-websocket-vue@next --save ``` 配置插件: ```javascript // main.js import { createApp } from 'vue' import App from './App.vue' import VueNativeSock from 'vue-native-websocket-vue' const app = createApp(App) app.use(VueNativeSock, { url: 'ws://localhost:8888/ws', }) app.mount('#app') ``` 组件内部使用: ```html <template> <div id="example"> <!-- 组件模板 --> </div> </template> <script> export default { name: 'ExampleComponent', created () { this.$options.sockets.onmessage = function(e){ console.log(`Message received: ${e.data}`) } this.$options.sockets.onerror = function(error){ console.error(`Error occurred: ${error}`) } this.$options.sockets.onclose = function(){ console.warn('Connection lost.') } }, methods: { sendMessage(message) { this.$socket.sendObj({ data: message }) }, }, } </script> ``` 上述例子中,每当有新的消息到达或者发生错误以及连接丢失的情况下都会打印日志信息到控制台,并提供了一种发送 JSON 对象的方式给服务器。 另外需要注意的是,在离开当前路由之前应该断开 WebSocket 的连接以防止资源泄漏[^2]。 ```javascript destroyed() { // 离开路由之后断开 websocket 连接 this.$socket.close(); }, ``` 这样就完成了一个完整的从 Python 到 Vue3 的 WebSocket 双向通讯机制的设计和实现过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值