Каналы 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? Он прост, удобен, безопасен? Есть ли другие способы создания такого приложения?
Заранее спасибо!