from App import app # 从app模块中导入app应用
from flask_socketio import SocketIO
from threading import Lock, Thread
async_mode = None
socketio = SocketIO(app, async_mode=async_mode)
thread = None
thread_lock = Lock()
# 后台线程 产生数据,即刻推送至前端
def background_thread():
count = 0
while True:
socketio.sleep(2)
count += 1
socketio.emit("server_response", {"data": "Hello", "count": count}, namespace="/test") # 注意:这里不需要客户端连接的上下文,默认 broadcast = True !!!!!!!
# 与前端建立 socket 连接后,启动后台线程
@socketio.on("connect", namespace="/test")
def test_connect():
global thread
with thread_lock:
if thread is None:
thread = socketio.start_background_task(target=background_thread)
#防止被引用后执行,只有在当前模块中才可以使用
if __name__ == "__main__":
# app.debug = True # 设置调试模式,生产模式的时候要关掉debug
# app.run() # 启动服务器
socketio.run(app, debug=True)
这是我的flask,比如我在别的路由的事件方法里面,写一个主动发送socket给前端,我都不知道咋写。这大概是python不太懂的尴尬地方。线程真的是python的命啊。
其实我只是想,在某个路由事件里面,当那个URL被访问,就触发一个socket给前端。让前端知道,喔,有数据进入了,大概这个意思;