gpt4 book ai didi

python - 确保使用 flask-socketio、redis 发送套接字消息

转载 作者:IT王子 更新时间:2023-10-29 06:02:39 28 4
gpt4 key购买 nike

我有一个在多个 pod 上运行的 flask-socketio 服务器,使用 redis 作为消息队列。我想确保从外部进程发出的信号在 100% 的时间内到达目的地,或者知道它们何时失败。

当进程 A 向连接到进程 B 的套接字发出事件时,该事件通过消息队列到达进程 B,到达客户端。有什么办法可以拦截进程 B 上的传出发射?理想情况下,我会在几秒钟后使用工作人员检查消息是否到达客户端(通过客户端发出的确认事件),或者它会再次发出。

此代码在进程 A 上运行:

@app.route('/ex')
def ex_route():
socketio.emit('external', {'text': f'sender: {socket.gethostname()}, welcome!'}, room='some_room')
return jsonify(f'sending message to room "some_room" from {socket.gethostname()}')

这是进程A的输出

INFO:socketio.server:emitting event "external" to some_room [/]
INFO:geventwebsocket.handler:127.0.0.1 - - [2019-01-11 13:33:44] "GET /ex HTTP/1.1" 200 177 0.003196

这是进程B的输出

INFO:engineio.server:9aab2215a0da4816a45e3fdc1e449fce: Sending packet MESSAGE data 2["external",{"text":"sender: *******, welcome!"}]

最佳答案

不幸的是,目前没有机制可以完成您的要求。

我认为您基本上有两种方法可以解决此问题:

  1. 始终从主服务器运行您的发射。如果您需要从辅助进程发出,请使用 IPC 机制通知服务器,以便它可以代表它运行发出。现在您可以使用回调。

  2. 忽略回调,而是让客户端通过发送回服务器来确认收到事件。

顺便说一句,为辅助进程添加回调支持应该不是特别困难。我自己从来不需要该功能,而您是第一个询问它的人。也许我应该在某个时候研究一下。

编辑:经过深思熟虑,我想到了第三个选项:

您可以将外部进程作为客户端连接到服务器,而不是使用“仅发射”选项。如果这个进程是一个客户端,它可以向服务器发出一个事件,然后服务器可以将事件转发给外部客户端。当客户端回复服务器时,服务器可以再次将响应中继到外部进程,外部进程不是另一个客户端并且具有完整的发送和接收能力。

关于python - 确保使用 flask-socketio、redis 发送套接字消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54145899/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com