假设我使用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
修复了错误,但看起来像是一个讨厌的黑客。除此之外我可能还没有发现一些副作用(uWSGI是否会向客户端发送内容?)。或者我错了吗?
那么如何妥善处理?
答案 0 :(得分:2)
只是
return ['']
并且您将完全符合WSGI,而无需向客户端发送其他数据