这是我的消费者,我想使用django频道发送相机图像,但总是在最后几次之后关闭,不知道为什么
你能告诉我它是否设置不正确吗?我使用Redis作为通道层
import json
from channels.generic.websocket import AsyncWebsocketConsumer
class ObjectDetectionConsumer(AsyncWebsocketConsumer):
async def connect(self):
self.room_name = self.scope['url_route']['kwargs']['v_name']
self.room_group_name = 'ObjectDetection_%s' % self.room_name
print(self.room_name)
# Join room group
await self.channel_layer.group_add(
self.room_group_name,
self.channel_name
)
await self.accept()
async def disconnect(self, close_code):
# Leave room group
await self.channel_layer.group_discard(
self.room_group_name,
self.channel_name
)
# Receive message from WebSocket
async def receive(self, text_data):
print("receive! ")
# Send message to room group
await self.channel_layer.group_send(
self.room_group_name,
{
'type': 'video_message',
'message': text_data,
}
)
# Receive message from room group
async def video_message(self, event):
# print(1)
message = event['message']
# Send message to WebSocket
await self.send(text_data=json.dumps({
'message': message
}))
这是错误的信息
Exception inside application: Attempt to send on a closed protocol
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\envs\torch113\lib\site-packages\django\contrib\staticfiles\handlers.py", line 101, in __call__
return await self.application(scope, receive, send)
File "C:\ProgramData\Anaconda3\envs\torch113\lib\site-packages\channels\routing.py", line 62, in __call__
return await application(scope, receive, send)
File "C:\ProgramData\Anaconda3\envs\torch113\lib\site-packages\channels\sessions.py", line 47, in __call__
return await self.inner(dict(scope, cookies=cookies), receive, send)
File "C:\ProgramData\Anaconda3\envs\torch113\lib\site-packages\channels\sessions.py", line 263, in __call__
return await self.inner(wrapper.scope, receive, wrapper.send)
File "C:\ProgramData\Anaconda3\envs\torch113\lib\site-packages\channels\auth.py", line 185, in __call__
return await super().__call__(scope, receive, send)
File "C:\ProgramData\Anaconda3\envs\torch113\lib\site-packages\channels\middleware.py", line 24, in __call__
return await self.inner(scope, receive, send)
File "C:\ProgramData\Anaconda3\envs\torch113\lib\site-packages\channels\routing.py", line 116, in __call__
return await application(
File "C:\ProgramData\Anaconda3\envs\torch113\lib\site-packages\channels\consumer.py", line 94, in app
return await consumer(scope, receive, send)
File "C:\ProgramData\Anaconda3\envs\torch113\lib\site-packages\channels\consumer.py", line 58, in __call__
await await_many_dispatch(
File "C:\ProgramData\Anaconda3\envs\torch113\lib\site-packages\channels\utils.py", line 50, in await_many_dispatch
await dispatch(result)
File "C:\ProgramData\Anaconda3\envs\torch113\lib\site-packages\channels\consumer.py", line 73, in dispatch
await handler(message)
File "D:\code\python\django-object-detection\mysite\ObjectDetection\consumers.py", line 42, in video_message
await self.send(text_data=json.dumps({
File "C:\ProgramData\Anaconda3\envs\torch113\lib\site-packages\channels\generic\websocket.py", line 209, in send
await super().send({"type": "websocket.send", "text": text_data})
File "C:\ProgramData\Anaconda3\envs\torch113\lib\site-packages\channels\consumer.py", line 81, in send
await self.base_send(message)
File "C:\ProgramData\Anaconda3\envs\torch113\lib\site-packages\channels\sessions.py", line 226, in send
return await self.real_send(message)
File "C:\ProgramData\Anaconda3\envs\torch113\lib\site-packages\daphne\server.py", line 240, in handle_reply
protocol.handle_reply(message)
File "C:\ProgramData\Anaconda3\envs\torch113\lib\site-packages\daphne\ws_protocol.py", line 202, in handle_reply
self.serverSend(message["text"], False)
File "C:\ProgramData\Anaconda3\envs\torch113\lib\site-packages\daphne\ws_protocol.py", line 256, in serverSend
self.sendMessage(content.encode("utf8"), binary)
File "C:\ProgramData\Anaconda3\envs\torch113\lib\site-packages\autobahn\websocket\protocol.py", line 2275, in sendMessage
raise Disconnected("Attempt to send on a closed protocol")
autobahn.exception.Disconnected: Attempt to send on a closed protocol
WebSocket DISCONNECT /ws/ObjectDetection/wms/ [127.0.0.1:64265]
大约一分钟后,它将自动断开连接。你需要断开连接再重新连接吗?