Corp/docs/diagnostic/WEBSOCKET_FIX.md

5.8 KiB
Raw Blame History

🔧 Исправление WebSocket ошибки: "❌ WebSocket error: {}"

Проблема

При открытии чата в браузере видна ошибка:

❌ WebSocket error: {}

Причины

WebSocket ошибка {} обычно связана с одной из этих проблем:

Причина Решение
Backend запущен через runserver Используйте Daphne для WebSocket
PORT 9000 занят Проверьте процессы или используйте другой порт
Неправильный URL в .env Убедитесь что используется .env.local
JWT токен не сохранен Выполните вход в систему
Frontend и Backend на разных версиях Синхронизируйте код

✅ Пошаговое решение

Шаг 1: Остановите текущий backend

# Если backend запущен, нажмите Ctrl+C в терминале

Шаг 2: Запустите backend через Daphne

cd backend
.venv/Scripts/daphne -b 0.0.0.0 -p 9000 eusrr_backend.asgi:application

Ожидаемый вывод:

Starting server process [PID]
HTTP/2 support not enabled
Uvicorn running on http://0.0.0.0:9000

Шаг 3: Убедитесь что .env.local правильный

Проверьте файл frontend/.env.local:

# ✅ ПРАВИЛЬНО (для локальной разработки)
NEXT_PUBLIC_WS_URL=ws://localhost:9000
NEXT_PUBLIC_BACKEND_URL=http://localhost:9000

НЕ используйте:

# ❌ НЕПРАВИЛЬНО (production URL)
NEXT_PUBLIC_WS_URL=wss://corp.robotail.pro

Шаг 4: Перезагрузите фронтенд

cd frontend
npm run dev

Перезагрузите браузер: Ctrl+R или F5

Шаг 5: Проверьте WebSocket подключение

Откройте DevTools (F12) → Console окно и ищите:

✅ Если видите:

🔄 Подключение к WebSocket: ws://localhost:9000/ws/?token=...
✅ WebSocket connected!

→ Всё работает!

❌ Если видите ошибку:

❌ WebSocket error: {}

→ Продолжайте с Шага 6

Шаг 6: Проверьте порт 9000

Проверьте что процесс слушает на порту 9000:

Windows - PowerShell (администратор):

# Проверить какие процессы используют порт 9000
netstat -ano | findstr :9000

# Пример вывода:
# TCP  0.0.0.0:9000  0.0.0.0:0  LISTENING  28904

# Если что-то там слушает, проверьте что это Daphne
tasklist | findstr 28904

Если порт занят другим процессом:

# Убить процесс в PowerShell
taskkill /PID 28904 /F

# Или используйте другой порт
.venv/Scripts/daphne -b 0.0.0.0 -p 9001 eusrr_backend.asgi:application

# И обновите .env.local
NEXT_PUBLIC_WS_URL=ws://localhost:9001

Шаг 7: Проверьте Network в DevTools

  1. Откройте DevTools → Network вкладка
  2. В фильтре напишите: ws
  3. Откройте чат и ищите подключение ws://localhost:9000/ws/

✅ Если видите:

ws   Status: 101 Switching Protocols  [WebSocket connected]

❌ Если видите:

ws   Status: Failed  [или ConnectError]

→ Backend неправильно запущен

🔄 Полный скрипт для переустановки

# 1. Перейдите в backend
cd backend

# 2. Установите dependencies если нужно
.venv/Scripts/pip install -r requirements.txt

# 3. Запустите Daphne
.venv/Scripts/daphne -b 0.0.0.0 -p 9000 eusrr_backend.asgi:application

# В другом терминале:

# 4. Перейдите в frontend
cd frontend

# 5. Установите если нужно
npm install

# 6. Запустите dev server
npm run dev

# 7. Откройте браузер на http://localhost:5173

📋 Чек-лист для диагностики

  • Backend запущен через Daphne (не runserver)
  • PORT 9000 свободен и доступен
  • .env.local использует ws://localhost:9000
  • JWT токен сохранен в localStorage (пользователь залогирован)
  • Frontend запущен на http://localhost:5173
  • В DevTools → Console видно 🔄 Подключение к WebSocket
  • В DevTools → Network видно WebSocket с статусом 101

🚨 Если ничего не помогает

  1. Очистите cache браузера

    • F12 → Application → Clear Site Data → ✓ Cookies, ✓ Cache
  2. Удалите node_modules и переустановите

    cd frontend
    rm -r node_modules package-lock.json
    npm install
    npm run dev
    
  3. Проверьте logs в backend

    • В терминале где запущен Daphne должны быть logs подключений
    • Если их нет - frontend не отправляет запрос
  4. Обновите код из Git

    git pull origin main
    npm install
    .venv/Scripts/pip install -r requirements.txt
    

📞 Если проблема не решена

Создайте issue с информацией:

  • Output из DevTools Console
  • Output из Daphne терминала
  • Содержимое .env.local
  • Результат: netstat -ano | findstr :9000 (Windows)