我一直在使用 Flask、flask-socketio 和 redis 开发一个项目
我有一个服务器,以及一些我希望能够从服务器文件外部发出的模块。
服务器.py
from flask import Flask, Response, request, json
from flask_socketio import SocketIO, join_room, leave_room, emit
app = Flask(__name__)
socketio = SocketIO()
socketio.init_app(
app,
cors_allowed_origins="*",
message_que="redis://127.0.0.1:6379/0"
)
@socketio.on('ready')
def ready(data):
socketio.emit('rollCall', { 'message': 'Ive got work for you' }, room='Ready')
...
jobque.py
from modules.server.server import socketio
...
socketio.emit('rollCall', { 'message': 'Ive got work for you' }, room='Ready')
按照当前配置,从服务器文件发出所有工作,客户端响应,并且可以来回交谈。但是当
jobque
发出相同的消息时,什么也没有发生。没有错误,客户端也听不到。
除了 websockets 之外,我还使用 redis 来处理其他事情,我可以在两个文件中毫无问题地从中获取和设置。
我需要做什么才能让这个外部进程发出?我查看了
flask-socketio
文档,这正是他们的设置方式。
我还尝试在
jobque.py
中创建一个新的SocketIO对象,而不是从服务器导入该对象,但结果是相同的
socket = SocketIO(message_queue="redis://127.0.0.1:6379/0")
socketio.emit('rollCall', { 'message': 'Ive got work for you' }, room='Ready')
我还检查了是否可以使用
redis-cli > MONITOR
通过消息队列设置查看 Redis 中的 Websocket 流量,但我没有看到任何内容。我只看到我直接通过 redis 模块使用 redis 进行的操作。这让我认为消息队列实际上并未被使用,但我不能确定。
不幸的是,问题在于将
message_queue
拼写为 message_que
。
现在可以在没有应用程序的情况下创建新的 SocketIO 实例。
请您分享您的工作代码吗? 外部流程如何运行? 我使用 APScheduler 来运行我的程序,尽管 SocketIO.emit 位于 redis 队列中,但并不总是发送到客户端。不明白为什么。
谢谢