flask与vue实现通过websocket通信

news2024/11/17 17:36:00

        在一些情况下,我们需要实现前后端之间的时刻监听,本文是一篇工具文档,用于解决前后端之间使用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 CORS

app = 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,  // 存储当前帧的数据URL
      socket: 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.coloradmin.cn/o/1864402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Topaz Gigapixel AI图片无损放大软件下载安装,Topaz Gigapixel AI 高精度的图片无损放大

Topaz Gigapixel AI无疑是一款革命性的图片无损放大软件&#xff0c;它在图像处理领域开创了一种全新的可能性。 Topaz Gigapixel AI的核心功能在于能够将图片进行高精度的无损放大。虽然经过软件处理的图片严格意义上并不能算是完全无损&#xff0c;但相较于传统方法&#xf…

AI实战案例!如何运用SD完成运营设计海报?玩转Stable Diffusion必知的3大绝技

大家好我是安琪&#xff01; Satble Diffusion 给视觉设计带来了前所未有的可能性和机会&#xff0c;它为设计师提供了更多选择和工具的同时&#xff0c;也改变了设计师的角色和设计流程。然而&#xff0c;设计师与人工智能软件的协作和创新能力仍然是不可或缺的。接下来我将从…

【语言模型】探索AI模型、AI大模型、大模型、大语言模型与大数据模型的关系与协同

一、引言 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;各种AI模型如雨后春笋般涌现&#xff0c;其中AI模型、AI大模型、大模型、大语言模型以及大数据模型等概念在学术界和工业界引起了广泛关注。这些模型不仅各自具有独特的特点和应用场景&#xff0c;…

告别臭脚尴尬!安全鞋除臭秘籍大公开

你是否有过这样的烦恼&#xff0c;忙碌一天回到家&#xff0c;脱鞋的瞬间&#xff0c;那令人窒息的气味让人瞬间清醒&#xff1f;别担心&#xff0c;今天百华小编就与大家一起探讨下安全鞋除臭的秘籍&#xff0c;让你从此告别臭脚尴尬&#xff01; 首先&#xff0c;我们要了解…

PHP 面向对象编程(OOP)入门指南

面向对象编程&#xff08;Object-Oriented Programming&#xff0c;简称OOP&#xff09;是一种编程范式&#xff0c;通过使用对象来设计和组织代码。PHP作为一种广泛使用的服务器端脚本语言&#xff0c;支持面向对象编程。本文将介绍PHP面向对象编程的基本概念和用法&#xff0…

SpringCloud Alibaba Seata2.0分布式事务AT模式实践总结

这里我们划分订单、库存与支付三个module来实践Seata的分布式事务。 依赖版本(jdk17)&#xff1a; <spring.boot.version>3.1.7</spring.boot.version> <spring.cloud.version>2022.0.4</spring.cloud.version> <spring.cloud.alibaba.version>…

美多多商城定义用户模型类遇见的问题

from django.db import models from django.contrib.auth.models import AbstractUser # Create your models here. class User(AbstractUser):mobile models.CharField(max_length11, uniqueTrue,verbose_name手机号)class Meta:db_tabletb_users #自定义表名verbose_name用户…

【动态内存】详解

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

深入浅出 langchain 1. Prompt 与 Model

示例 从代码入手来看原理 from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI prompt ChatPromptTemplate.from_template("tell me a short joke about…

B端页面:日志管理页面,简洁实用的设计法门

B端日志管理是指在企业级后台系统中对系统操作日志进行记录、查看和管理的功能。 它的作用主要有以下几点&#xff1a; 1. 安全审计&#xff1a;通过记录用户的操作日志&#xff0c;可以对系统的安全性进行审计和监控&#xff0c;及时发现异常操作和安全漏洞。 2. 故障排查&a…

Program LLMs,不只是Prompt LLMs

前言 随着大模型的使用和应用越来越频繁&#xff0c;也越来越广泛&#xff0c;大家有没有陷入到无限制的研究、调优自己的prompt。 随之&#xff0c;市面上也出现了提示词工程师&#xff0c;更有专门的提示工程一说。 现在网上搜一搜&#xff0c;有各种各样的写提示词的技巧…

Python多线程技巧心得详解

概要 多线程是一种能够并发执行代码的方法,可以提高程序的执行效率和响应速度。本文将详细介绍 Python 中多线程的概念、使用场景、基本用法以及实际应用,可以更好地掌握多线程编程。 什么是多线程? 多线程是一种在单个进程内并发执行多个线程的技术。每个线程共享相同的内…

电脑CPU速度很快,为什么3dMax还会出现卡顿的情况?

我们在使用3dmax时会经常遇到电脑变得很缓慢甚至卡顿的情况&#xff08;多发生于新手群体&#xff09;&#xff0c;即使我们的电脑CPU已经足够快&#xff0c; 也会出现滞后或性能延迟。包括但不限于 Intel i9 和 AMD“Ryzen Threadrippers”。 例如单击用户界面的任何区域或移…

红酒舞动,运动风采,品味力与美

当夜幕降临&#xff0c;城市的灯火渐次亮起&#xff0c;忙碌了一天的人们开始寻找那份属于自己的宁静与愉悦。在这个时刻&#xff0c;红酒与运动&#xff0c;这两个看似截然不同的元素&#xff0c;却能以它们不同的魅力&#xff0c;为我们带来一场视觉与感官的盛宴。 红酒&…

如何轻松获取 GitLab 指定分支特定路径下的文件夹内容

第一步&#xff1a; 获取 accessToken 及你的 项目 id &#xff1a; 获取 accessToken ,点击用户头像进入setting 按图示操作&#xff0c;第 3 步 填写你发起请求的域名。 获取项目 id , 简单粗暴方案 进入 你项目仓库页面后 直接 源码搜索 project_id&#xff0c; value 就…

ApolloClient GraphQL 与 ReactNative

要在 React Native 应用程序中设置使用 GraphQL 的简单示例&#xff0c;您需要遵循以下步骤&#xff1a; 设置一个 React Native 项目。安装 GraphQL 必要的依赖项。创建一个基本的 GraphQL 服务器&#xff08;或使用公共 GraphQL 端点&#xff09;。从 React Native 应用中的…

零基础STM32单片机编程入门(三)中断详解及按键中断实战含源码视频

文章目录 一.概要二.可嵌套的向量中断控制器 (NVIC)三.中断向量表四.中断优先级详解五.STM32外部中断控制器(EXTI)1.EXTI简介2.EXTI在中断向量表的位置3.EXTI外部中断产生的信号流向4.EXTI中断产生后的中断服务程序 六.CubeMX配置一个GPIO输入中断的例程七.CubeMX工程源代码下载…

Alibaba Cloud Linux详解_操作系统兼容性_alinux稳定性全解析

Alibaba Cloud Linux是阿里云自研的稳定、安全、高性能的服务器Linux操作系统&#xff0c;完全兼容CentOS/RHEL生态和操作方式&#xff0c;又阿里云提供免费提供长期支持和维护LTS。Alibaba Cloud Linux是目前阿里云服务器最大规模使用的操作系统之一&#xff0c;可部署在Web网…

Appium+python自动化(二十六)- 烟花一瞬,昙花一现 -Toast提示(超详解)

简介  今天宏哥在这里首先给小伙伴们和童鞋们分享一个有关昙花的小典故&#xff1a;话说昙花原是一位花神&#xff0c;她每天都开花&#xff0c;四季都灿烂。她还爱上了每天给她浇水除草的年轻人。后来&#xff0c;此事给玉帝得知。于是&#xff0c;玉帝大发雷霆&#xff0c;要…

DHT11

第一个传感----DHT11 通过前面的学习&#xff0c;你已经学会了控制IO口、延时函数、串口的收发。接下来&#xff0c;你就可以借助以上的知识点完成自己的第一个传感器--DHT11啦&#xff01; DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。应用非常广…