前端+后端python双向通信

前端+后端python双向通信


目的

在前后端分离的基础上(不用flask的模板渲染),用后端的flaskio和前端的socketio实现双向通信。

代码

后端python代码,用的是3.7

# -*-encoding: utf-8-*-
# pip install flask-socketio
from flask import Flask
from flask_cors import *
from flask_socketio import SocketIO

app = Flask(__name__)
CORS(app, supports_credentials=True)
socketio = SocketIO()
socketio.init_app(app, cors_allowed_origins='*')

name_space = '/dcenter'  # socketio 的命名空间


@app.route('/')
def index():
    print()
    return "aasdlkfjasldkjf"


# 注册一个 my_event事件,响应前端发来的 my_event 事件的信息
@socketio.on('my_event', namespace=name_space)
def mtest_message(data):
    print(data)
    # 发送一个 事件名称是 dcenter1 的信息给前端
    event_name = 'dcenter1'
    broadcasted_data = {"type": "delete", "user_id": "123", "data": "1111111111111"}
    socketio.emit(event_name, broadcasted_data, broadcast=False, namespace=name_space)


# 下面注册 连接/断开/消息 三个默认事件
@socketio.on('connect', namespace=name_space)
def connected_msg():
    print('client connected.')


@socketio.on('disconnect', namespace=name_space)
def disconnect_msg():
    print('client disconnected.')


@socketio.on("message", namespace=name_space)
def message(data):
    print("message")


if __name__ == '__main__':
    # app.run(host='0.0.0.0', port=5000, debug=True)
    socketio.run(app, host='127.0.0.1', port=5000, debug=True)

前端代码

引入到了一个js库,在webstome里可以直接抓下载到

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title></title>

</head>

<body>
<h2>Demo of SocketIO</h2>
<button id="btn1" type="button">点击发送信息</button>
<br>
<p id="t1">接收dcenter事件信息</p>
<p id="t2"></p>
<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/3.1.3/socket.io.js"></script>-->
<script src="js/http_cdnjs.cloudflare.com_ajax_libs_socket.io_3.1.3_socket.io.js"></script>
<script type="text/javascript">
    function $(queryStr) {
        return document.querySelector(queryStr);
    }

    window.onload = function () {
        // let namespace = '/dcenter';
        // let socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port + namespace);
        let socket = io.connect(`http://127.0.0.1:5000/dcenter`);
        console.log(io);
        // let socket = io.connect(namespace)
        // 注册一个dcenter 事件(后端发送信息时要添加dcenter事件名称),等待前端发送信息
        socket.on('dcenter1', function (res) {
            let t = JSON.stringify(res);
            if (t) {
                console.log("接收到了信息,", t)
            }
        });

        // socket.io 固有事件:连接成功后执行该函数。
        socket.on('connect', function () {
            console.log('connect')
        });
        // socket.io 固有事件:连接错误触发事件处理器。
        socket.on('connect_error', (error) => {
            console.log("链接错误")
        });
        // socket.io 固有事件:丢失连接时触发时间处理器
        socket.on('disconnect', (timeout) => {
            console.log('链接丢失')
            socket.close();  // 关闭连接
        });
        // 点击按钮发送一个my_event的消息,后端会接收,然后后端会发送一个dcenter1 信息
        $("#btn1").addEventListener("click", function () {
            socket.emit('my_event', {'hello': "世界!"});
        });
    }
</script>
</body>

</html>

结尾:

参考博客然后修修改改终于成功运行

https://blog.csdn.net/qq_38463737/article/details/126678480

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 牙叔教程 简单易学 使用场景 socketIO socketIO SocketIO是在客户端和服务端之间建立的双向...
    牙叔教程阅读 5,161评论 0 2
  • 1、谈谈对http协议的认识流程:1.域名解析域名解析检查顺序为:浏览器自身DNS缓存---》OS自身的DNS缓存...
    Zzmi阅读 4,210评论 0 0
  • 基础强化 聊一聊前端存储。(1)老朋友cookie(2)短暂的sessionStorage(3)简易强大的loca...
    蓝海00阅读 5,738评论 0 34
  • 请你描述一下 cookies,sessionStorage 和 localStorage 的区别? session...
    阿踏阅读 3,012评论 0 0
  • 前言 随着时代的发展,网络通信已经成为人们日常生活中不可或缺的一部分。在5G时代背景下,传统的网络通信已经不能满足...
    维李设论阅读 3,003评论 0 0

友情链接更多精彩内容