【问题标题】:How to use flask-socketio for python scripts which do not have http request如何将flask-socketio用于没有http请求的python脚本
【发布时间】:2017-06-25 23:46:49
【问题描述】:

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

【问题讨论】:

    标签: python flask socket.io flask-socketio


    【解决方案1】:

    我正在考虑从我的其他 python 脚本向 app.py 发送消息并从 app.py 发出消息

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

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

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

    在您的脚本中,您可以按如下方式创建它:

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

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

    第一个对象是一个完全启用的服务器,它附加到您的app Flask 实例。第二个是只能发出的“只写”对象,因为它没有被赋予附加的服务器)。

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

    【讨论】:

    • 如何访问消息队列中的数据?
    • 您不必这样做,Flask-SocketIO 会为您处理队列中的写入和读取。
    • 但它会写入一个数据两次,有时甚至是四次。所以我想检查 Flask-SocketIO 是否两次(四次)写入/读取数据,或者消息队列实际上有两次数据。这就是为什么我要访问消息队列中的数据。有什么方法可以检查吗?
    • 这是一个名为flask-socketio 的常规发布-订阅频道。您可以订阅以查看队列中发生了什么,或使用任何 Redis 监控工具。
    • 好的。谢谢你的主意。我可以在订阅 pub-sub 频道后看到数据。但是在浏览器上显示数据后,一旦我们重新加载浏览器,它就消失了。这是我主要关心的问题。有没有办法将数据临时存储在某个地方,以便即使在我重新加载网页后也可以将其显示回来?
    猜你喜欢
    • 1970-01-01
    • 2019-07-24
    • 2011-08-30
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    相关资源
    最近更新 更多