如何将 flask-socketio 用于 python 没有 http 请求的脚本

How to use flask-socketio for python scripts which do not have http request

我一直在关注 this and this link 在客户端和服务器之间进行通信。我的基本想法是弹出我目前从 app.py(我的烧瓶应用程序)发出的通知。但是,我也有单独的 python 脚本,它们没有 http 请求。我也想从这些脚本向客户端(浏览器)发送通知。所以我正在考虑从我的其他 python 脚本向 app.py 发送消息并从 app.py 发出消息。有没有更好的替代方法来实现这一目标?

I was thinking of sending messages to app.py from my other python scripts and doing emit from app.py

实际上 Flask-SocketIO 就是这样做的。

您必须 运行 一个消息队列,通常是 Redis 或 RabbitMQ,您的服务器和外部脚本可以访问它。然后在您的服务器中,您创建 SocketIO 对象如下:

socketio = SocketIO(app, message_queue='redis://')

并在您的脚本中按如下方式创建它:

socketio = SocketIO(message_queue='redis://')

显然您可以更改消息队列 URL 以匹配您正在使用的内容。

第一个对象是一个完全启用的服务器,它附加到您的 app Flask 实例。第二个是一个只能发出的 "write-only" 对象,因为没有给它附加一个服务器。

当您从外部脚本发出时,脚本会post向消息队列发送一条消息,该消息将被服务器拾取然后执行。