我很好奇目前所处的状态如何更好地解决以下问题。
我提出以下架构:
这个想法是通过在一个线程中运行Flask Socket.IO并在另一个线程中进行while循环(可以按需向所有连接的客户端发出信号)来使用多线程执行此任务。
项目
- main.py
- analyze.py
- webapp.py
analyze.py
实际程序每隔几秒钟就会从文件中获取内容,如果更改了内容,它将分析其内容并将结果通过Socket.IO推送到所有客户端。
import webapp
def analyze():
while True:
message_object = analyzeStuff()
webapp.send_message(message_object)
webapp.py
在这里,我们实现了实际的Flask Socket.IO端点。为简单起见,以下是我这一边发生的情况的简短快照:
from flask import Flask
from flask_socketio import SocketIO
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
socket = SocketIO(app)
@socket.on('connect')
def test_connect():
print('Client connected')
pass
@socket.on('disconnect')
def test_disconnect():
print('Client disconnected')
pass
def send_message(data):
socket.emit('message', data)
# print('sending message "{}".'.format(data))
main.py
在主线程中,打开Socket.IO线程,然后运行分析。
我正在使用eventlet.monkey_patch()
(尽管我不确定它的确切作用)是能够从另一个线程而不是Socket.IO服务器的线程调用.emit
。
import analyze
import webapp
import threading
import eventlet
eventlet.monkey_patch()
if __name__ == '__main__':
# Start the server
webapp_thread = threading.Thread(target=run_web_app)
webapp_thread.start()
# Run the Analyze loop
analyze.analyze()
当前状态运行良好,困难,我目前遇到一些问题,无法将其安装到我正在开发的apache2 wsgi-mode服务器中。
即使如此,这看起来也很丑陋,我不能停止思考应该有更好的方法来做到这一点。有什么建议吗?