Могу ли я запомнить экземпляр объекта?

Я использую 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 поддерживает сохранение экземпляра в его сессии.

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