gpt4 book ai didi

python - 与 uwsgi 和 websockets 紧密联系

转载 作者:行者123 更新时间:2023-11-28 17:40:49 26 4
gpt4 key购买 nike

假设我有一个带有 uWSGI 的基本 WebSocket 应用程序:

def application(env, res):
uwsgi.websocket_handshake(env["HTTP_SEC_WEBSOCKET_KEY"], env.get("HTTP_ORIGIN", ""))
while True:
msg = uwsgi.websocket_recv()
uwsgi.websocket_send("OK: " + msg)

如何优雅地关闭客户端?例如当我做的时候

def application(env, res):
uwsgi.websocket_handshake(env["HTTP_SEC_WEBSOCKET_KEY"], env.get("HTTP_ORIGIN", ""))
while True:
msg = uwsgi.websocket_recv()
if msg == "exit":
break
uwsgi.websocket_send("OK: " + msg)

这似乎有效,但是我收到了

TypeError: 'NoneType' object is not iterable

在 uWSGI 中这是可以理解的,因为它试图迭代 application(...) 就像它在 HTTP 上一样(兼容性??)。为避免这种情况,我在末尾添加了 yield None:

def application(env, res):
uwsgi.websocket_handshake(env["HTTP_SEC_WEBSOCKET_KEY"], env.get("HTTP_ORIGIN", ""))
while True:
msg = uwsgi.websocket_recv()
if msg == "exit":
break
uwsgi.websocket_send("OK: " + msg)
yield None

它修复了错误,但看起来像是一个讨厌的 hack。此外可能还有一些我不知道的副作用(uWSGI 是否会向客户端发送一些东西??)。还是我错了?

那么如何正确处理呢?

最佳答案

只是

return ['']

并且您将完全符合 WSGI,而无需向客户端发送额外的数据

关于python - 与 uwsgi 和 websockets 紧密联系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24613520/

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