Каналы Django + Postgresql: Обмен сообщениями с базами данных в режиме реального времени

В настоящее время я разрабатываю приложение с Django и PostgreSQL. Часто в базу данных отправляется новая информация (иногда один раз в день, иногда более 30000 раз в день). У меня есть пользовательский интерфейс (vue.js), и я хочу, чтобы данные из базы данных показывались клиенту в реальном времени.

В настоящее время я использую Django Channels. Я реализовал websocket и использовал библиотеку psycopg2 для прослушивания уведомлений от триггеров postgresql. Мой потребитель выглядит следующим образом:

class WSConsumer(WebsocketConsumer):
    def connect(self):
        self.accept()
        
        #the whole table is sent to the client after the connection
        self.send(json.dumps(ClientSerializer(Client.objects.all(), many=True).data)) 

        #connecting to database
        conn = psycopg2.connect(dbname='...', user='...') 
        conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
        curs = conn.cursor()
        curs.execute("LISTEN update_clients_table;")

        #then I listen to any new data in this table and send it to the client
        while True:
            if select.select([conn],[],[],5) == ([],[],[]):
                print("Timeout")
            else:
                conn.poll()
                while conn.notifies:
                    notify = conn.notifies.pop(0)
                    print("Got NOTIFY:", notify.pid, notify.channel, notify.payload)
                    message = notify.payload
                    self.send(message)

    def disconnect(self):
        self.close()

Это пример обработки изменений в 1 таблице. Всего у меня 20 таблиц, и около 100 клиентов, которые могут подключиться к websocket.

Мой вопрос: хороший ли это способ создания приложения реального времени с Django и PostgreSQL? Он прост, удобен, безопасен? Есть ли другие способы создания такого приложения?

Заранее спасибо!

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