Могу ли я запомнить экземпляр объекта?
Я использую django-channels
и aiortc
, я хочу создать server to peer
соединение как WebRTC
.
В моем случае, если клиент отправляет действие new-peer
, то сервер отправляет предложение.
После того, как клиент получил предложение, клиент отправляет ответ в виде new-answer
действия.
Но сервер не помнит peer
, поэтому не может setRemoteDescription
.
Конечно, я знаю, что сервер не запоминает, но как мне быть в ситуациях, когда серверу нужно запомнить такие экземпляры, как мой?
Я также искал переменные сессии, но кажется, что можно хранить только простые значения, и это, похоже, не имеет никакого отношения к экземпляру.
Пожалуйста, предоставьте полезные документы или решения, связанные с этим.
метод получения:
async def receive(self, text_data):
receive_dict = json.loads(text_data)
message = receive_dict['message']
action = receive_dict['action']
if (action == 'new-peer'):
# Create Offer
peer, offer = await create_offer()
receive_dict['message']['sdp'] = offer
receive_dict['action'] = 'new-offer'
receive_dict['message']['receiver_channel_name'] = self.channel_name
await self.channel_layer.send(
self.channel_name,
{
'type': 'send.sdp',
'receive_dict': receive_dict
}
)
return None
elif (action == 'new-answer'):
await peer.setRemoteDescription(receive_dict['message']['sdp'])
receiver_channel_name = receive_dict['message']['receiver_channel_name']
receive_dict['message']['receiver_channel_name'] = self.channel_name
await self.channel_layer.send(
receiver_channel_name,
{
'type': 'send.sdp',
'receive_dict': receive_dict,
}
)
return None
else:
raise ValueError('Unexpected action value');
функция создания_предложения:
async def create_offer():
pc = RTCPeerConnection(RTCConfiguration(iceServers))
rtsp_video = MediaPlayer(rtsp_test_url)
relay = MediaRelay()
pc.addTrack(relay.subscribe(rtsp_video.video))
@pc.on("connectionstatechange")
async def on_connectionstatechange():
print("Connection state is %s", pc.connectionState)
if pc.connectionState == "failed":
await pc.close()
await pc.setLocalDescription(await pc.createOffer())
return pc, object_to_string(pc.localDescription)
Решено: django session поддерживает сохранение экземпляра в его сессии.