#create_app.py
from flask import Flask,current_app
from models.model import db
from flask_cors import CORS
from socketio_app import socketio
from utils.web_scoket.index import index_blue
from views.view import blue1
def create_app(config):
flask_app = Flask(__name__, template_folder = './template')
# 加载配置文件
flask_app.config.from_object(config)
#web_scoret
#将 Flask-SocketIO 添加到 Flask 应用程序:
# 初始化db
db.init_app(flask_app)
# 跨域
cors = CORS(flask_app)
# TODO 注册蓝图
flask_app.register_blueprint(index_blue)
flask_app.register_blueprint(blue1)
socketio.init_app(flask_app)
return flask_app, socketio
scoketio_app.py
from flask_socketio import SocketIO
socketio = SocketIO()
app.py启动文件
from create_app import create_app
import eventlet
from settings.config import DevConfig, DefaultConfig
import os
app, socketio = create_app(DevConfig)
if __name__ == '__main__':
# os.system("C:\Users\86151\Desktop\learn\\flask-10\windows.bat")
# app.run(host='0.0.0.0', debug=True)
# app.run(debug=True)
# from gevent import monkey
# monkey.patch_all()
socketio.run(app, debug=True)
index.html 前端代码,必须与前端代码结合使用
Title
kafka_main.py
#生产者
from kafka import KafkaProducer,TopicPartition
create_er = KafkaProducer(bootstrap_servers=['localhost:9092'])
#消费者
from kafka import KafkaConsumer
del_er = KafkaConsumer(bootstrap_servers=['localhost:9092'],group_id="组1")
#添加一个topic 和 一个分区
tp = TopicPartition("test", 0)
del_er.assign([tp]) #手动管理这个分区
task.py 与前端代码链接的页面
from flask_socketio import send, emit
from setting_kafka.kafka_main import create_er, del_er, tp
from socketio_app import socketio
background = False
# 链接接口
@socketio.on('connect')
def test_connect():
emit("message", {"data": "链接成功"})
global background
if not background: #为了开一个后台任务
#socketio,就是为了使用一个scoketio
socketio.start_background_task(send4thread,socketio) # 创建一个后台任务
background = True
# 断开链接
@socketio.on('disconnect')
def test_disconnect():
print('斷開了')
# 取数据
#sk就是socketio,开后台传的
def send4thread(sk):
while 1:
get2kafka(sk)
sk.sleep(1)
def get2kafka(sk):
# off_set_dict = del_er.end_offsets([tp])
# latest_offset = list(off_set_dict.values())[0] # 这是最新的offset
# offset = del_er.committed(tp)
# print(latest_offset , offset)
# while latest_offset > offset:
look = del_er.poll()#取出所有的数据
for data in look.get(tp,[]):
sk.emit("234", "12345")
# 存入数据
def get_newdata(uid, type):
for i in range(30):
# 存入只能存字节类型的,这里kafka存数据
create_er.send(topic="test", value="kafka存的数据".encode('utf-8'))
def get_comm():
for i in del_er:
yield i
view.py文件
#展示webscoket页面
@blue1.route("/show_html")
def show_html():
return render_template("index2.html")
#给kafka增加数据的接口
@blue1.route('/send_email',methods=['POST'])
@parser()
def send_email(formdata):
# email = EmailUtil(from_addr=formdata['my_qq'],password=formdata['pwd'],to_addr=formdata['to_qq'])
# email.send_email(title=formdata['title'],content=formdata['content'])
user_info = User.query.filter(User.account == formdata['to_qq']).first()
uid= user_info.id
get_newdata(uid=str(uid),type="这是一封邮件")
return jsonify({
"code":200,
"msg":"发送邮件成功"
})