当前位置:首页>python>websocket应用(基于python+flask+socket.io实现)

websocket应用(基于python+flask+socket.io实现)

  • 2026-10-20 05:22:29
websocket应用(基于python+flask+socket.io实现)
socket.io就是基于websocket封装的一个库,主要特点是能够进行实时的双向通讯。本文flask_socketio是作为 Flask 扩展的 Socket.IO 服务器端协议的实现

前期准备

  • 由于使用python的flask框架,所以需要python环境以及flask、flask_socketio库

pip install flask flask_socketio
  • 前端Socket.IO

npm install socket.io-client

服务端

from flask import Flask# 引入跨域设置from flask_cors import CORS# 引入socketiofrom flask_socketio import SocketIOfrom flask_socketio import send, emit# 实例化appapp = Flask(__name__)# 设置跨域CORS(app)# 设置socketsocketio = SocketIO(app, cors_allowed_origins='*')@socketio.on('hello')def hello(str):    print("接收到的数据为->", str)    emit('respond', f'服务器:我收到了{str}')@socketio.on('connect', namespace='/')def connected():    print('Client connect')    emit('response', {'data': 'Connected'})@socketio.on('disconnect', namespace='/')def disconnected():    print('Client disconnected')# 运行主程序if __name__ == '__main__':    # app.run()    socketio.run(app)

客户端

自定义hooks

// webscoket.tsimport { ref, onMounted, onUnmounted } from "vue";import { io, Socket } from "socket.io-client";export default function useSocket(url: string) {  const socket = ref<Socket>();  onMounted(() => {    socket.value = io(url,{      reconnectionAttempts: 5 	// 设置最大重连次数为2    });    socket.value.on("connect", () => {      console.log("connect success");    });    socket.value.on("disconnect", () => {      console.log("disconnected from server");    });    // 监听服务器respond返回    socket.value.on("respond", data => {      console.log(data);      // 如果数据等于10,客户端发送关闭连接请求      if (data === 10) {        socket.value?.disconnect();      }    });  });  onUnmounted(() => {    if (socket.value) {      socket.value.disconnect();    }  });  return { socket };}

使用hooks连接服务器

<template>  <el-buttontype="primary"size="default" @click="sendHello">问候服务器</el-button></template><scriptsetuplang="ts">import useSocket from "@/componse/webscoket";const { socket } = useSocket("http://127.0.0.1:5000");const sendHello = () => {  socket.value?.emit("hello", "你好服务器");};</script>

最新文章

随机文章