LINUX.ORG.RU

django + websocket + pagination

 , , , ,


0

2

Почему хендлер chat_message выполняется только после того, как отработал весь цикл for x in range(0, 10) ? Мне надо, чтобы хендлер отрабатывал сразу после self.channel_layer.group_send(). Как этого добиться?

from channels.generic.websocket import AsyncWebsocketConsumer
import json
from apps.cryptodata.models import Ethereum
from django.core import serializers
import time
import asyncio


class ChatConsumer(AsyncWebsocketConsumer):

    async def connect(self):
        self.room_name = self.scope['url_route']['kwargs']['room_name']
        self.room_group_name = 'chat_%s' % 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):
        text_data_json = json.loads(text_data)
        message = text_data_json['message']
        
        for x in range(0, 10):
            await self.channel_layer.group_send(
                self.room_group_name,
                {
                    'type': 'chat_message',
                    'message': serializers.serialize("json", Some.objects.all()[0:10])
                }
            )
            await asyncio.sleep(20)
    
    # Receive message from room group
    async def chat_message(self, event):
        message = event['message']

        # Send message to WebSocket
        await self.send(text_data=json.dumps({
            'message': message
        }))