flask与vue实现通过websocket通信

        在一些情况下,我们需要实现前后端之间的时刻监听,本文是一篇工具文档,用于解决前后端之间使用websocket交互。

一. Flask的相关配置

1. 下载相关依赖库

如果还没有配置flask的话,需要先安装flask,同时为解决跨域问题,需要安装cors,解决前后端交互,使用socket。

pip install flask
pip install Flask Flask-SocketIO Flask-CORS

2. 后端代码

(1)引入依赖

from flask import Flask
from flask_socketio import SocketIO, emit
from flask_cors import CORS

(2)创建flask示例

app = Flask(__name__)

(3)解决跨域

CORS(app)

(4)引入socket交互

socketio = SocketIO(app, cors_allowed_origins="*")

(5)前后交互

@socketio.on('send_message')
def handle_message(message):  # 其中的message是前端传过来的print('Received message: ' + message)  # 打印前端传来的信息response = 'Server received: ' + message  # 字符串拼接emit('message', response)  # 接收到之后,返回response字符串给前端,作为回应

(6)启动

        因为引入了websocket,并且要避免环境不安全,要额外添加参数

if __name__ == '__main__':socketio.run(app, debug=True, allow_unsafe_werkzeug=True)

整体代码

from flask import Flask
from flask_socketio import SocketIO, emit
from flask_cors import CORSapp = Flask(__name__)
CORS(app)
socketio = SocketIO(app, cors_allowed_origins="*")@socketio.on('send_message')
def handle_message(message):  # 其中的message是前端传过来的print('Received message: ' + message)  # 打印前端传来的信息response = 'Server received: ' + message  # 字符串拼接emit('message', response)  # 接收到之后,返回response字符串给前端,作为回应if __name__ == '__main__':socketio.run(app, debug=True, allow_unsafe_werkzeug=True)

二. vue前端配置

1. 引入模块

npm install socket.io-client

2.页面代码

<template><div><div style="top: 300px;position: absolute;left: 350px;"><input  type="text" v-model="message" placeholder="Enter your message"><button @click="sendMessage">Send Message</button></div><div v-if="receivedMessage"><p>Received: {{ receivedMessage }}</p></div></div>
</template>

3.主要方法

methods: {sendMessage() {if (this.message) {this.socket.emit('send_message', this.message);this.message = '';  // 清空输入框}}}

4.前端全部代码

<template><div><div style="top: 300px;position: absolute;left: 350px;"><input  type="text" v-model="message" placeholder="Enter your message"><button @click="sendMessage">Send Message</button></div><div v-if="receivedMessage"><p>Received: {{ receivedMessage }}</p></div></div>
</template><script>
import io from 'socket.io-client';export default {data() {return {file: null,currentFrame: null,  // 存储当前帧的数据URLsocket: null,message: '',  // 用户输入的消息receivedMessage: ''  // 接收到的消息}},mounted() {this.socket = io('http://localhost:5000');this.socket.on('video_frame', (frame) => {this.currentFrame = 'data:image/jpeg;base64,' + btoa(new Uint8Array(frame).reduce((data, byte) => data + String.fromCharCode(byte), ''));});this.socket.on('message', (msg) => {this.receivedMessage = msg;console.log(this.receivedMessage);});},methods: {sendMessage() {if (this.message) {this.socket.emit('send_message', this.message);this.message = '';  // 清空输入框}}}
}
</script>

三. 演示

1. 前端输入信息并发送

2.后端会接收到输入信息

3.后端接收到信息并作为回应返回给前端,控制台打印信息

四. 使用websocket的优势

websocket的优势

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

  1. 实时双向通信

    • WebSocket:允许服务器和客户端之间进行实时的双向通信。这意味着一旦连接建立,服务器可以主动向客户端推送数据,而不需要客户端请求。这对于需要实时更新的应用(如聊天应用、实时游戏、股票行情、在线协作工具等)特别有用。
    • 前后端接口(REST API):主要采用HTTP协议的请求-响应模型,客户端需要定期发送请求来获取最新的数据(轮询),这会增加网络开销和延迟。
  2. 减少网络开销

    • WebSocket:在建立连接后,数据交换是通过单一的TCP连接进行的,没有HTTP请求头的额外开销,这使得通信更为高效。
    • 前后端接口(REST API):每次请求都包含完整的HTTP请求头信息,会增加额外的网络开销,尤其是在频繁请求的情况下。
  3. 延迟更低

    • WebSocket:由于是持久连接,数据传输的延迟较低,适合对延迟敏感的应用。
    • 前后端接口(REST API):每次数据传输都需要建立新的连接,导致较高的延迟,且轮询方式会增加延迟。
  4. 服务器推送能力

    • WebSocket:服务器可以随时向客户端推送数据,而无需客户端主动请求,适用于需要服务器主动通知客户端的场景。
    • 前后端接口(REST API):一般是客户端发起请求,服务器响应。虽然可以通过长轮询实现类似的效果,但效率较低且实现复杂。
  5. 连接状态管理

    • WebSocket:连接状态由客户端和服务器共同管理,连接状态明确,一旦断开需要重连。
    • 前后端接口(REST API):每次请求都是独立的,无需维护连接状态,适合一些无状态的服务。

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

使用场景对比

  • WebSocket 适用场景

    • 实时通信应用(如即时聊天、在线游戏)。
    • 实时数据更新(如股票行情、体育赛事直播)。
    • 实时协作工具(如在线文档编辑、实时白板)。
  • 前后端接口(REST API)适用场景

    • 传统的CRUD应用(如博客、电子商务网站)。
    • 无需实时更新的数据交互。
    • 需要无状态通信的服务。

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

总结

WebSocket 和 REST API 各有优缺点,具体使用哪种方式取决于应用的需求。对于需要实时、低延迟和双向通信的应用,WebSocket 是更好的选择。而对于传统的、无状态的数据交互,REST API 则更为合适。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/361343.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型自然语言生成自动驾驶可编辑仿真场景(其一 共十篇)

第一篇&#xff1a;LLM greater scene summarize 第二篇&#xff1a;LLM simulation Test effect 第三篇&#xff1a;LLM simulation driving scenario flow work 第四篇&#xff1a;LLM Algorithm flow description 第五篇&#xff1a;Configure the environment and back…

探索ChatGPT在程序员日常工作的多种应用

引言 在现代科技迅猛发展的今天&#xff0c;人工智能的应用已经深入到我们生活和工作的各个方面。作为程序员&#xff0c;我们时常面临大量繁杂的任务&#xff0c;从代码编写、错误调试到项目管理和团队协作&#xff0c;每一项都需要花费大量的时间和精力。近年来&#xff0c;…

[AI开发配环境]VSCode远程连接ssh服务器

文章目录 总览&#xff1a;ssh连接远程服务器连接免密登录&#xff1a;Docker&#xff1a;ssh连接远程宿主机后&#xff0c;进一步连接并使用其中的docker容器reload window 配置解释器&#xff1a;CtrlP&#xff0c;在上面输入“>python”, 然后选selecet interpreter运行命…

Sharding-JDBC分库分表

参考&#xff1a; https://mp.weixin.qq.com/s/A6WS1CSjF7wvBE_gKLyp8w https://shardingsphere.apache.org/document/legacy/4.x/document/cn/quick-start/sharding-jdbc-quick-start/ 注意&#xff1a; 支持的sql项&#xff1a; 全面支持DML、DDL、DCL、TCL和部分DAL。支…

Altera不同系列的型号命名规则

Altera芯片型号&#xff1a;10AX07H4F34I3SG 20nm工艺 资源&#xff1a; 大数据 云计算 人工智能 图像处理 MSEL

C#+uni-app医院HIS预约挂号系统源码 看病挂号快人一步

​​​​​​​ 提到去大型医院机构就诊时&#xff0c;许多人都感到恐惧。有些人一旦走进医院的门诊大厅&#xff0c;就感到迷茫&#xff0c;既无法理解导医台医生的建议&#xff0c;也找不到应该去哪个科室进行检查。实际上&#xff0c;就医也是一门学问&#xff0c;如何优化…

物联网系统运维——数据库部署,Linux环境下MySQL安装,使用phpMyAdmin管理MySQL,实验CentOS 7安装MySQL

一.MySQL 1.概要 MySQL是一种关联数据库管理系统&#xff0c;关联数据:而不是将所有数据放在一个大仓库内&#xff0c;这样就增加了速度并提高了灵活性库将数据保存在不同的表中。性能高、成本低、可靠性好&#xff0c;已经成为最流行的开源数据库。 二.MySQL安装与配置 1. …

IPFoxy Tips:匿名海外代理IP的使用方法及注意事项

在互联网上&#xff0c;隐私和安全问题一直备受关注。为了保护个人隐私和数据安全&#xff0c;使用匿名代理IP是一种常用的方法。匿名代理IP可以隐藏用户的真实IP地址&#xff0c;使用户在访问网站时更加隐秘和安全。 本文将介绍匿名代理IP的基本原理和核心功能。 基本原则 匿…

算法与数据结构——时间复杂度详解与示例(C#,C++)

文章目录 1. 算法与数据结构概述2. 时间复杂度基本概念3. 时间复杂度分析方法4. 不同数据结构的时间复杂度示例5. 如何通过算法优化来提高时间复杂度6. C#中的时间复杂度示例7. 总结 算法与数据结构是计算机科学的核心&#xff0c;它们共同决定了程序的性能和效率。在实际开发中…

Redis-集群-环境搭建

文章目录 1、清空主从复制和哨兵模式留下的一些文件1.1、删除以rdb后缀名的文件1.2、删除主从复制的配置文件1.3、删除哨兵模式的配置文件 2、appendonly修改回no3、开启daemonize yes4、protect-mode no5、注释掉bind6、制作六个实例的配置文件6.1、制作配置文件redis6379.con…

数据结构——带头双向循环链表(c语言实现)

目录 1.单链表和双向链表对比 2.双向链表实现 2.1 创建新节点 2.2 链表初始化 2.3 尾插 2.4 头插 2.5 尾删 2.6 头删 2.7 查找 2.8 指定位置后插入数据 2.9 删除指定节点 2.10 销毁链表 2.11 打印链表 前言&#xff1a; 我们在前几期详细地讲解了不带头单…

数据分析python基础实战分析

数据分析python基础实战分析 安装python&#xff0c;建议安装Anaconda 【Anaconda下载链接】https://repo.anaconda.com/archive/ 记得勾选上这个框框 安装完后&#xff0c;然后把这两个框框给取消掉再点完成 在电脑搜索框输入"Jupyter"&#xff0c;牛马启动&am…

网易严选礼品卡有什么用?

网易严选的礼品卡可以在网易商城里买东西 但是现在好多人买东西基本上都用的是淘宝京东之类的 很少会有人用网易吧 但是最近我朋友送了我几张网易的卡&#xff0c;我自己也用积分兑换一张&#xff0c;一直不知道怎么用 最后还是在收卡云上转让出去了&#xff0c;价格高不说…

2024年JCR分区,将发生重大变化

科睿唯安官方微信发布消息&#xff0c;指出今年的期刊排名及相应JCR分区将发生重大变化。 原文比较长&#xff0c;不熟悉相关规则的朋友也不太容易读懂。因此&#xff0c;我们今天做一个详细的解读。 首先明确几个基本概念&#xff1a; &#xff08;1&#xff09;2024年发布2…

File类和IO流

File类和IO流 文章目录 File类和IO流[TOC](文章目录)前言一、java.io.File类&IO流原理及流的分类1.1 File类及其API1.2 IO流原理及分类 二、节点流的介绍&#xff08;字符/字节&#xff09;2.1 Reader\Writer--字符IO抽象基类2.2 FileReader\FileWriter--字符IO节点流2.3 I…

Android 多媒体开发——Media3与MediaSession最全使用指南

一、Media3库简介 1.1 Media3是什么&#xff1f; 官方释义&#xff1a; Jetpack Media3 is the new home for media libraries that enables Android apps to display rich audio and visual experiences. Media3 offers a simple architecture with powerful customization,…

Git 和 TortoiseGit 安装和配置(图文详解)

使用git&#xff0c;需要在Windows上需要安装两个软件&#xff1a;1&#xff09;Git 2&#xff09;TortoiseGit 若需要&#xff0c;可以下载TortoiseGit汉化语言包。 注意&#xff1a;tortoiseGit是在安装了Git的基础上运行的&#xff0c;所以需要先安装Git&#xff0c;后安装…

Mysql索引的实现原理,B+Tree,WAL

InnoDB 引擎&#xff0c;每一个数据表有两个文件 .frm和.ibd&#xff0c;分别为表结构&#xff0c;数据和索引&#xff0c;数据挂在主索引的叶子节点上&#xff0c;此主索引称为聚簇索引。 MyISAM 引擎&#xff0c;每一个数据表有三个文件.frm和.MYI和.MYD&#xff0c;分别为表…

深入理解计算机系统 CSAPP 家庭作业7.13

用一下496页提到的工具咯 A: whereis libm.a file lidm.a gedit libm.a libm.a是个ASCII text文件打开一看原来 libm-2.27.a 和libmvec.a才是我们要看的 所以我们cd到目标地址后 ar -t libm-2.27.a ar -t libmvec.a B: gcc -Og bar5.c foo5.c 用之前的两个文件链接后生成…

【CS.DS】数据结构 —— 图:深入了解三种表示方法之邻接表(Adjacency List)

文章目录 1 概念2 无向图的邻接表2.1 示例2.2 Mermaid 图示例2.3 C实现2.3.1 简单实现2.3.2 优化封装 2.4 总结 3 有向图的邻接表3.1 示例3.2 C实现3.3 总结 4 邻接图的遍历5 拓展补充References 数据结构 1 概念 优点&#xff1a;空间效率高&#xff0c;适合稀疏图。动态性强…