Задать вопрос
  • Xray Core, можно ли как-то сделать hot reload?

    @Artemkaa_2001 Автор вопроса
    Я реализовал систему Hot Reload для XRay, которая позволяет добавлять и удалять пользователей без рестарта сервиса и без потери активных подключений. XRay изначально поддерживает API, через которое можно обновлять клиентов и правила маршрутизации в реальном времени. Обычно при изменении конфига XRay требуется перезапуск, из-за чего возникает короткий даунтайм. Здесь всё сделано так, что изменения применяются сразу, без остановки сервиса.

    Добавлением пользователей управляет отдельный скрипт, который распределяет их между группами по принципу баланса нагрузки — он выбирает ту группу, где меньше клиентов, и добавляет туда нового. Скрипт обновляет общий JSON-файл с актуальным состоянием, в котором хранится информация о всех пользователях и группах.

    После обновления данных генерируются два JSON-файла: первый содержит объект клиента с нужными inbound-настройками, второй — полный блок routing с обновлёнными правилами. Эти файлы отправляются напрямую в XRay через его API. Сначала обновляются правила (adrules), затем добавляется сам клиент (adu). XRay применяет изменения мгновенно, без перезапуска и без обрыва текущих подключений.

    Важно, что при обновлении правил в XRay нужно передавать весь список routing-rules из конфига, а не только изменённую группу — так XRay не теряет остальные маршруты. В результате новая конфигурация подхватывается «на лету»: клиент сразу может подключаться, все старые остаются онлайн, а система балансирует группы автоматически. Это полностью рабочий Hot Reload для XRay, при котором не требуется перезапуск даже при большом числе пользователей.

    А в случае перезагрузки Xray, он просто подхватывает всех из config json и всё :)
    Ответ написан
    Комментировать
  • Pycharm создание бота в телеграм?

    @Artemkaa_2001
    А почему ты не хочешь это реализовать без next_step_handler?

    Можно создать отдельный декоратор на текст
    А в нем уже делать проверки if elif, и все гарантировано будет работать !
    @bot.message_handler(content_types=[“text”])
    def on_click(message)
        if True:
            pass
        elif False:
            pass
    Ответ написан
    Комментировать