当前位置:   article > 正文

flask流式输出-SSE服务_flask sse

flask sse

一、定义

  1. flask demo
  2. 前端遇到的问题

二、实现

  1. flask demo
from gevent import monkey
monkey.patch_all()         #并行
import time
from flask import Response, stream_with_context
from flask import Flask
from gevent.pywsgi import WSGIServer
from flask import request
app=Flask(__name__)
from flask_cors import CORS
CORS(app)            #解决跨域问题


def predict():
    chatbot=[""]
    mid='''
    一、引言\n1. 背景介绍\n2. 研究意义\n\n二、多旋翼无人机概述\n
                                      1. 多旋翼无人机的定义\n2. 多旋翼无人机的特点\n3. 多旋翼无人机的基本结构\n\n
                                      三、多旋翼无人机控制方法\n1. 手动控制\n2. 遥控控制\n3. 自主控制\n\n
                                      四、多旋翼无人机调度方法\n1. 手动调度\n2. 遥控调度\n3. 自主调度\n\n
                                      五、多旋翼无人机应用实例\n1. 农业领域\n2. 航拍领域\n3. 搜索救援\n
                                      4. 其他应用领域\n\n六、多旋翼无人机的安全问题\n1. 飞行安全隐患\n
                                      2. 数据隐私问题\n3. 人机交互问题\n\n七、结论\n1. 研究总结\n2. 研究局限\n3. 研究展望
    '''
    s=""
    for response in mid:
        s+=response
        yield [s], []

import json



@app.route('/stream',methods=["GET","POST"])
def stream():
    kwargs = request.get_data(as_text=True)
    @stream_with_context
    def generate():
        data_stream = predict()
        for data in data_stream:
            print(data)
            time.sleep(0.1)
            yield str("data:") + str(data) + "\n\n"       #必须保证 前面是“data:”      后面是“\n\n”

    headers = {
        'Content-Type': 'text/event-stream',
        'Cache-Control': 'no-cache',
        'X-Accel-Buffering': 'no',
        "Access-Control-Allow-Origin":"*",
        "Access-Control-Allow-Methods":"GET,POST",
        "Access-Control-Allow-Headers":"x-requested-with,content-type"
    }
    return Response(generate(),mimetype="text/event-stream",headers=headers)    #类型event-stream
if __name__ == '__main__':
    http_server = WSGIServer(('0.0.0.0', int(8081)), app)
    http_server.serve_forever()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

测试

from sseclient import SSEClient
messages = SSEClient('http://127.0.0.1:8081/stream')
for msg in messages:
    print(msg.event,"data")
    print([msg.data])
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 前端遇到的问题
    前端一直接受不到消息,原因:存在跨域。解决:前端做一个代理,即可打通。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/880281
推荐阅读
相关标签
  

闽ICP备14008679号