我做了一个目标检测的程序,
- 发送端一直检测摄像头的图形,使用websocket 发送检测完成的图像和结果给 django channel
- django channel 作为 后端 把接收到的结果 用consumer 给前端页面
- 前端页面 在 body 的onload 中 使用js 处理传过来的数据并显示在 img 中
前端核心代码如下:
var ws = new WebSocket(websocket_url);
ws.onmessage = function (evt)
{ // 处理逻辑 }
https://github.com/django/channels/issues/1981
比较迷惑,而且异常全都是 autobahn.exception.Disconnected
在consumer 中的code 如下:
try:
await super().send(json_text_data)
except autobahn.exception.Disconnected:
await self.disconnect()
await self.close()
使用的是django channel 4.0 ,发现如果是只用self.close() 是下面的报错,一段时间后还要清除 channel_layer 中的东西应该是
Application instance <Task pending name='Task-2388' coro=<ASGIStaticFilesHandler.__call__() running at C:\Users\wyaning.conda\envs\qalab\lib\site-packages\django\contrib\staticfiles\handlers.py:101> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x0000027CDCB1B5B0>()]>> for connection <WebSocketProtocol client=['10.167.118.211', 58719] path=b'/ws/ObjectDetection/ObjectDetection0/'> took too long to shut down and was killed.
如果是先用disconnect 那么就是程序发送端也就断了,需要10秒左右重新建立链接,很头大。
报错如下: