Python pywebio проблема с отображением в реальном времени

в этом коде я хочу сделать чтобы сообщения показывались в реальном времени и не надо было перезагружать страницу каждый раз дабы загрузить сообщения из json, уже всё перепробовал и с WebSocket но ничего не получается, если кто то поможет буду благодарен!

import asyncio 
import json 
from pywebio import start_server 
from pywebio.input import * 
from pywebio.output import * 
 
# Загрузка существующих групп из JSON-файла (если он существует) 
try: 
    with open('groups.json', 'r') as f: 
        chat_msgs = json.load(f) 
except FileNotFoundError: 
    chat_msgs = {} 
 
online_users = set() 
MAX_MESSAGES_COUNT = 100 
 
async def main(): 
    put_markdown("## ? Добро пожаловать в онлайн чат!") 
 
    # Вход в группу или выбор существующей 
    group_names = list(chat_msgs.keys()) 
    group_action = await select("Выберите действие:", options=["Войти в существующую группу"] + ["Создать новую группу"] * (not group_names)) 
 
    if group_action == "Войти в существующую группу": 
        group_name = await select("Выберите группу", options=group_names) 
    else: 
        group_name = await input("Создать новую группу", placeholder="Имя группы", validate=lambda n: "Такая группа уже существует!" if n in chat_msgs else None) 
        chat_msgs[group_name] = []  # Создание новой группы 
 
    msg_box = output() 
    put_scrollable(msg_box, height=300, keep_bottom=True) 
 
    nickname = await input("Войти в чат", required=True, placeholder="Ваше имя", validate=lambda n: "Такой ник уже используется!" if n in online_users else None) 
    online_users.add(nickname) 
 
    if not chat_msgs[group_name]: 
        # Записать название группы по первому сообщению 
        chat_msgs[group_name].append(('?', f'`{nickname}` вошел в группу {group_name}!')) 
 
    msg_box.append(put_markdown(f'? `{nickname}` вошел в группу {group_name}!')) 
 
    # Отображение всей истории переписки из JSON 
    for message in chat_msgs[group_name]: 
        if message[0] != '?':  # Не отображать системные сообщения 
            msg_box.append(put_markdown(f"`{message[0]}`: {message[1]}")) 
 
    async def message_updater(): 
        while True: 
            await asyncio.sleep(1)  # Обновление сообщений каждую секунду 
            new_messages = chat_msgs.get(group_name, []) 
            for i in range(len(msg_box.children), len(new_messages)): 
                message = new_messages[i] 
                if message[0] != '?':  # Не отображать системные сообщения 
                    msg_box.append(put_markdown(f"`{message[0]}`: {message[1]}")) 
 
    asyncio.ensure_future(message_updater()) 
 
    while True: 
        data = await input_group("? Новое сообщение", [ 
            input(placeholder="Текст сообщения ...", name="msg"), 
            actions(name="cmd", buttons=["Отправить", {'label': "Выйти из чата", 'type': 'cancel', 'onclick': 'window.location.reload()'}]) 
        ], validate = lambda m: ('msg', "Введите текст сообщения!") if m["cmd"] == "Отправить" and not m['msg'] else None) 
 
        if data is None: 
            break 
 
        msg_box.append(put_markdown(f"`{nickname}`: {data['msg']}")) 
        chat_msgs[group_name].append((nickname, data['msg'])) 
 
    online_users.remove(nickname) 
    toast("Вы вышли из чата!") 
 
    msg_box.append(put_markdown(f'? Пользователь `{nickname}` покинул группу {group_name}!')) 
    chat_msgs[group_name].append(('?', f'Пользователь `{nickname}` покинул группу {group_name}!')) 
 
    # Сохранение групп в JSON-файл 
    with open('groups.json', 'w') as f: 
        json.dump(chat_msgs, f) 
 
if __name__ == "__main__": 
    start_server(main, debug=True, port=8080, cdn=False)

Ответы (0 шт):