Files
crm.clientright.ru/AI_DRAWER_SSE_SESSION_LOG.md

4.0 KiB
Raw Blame History

Лог сессии: Реализация SSE + Redis Pub/Sub для AI Drawer

Дата: 11 ноября 2025
Задача: Переход с polling на real-time коммуникацию через SSE и Redis Pub/Sub

Проблема

Изначально использовался механизм polling:

  • n8n отправлял ответ в callback_ai_response.php
  • Ответ сохранялся в БД таблицу ai_responses
  • Frontend периодически опрашивал get_ai_result.php
  • Неэффективно и не real-time

Решение

Реализована архитектура на основе:

  • Server-Sent Events (SSE) для real-time доставки ответов
  • Redis Pub/Sub для передачи сообщений от n8n
  • Redis кэш для fallback механизма

Реализованные компоненты

1. SSE Endpoint (aiassist/ai_sse.php)

  • Подписывается на Redis канал ai:response:{taskId}
  • Отправляет события через SSE
  • Поддерживает plain text и JSON форматы от n8n
  • Кэширует ответы в Redis для надежности
  • Логирование в /logs/ai_sse_debug.log

2. Обновлен n8n_proxy.php

  • Убран callback URL
  • Добавлена передача Redis параметров в n8n:
    • redisChannel
    • redisHost
    • redisPort
    • redisPassword

3. Обновлен ai-drawer-simple.js

  • Заменен startPolling() на startSSEListener()
  • Использует EventSource API для SSE
  • Fallback через checkRedisDirectly() если SSE не работает
  • Обработка событий: connected, response, error, heartbeat

4. Fallback endpoint (aiassist/check_redis_response.php)

  • Прямое чтение из Redis кэша
  • Используется если SSE не подключился или потерял соединение

Настройка n8n

Redis Node Configuration:

  • Operation: Publish
  • Channel: {{ $json.body.redisChannel }} или ai:response:{{ $json.body.taskId }}
  • Data: {{ $json.output }} (можно plain text или JSON)

Рекомендуется:

  1. Сначала выполнить Redis SET в ключ ai:response:cache:{taskId} (TTL 300 сек)
  2. Затем выполнить Redis PUBLISH в канал ai:response:{taskId}

Тестирование

Успешные тесты:

  • Получение plain text ответов от n8n
  • Кэширование в Redis
  • SSE доставка ответов
  • Fallback механизм работает

Логи:

  • Файл: /logs/ai_sse_debug.log
  • Последние успешные запросы:
    • task-691326da57708-1762862810 (15:07:07)
    • task-6913281c9ff7e-1762863132 (15:12:36)

Преимущества новой архитектуры

  1. Real-time: Ответы приходят мгновенно через SSE
  2. Надежность: Fallback через Redis кэш
  3. Гибкость: Поддержка plain text и JSON форматов
  4. Производительность: Нет постоянного polling
  5. Масштабируемость: Redis Pub/Sub поддерживает множество подписчиков

Файлы в репозитории

Новые файлы:

  • aiassist/ai_sse.php
  • aiassist/check_redis_response.php
  • AI_DRAWER_REDIS_SSE.md
  • N8N_REDIS_SETUP.md
  • N8N_REDIS_FIX.md

Измененные файлы:

  • aiassist/n8n_proxy.php
  • layouts/v7/resources/js/ai-drawer-simple.js

Git коммит

1a465329 Реализован SSE + Redis Pub/Sub для AI Drawer

Статус

Работает в продакшене
Все изменения запушены в Git
Документация обновлена