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

Вопрос:
Как решить эту ошибку?

Воспроизведите ошибку:

  1. checkout master from repository
  2. docker-compose.yml -f loca.lyml up
  3. Run the Flutter from study_websocket
  4. Webbrowser go to http://localhost:8000/chat/cat/. I put hard code cat in the channel` url
  5. webbrowser send message
  6. mobile send message. At this point

Мне нужно использовать json.encode() мою полезную нагрузку перед отправкой в WebSocket

_channel.sink.add(json.encode({'message': _controller.text}))

Вернуться на верх