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가 클라이언트에 무언가를 보내나요 ??). 아니면 내가 틀렸나 요?
그렇다면 이것을 올바르게 처리하는 방법은 무엇입니까?
다만
return ['']
클라이언트에 추가 데이터를 보내지 않고도 WSGI를 완전히 준수하게됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다