国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【快速開始】一個簡單的Flask-SocketIO應用,完成后端推送消息接收與關(guān)閉

這篇具有很好參考價值的文章主要介紹了【快速開始】一個簡單的Flask-SocketIO應用,完成后端推送消息接收與關(guān)閉。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

效果圖

先看運行效果圖 OK,下面開始。

安裝環(huán)境

本人使用環(huán)境及版本:
Anaconda:

虛擬環(huán)境:
Python版本:3.8.13
安裝包及版本:
Flask-SocketIO:5.3.4
eventlet:0.33.3

快速開始

后端代碼

創(chuàng)建app.py文件(文件名隨意,不過要與后面的運行腳本中指定的文件保持一致)

import time
from flask import Flask, render_template, jsonify
from flask_socketio import SocketIO

service_state = 0
app = Flask(__name__)
socketio = SocketIO(app, cors_allowed_origins="*")

@app.route("/")
def index():
    return render_template("index.html")

@app.route("/start_service")
def start_service():
    global service_state
    service_state = 0
    while service_state == 0:
        time_text = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(time.time())))
        print(">>>>>>", time_text)
        json_data = {"no": 1, "time": time_text, "msg": "......"}
        socketio.emit("service_msg", json_data)
        socketio.sleep(2)
    return jsonify({"start": True})


@app.route("/stop_service")
def stop_service():
    global service_state
    service_state = 9
    return jsonify({"stop": True})


if __name__ == "__main__":
    socketio.run(app, host="0.0.0.0", port=5200, debug=True, log_output=True)

前端代碼

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8"/>
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
        <title>HCI Application</title>
        <link rel="apple-touch-icon" sizes="76x76" href="{{url_for('static', filename='img/favicon.ico')}}">
        <link rel="icon" type="image/png" href="{{url_for('static', filename='img/favicon.ico')}}">
        <meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, shrink-to-fit=no' name='viewport'/>
        <!-- Font Awesome Icons -->
        <link rel="stylesheet" href="{{url_for('static', filename='fontawesome/css/all.css')}}">
        <!-- Main CSS -->
        <link rel="stylesheet" href="{{url_for('static', filename='css/main.css')}}"/>
        <!-- Animation CSS -->
        <link rel="stylesheet" href="{{url_for('static', filename='css/vendor/aos.css')}}"/>
    </head>
    <body> 
        <!---------- NAVBAR ---------->
        <nav class="navbar navbar-expand-lg navbar-dark bg-purple fixed-top">
            <div class="container-fluid">
                <a class="navbar-brand" href="#"><i class="fas fa-robot mr-2"></i><strong>HCI</strong> Application</a>
                <div class="navbar-collapse collapse" id="navbarColor02">
                    <ul class="navbar-nav ml-auto d-flex align-items-center">
                        <li class="nav-item">
                            <input type="hidden" id="running_state" value="0">
                            <button type="button" 
                                    class="btn btn-block btn-primary btn-round mb-1"
                                    id="btn_running_state"
                                    onclick="run_serivce()">
                                <i class="fas fa-play" id="i_running_state_icon"></i>
                                <b id="b_running_state_text">啟動服務</b>
                            </button>
                        </li>
                    </ul>
                </div>
            </div>
        </nav>
        <!-- End Navbar -->
        <main class="container-fluid">
            <div class="position-relative">
                <div class="container-fluid text-dark mt-5 pt-5">
                    <!-- table -->
                    <table class="table table-left table-hover" id="tbl_log">
                        <thead class="bg-primary text-white">
                            <tr align="left">
                                <th scope="col" style="width:120px;">#</th>
                                <th scope="col" style="width:300px;">Time</th>
                                <th scope="col">消息內(nèi)容</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr align="center" class="text-black">
                                <th scope="row" colspan="3">等待啟動 ...</th>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </div>
        </main>
        <!------------ JAVASCRIPTS ---------------->    
        <script src="{{url_for('static', filename='js/vendor/jquery.min.js')}}" type="text/javascript"></script>
        <script src="{{url_for('static', filename='js/vendor/popper.min.js')}}" type="text/javascript"></script>
        <script src="{{url_for('static', filename='js/vendor/bootstrap.min.js')}}" type="text/javascript"></script>
        <script src="{{url_for('static', filename='js/vendor/share.js')}}" type="text/javascript"></script>
        <script src="{{url_for('static', filename='js/functions.js')}}" type="text/javascript"></script>
        <script src="{{url_for('static', filename='js/vendor/aos.js')}}" type="text/javascript"></script>
        <script src="{{url_for('static', filename='js/socket.io.js')}}" type="text/javascript"></script>
        <noscript>
            <style>
                *[data-aos] {
                    display: block !important;
                    opacity: 1 !important;
                    visibility: visible !important;
                }
            </style>
        </noscript>
        <script>
            AOS.init({
                duration: 700,
                disable: function () {
                    var maxWidth = 1200;
                    return window.innerWidth < maxWidth;
                }
            });

            /*
            開啟服務,獲取分類運行結(jié)果
            */
            var line_number = 1;
            var socket = io();

            // 專門接收后端推送消息
            socket.on('service_msg', function(data) {
                var row = "<tr>" +
                                "<th scope=\"row\">" +  line_number + "</th>" +
                                "<td align=\"left\">" + data.time + "</td>" +
                                "<td align=\"left\">" + data.msg  + "</td>" +
                            "</tr>";                                
                line_number++;
                //添加數(shù)據(jù)到 table 第一行
                $("#tbl_log tbody").prepend(row);
            });
            
            /*
            運行服務,開始接收推送消息
            */
            function run_serivce() {
                $("#btn_running_state").attr("onclick", "pause_service()");
                $("#i_running_state_icon").attr("class", "fas fa-pause");
                $("#b_running_state_text").html("暫停服務");
                var row = "<tr align=\"center\" class=\"text-success\"><th scope=\"row\" colspan=\"3\">啟動成功,開始接收數(shù)據(jù) ...</th></tr>"
                $("#tbl_log tbody").prepend(row);
                $.ajax({
                    type: "get",          // 請求方式
                    url: "start_service", // 請求路徑
                    async: true,          // 異步請求
                    dataType: "json",     // 預期返回一個 json 類型數(shù)據(jù)
                    success: function (data) {   // data是形參名,代表返回的數(shù)據(jù)
                        console.log(data);
                    }
                });
            }

            /*
            暫停服務
            */
            function pause_service() {
                $("#btn_running_state").attr("onclick", "run_serivce()");
                $("#i_running_state_icon").attr("class", "fas fa-play");
                $("#b_running_state_text").html("啟動服務");
                var row = "<tr align=\"center\" class=\"text-secondary\"><th scope=\"row\" colspan=\"3\">服務暫停,等待開啟 ...</th></tr>"
                $("#tbl_log tbody").prepend(row);
                $.ajax({
                    type: "get",          // 請求方式
                    url: "stop_service",  // 請求路徑
                    async: true,          // 異步請求
                    dataType: "json",     // 預期返回一個 json 類型數(shù)據(jù)
                    success: function (data) {   // data是形參名,代表返回的數(shù)據(jù)
                        console.log(data);
                    }
                });
            }
        </script>
    </body>
</html>

運行步驟

cmd 或者 linux控制臺運行即可

python app.py

此時能看到如下圖所示
【快速開始】一個簡單的Flask-SocketIO應用,完成后端推送消息接收與關(guān)閉,技術(shù)筆記,flask,python,后端,推送,消息推送,SocketIO,Flask-SocketIO
此時訪問http://0.0.0.0:5200(0.0.0.0 替換成對應IP或者127.0.0.1或localhost即可看到圖1-3效果)


代碼理解

在python代碼中,首先通過SocketIO封裝flask app

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

通過cors_allowed_origins="*"來指定支持跨域訪問限制問題

另外設(shè)定全局變量service_state = 0用來控制服務運行狀態(tài),從而根據(jù)結(jié)果是否要向前端發(fā)送數(shù)據(jù)。

最后就是在啟動接口/start_service上增加狀態(tài)判斷死循環(huán),只要service_state = 0,就會不斷向前端發(fā)送數(shù)據(jù)(我這加了2秒間歇),具體方法調(diào)用前面定義的socketio變量的emit函數(shù)即可,如下所示:

socketio.emit("service_msg", json_data)

而要停止推送服務的話,那只需要調(diào)用/stop_service改變?nèi)肿兞?code>service_state的值即可。

代碼下載

【GitCode地址:flask_socketio_quickstart】文章來源地址http://www.zghlxwxcb.cn/news/detail-542470.html

到了這里,關(guān)于【快速開始】一個簡單的Flask-SocketIO應用,完成后端推送消息接收與關(guān)閉的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 從零開始學Flask: 3分鐘用Python快速構(gòu)建Web應用

    從零開始學Flask: 3分鐘用Python快速構(gòu)建Web應用

    什么是Flask?Flask 是一個輕量級的 Python Web 應用框架,因其簡單易用、靈活性高等特點,可以幫助開發(fā)者快速構(gòu)建小型應用和個人項目,被廣泛用于開發(fā)各種 Web 應用,包括博客、社交網(wǎng)絡(luò)、電子商務網(wǎng)站等。Flask 框架具有以下優(yōu)點: 簡單易用。Flask 框架的設(shè)計目標是保持簡

    2024年02月15日
    瀏覽(22)
  • html寫一個向flask_socketio發(fā)送消息和接收消息并顯示在頁面上

    以下是一個簡單的HTML頁面,它包含一個輸入框、一個發(fā)送按鈕和一個顯示區(qū)域。用戶可以在輸入框中輸入消息,點擊發(fā)送按鈕,然后這個消息會被發(fā)送到 Flask-SocketIO 服務器。當服務器回應消息時,它會在頁面的顯示區(qū)域顯示出來。 此外,F(xiàn)lask-SocketIO 服務器端代碼可以處理客

    2024年02月11日
    瀏覽(27)
  • 使用flask開啟一個簡單的應用

    使用flask開啟一個簡單的應用

    Flask是非常流行的 Python Web框架,它能如此流行,原因主要有如下幾點: 。有非常齊全的官方文檔,上手非常方便。 。有非常好的擴展機制和第三方擴展環(huán)境,.工作中常見的軟件都會有對應的擴展。自己動手實現(xiàn)擴展也很容易。 。社區(qū)活躍度非常高。 。微框架的形式給開發(fā)者

    2024年02月16日
    瀏覽(22)
  • python創(chuàng)建一個簡單的flask應用

    python創(chuàng)建一個簡單的flask應用

    下面用python在本地和服務器上分別創(chuàng)建一個簡單的flask應用: 1.在pc本地 1)pip flask后創(chuàng)建一個簡單的腳本flask_demo.py win+R進入命令行,切換到flask_demo.py的路徑,執(zhí)行 啟動應用 如果顯示啟動失敗,可能的原因是: 設(shè)置FLASK_APP環(huán)境變量:在命令行中輸入以下命令,將FLASK_APP環(huán)境

    2024年02月05日
    瀏覽(26)
  • 【簡單】使用ChatGPT和QT從零開始構(gòu)建一個計算器應用

    【簡單】使用ChatGPT和QT從零開始構(gòu)建一個計算器應用

    在這篇博文中,我將向大家展示如何使用ChatGPT和Qt來構(gòu)建一個完整的計算器應用。我們將從零開始,逐步引導您完成整個項目,包括需求分析、軟件設(shè)計、代碼編寫等環(huán)節(jié)。該項目代碼全部由GPT編寫,10分鐘完成。 本項目旨在使用ChatGPT和Qt技術(shù)構(gòu)建一個功能完備的計算器應用。

    2024年02月11日
    瀏覽(26)
  • Websocket 之flask_socketio和Python socketio

    前端 后端 前端 后端 client server client Flask server 版本問題參考:https://blog.csdn.net/weixin_44986037/article/details/131504760

    2024年02月12日
    瀏覽(24)
  • Flask SocketIO 實現(xiàn)動態(tài)繪圖

    Flask SocketIO 實現(xiàn)動態(tài)繪圖

    Flask-SocketIO 是基于 Flask 的一個擴展,用于簡化在 Flask 應用中集成 WebSocket 功能。WebSocket 是一種在客戶端和服務器之間實現(xiàn)實時雙向通信的協(xié)議,常用于實現(xiàn)實時性要求較高的應用,如聊天應用、實時通知等,使得開發(fā)者可以更輕松地構(gòu)建實時性要求較高的應用。通過定義事

    2024年02月05日
    瀏覽(28)
  • flask socketio 實時傳值至html上【需補充實例】

    跨域問題網(wǎng)上的普通方法無法解決。 參考這篇文章解決 Flask教程(十九)SocketIO - 迷途小書童的Note迷途小書童的Note (xugaoxiang.com) 如果用了eventlet,在while true中,emit數(shù)據(jù)不在前端web頁面顯示,可參考這篇文章的解決方案,加定時器。 javascript - Flask-websocket Emit主動發(fā)送消息失敗

    2024年02月07日
    瀏覽(27)
  • flask框架-[實現(xiàn)websocket]:將socketio處理函數(shù)部分集中管理,使用類的方式來管理,集中管理socketio處理函數(shù)

    注意:在flask2.x版本依賴,不再支持flask_script了 flask2.x版本會自動注冊 flask run 和flask db 兩個命令行命令 1、啟動項目 flask run --host 0.0.0.0 --port 9000 2、數(shù)據(jù)庫遷移命令 flask db init flask db migrate flask db upgrade apps ????????__init__.py? : 創(chuàng)建app應用,各種注冊 ??????? websocket ??

    2024年02月07日
    瀏覽(27)
  • 通過ChatGPT實現(xiàn)的ChatPDF,簡單的應用落地,讓你的文檔變成一個智能助手,通過對話的方式快速學習文檔內(nèi)容

    通過ChatGPT實現(xiàn)的ChatPDF,簡單的應用落地,讓你的文檔變成一個智能助手,通過對話的方式快速學習文檔內(nèi)容

    目錄 先看效果 實現(xiàn)原理 環(huán)境安裝 應用場景 首先,找到一篇論文先,我這里隨便找了一篇pdf格式的論文 那么,我現(xiàn)在讓他擔任一個研究論文的智能助手,當然大家可以自定義自己的prompt ?開始問答 可以看到效果很強 提取 pdf 文本,以便后續(xù)處理。 由于 OpenAI API 對 Token 數(shù)量

    2023年04月08日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包