python kafka与flask_socketio的使用

#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":"发送邮件成功"
    })

你可能感兴趣的:(flask,python,后端,kafka,flask_scoketio)