Flask-Socketio 从外部进程发出

问题描述 投票:0回答:2

我一直在使用 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 进行的操作。这让我认为消息队列实际上并未被使用,但我不能确定。

python flask redis flask-socketio
2个回答
1
投票

不幸的是,问题在于将

message_queue
拼写为
message_que
。 现在可以在没有应用程序的情况下创建新的 SocketIO 实例。


0
投票

请您分享您的工作代码吗? 外部流程如何运行? 我使用 APScheduler 来运行我的程序,尽管 SocketIO.emit 位于 redis 队列中,但并不总是发送到客户端。不明白为什么。

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.