- 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()
测试:
from sseclient import SSEClient
messages = SSEClient('http://127.0.0.1:8081/stream')
for msg in messages:
print(msg.event,"data")
print([msg.data])
- 前端遇到的问题
前端一直接受不到消息,原因:存在跨域。解决:前端做一个代理,即可打通。