RuntimeError: невозможно выполнить операцию над обработчиком закрыт. Django и Flutter
Я новичок в программировании WebSocket и программировании Dart/Flutter, но не новичок в Django/Python. Этот игрушечный проект является моим самообучением в свободное время
Я беру потрясающий Django boilerplate из отсюда и следую туториалу каналов отсюда
Веб-браузер Chrome может воспроизвести пример. Далее я попробовал Flutter tutorial
Я ожидаю, что пользователь в мобильном телефоне сможет прослушать сообщение и отправить его. Но мой мобильный может только получать сообщения от веб-пользователя.
Проблема: Когда мобильный отправляет сообщение. Django разрывает соединение и выдает эту ошибку в терминале
django | ERROR: closing handshake failed
django | Traceback (most recent call last):
django | File "/usr/local/lib/python3.9/site-packages/websockets/legacy/server.py", line 232, in handler
django | await self.close()
django | File "/usr/local/lib/python3.9/site-packages/websockets/legacy/protocol.py", line 779, in close
django | await asyncio.shield(self.close_connection_task)
django | File "/usr/local/lib/python3.9/site-packages/websockets/legacy/protocol.py", line 1309, in close_connection
django | self.transport.write_eof()
django | File "uvloop/handles/stream.pyx", line 696, in uvloop.loop.UVStream.write_eof
django | File "uvloop/handles/handle.pyx", line 159, in uvloop.loop.UVHandle._ensure_alive
django | RuntimeError: unable to perform operation on <TCPTransport closed=True reading=False 0x55ed26012b80>; the handler is closed
django | ERROR 2021-09-25 11:05:01,093 server 11 140336674826048 closing handshake failed
django | Traceback (most recent call last):
django | File "/usr/local/lib/python3.9/site-packages/websockets/legacy/server.py", line 232, in handler
django | await self.close()
django | File "/usr/local/lib/python3.9/site-packages/websockets/legacy/protocol.py", line 779, in close
django | await asyncio.shield(self.close_connection_task)
django | File "/usr/local/lib/python3.9/site-packages/websockets/legacy/protocol.py", line 1309, in close_connection
django | self.transport.write_eof()
django | File "uvloop/handles/stream.pyx", line 696, in uvloop.loop.UVStream.write_eof
django | File "uvloop/handles/handle.pyx", line 159, in uvloop.loop.UVHandle._ensure_alive
django | RuntimeError: unable to perform operation on <TCPTransport closed=True reading=False 0x55ed26012b80>; the handler is closed
django | INFO: connection closed
Вопрос:
Как решить эту ошибку?
Воспроизведите ошибку:
- checkout
master
from repository docker-compose.yml -f loca.lyml up
- Run the Flutter from
study_websocket
- Webbrowser go to
http://localhost:8000/chat/cat/
. I put hard codecat
in the channel` url - webbrowser send message
- mobile send message. At this point
Мне нужно использовать json.encode()
мою полезную нагрузку перед отправкой в WebSocket
_channel.sink.add(json.encode({'message': _controller.text}))