All checks were successful
continuous-integration/drone/push Build is passing
Changes: - Fix nutrition service: add is_active column and Pydantic validation for UUID/datetime - Add location-based alerts feature: users can now see alerts within 1km radius - Fix CORS and response serialization in nutrition service - Add getCurrentLocation() and loadAlertsNearby() functions - Improve UI for nearby alerts display with distance and response count
5.4 KiB
5.4 KiB
🚀 WebSocket SOS - Быстрый Старт
⚡ Самый быстрый способ протестировать
1️⃣ Запустить сервисы (если еще не запущены)
cd /home/trevor/dev/chat
# Терминал 1
python -m services.user_service.main
# Терминал 2
python -m services.emergency_service.main
2️⃣ Запустить тест (занимает ~20 секунд)
python test_ws_quick.py
✅ Результат
✅ Token obtained
✅ WebSocket connected
✅ Ping/pong working
✅ WebSocket connection test completed successfully!
📝 Тестовые учетные данные
| Параметр | Значение |
|---|---|
| wstester@test.com | |
| Password | WsTest1234! |
| User ID | 51 |
🔗 WebSocket URL
ws://localhost:8002/api/v1/emergency/ws/51?token={JWT_TOKEN}
Как получить JWT_TOKEN
curl -X POST http://localhost:8001/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"wstester@test.com","password":"WsTest1234!"}'
Скопируйте значение access_token из ответа.
💬 Примеры сообщений
Подключение (отправляется сервером)
{
"type": "connection_established",
"message": "WebSocket connection established successfully",
"user_id": 51,
"timestamp": "2025-12-13T14:15:14.982894"
}
Ping (отправьте клиент)
{"type": "ping"}
Pong (ответ сервера)
{"type": "pong"}
SOS Alert (отправляется сервером при создании оповещения)
{
"type": "emergency_alert",
"alert_id": 123,
"alert_type": "SOS",
"latitude": 55.7558,
"longitude": 37.6173,
"address": "Location (55.7558, 37.6173)",
"message": "Экстренная ситуация!",
"created_at": "2025-12-13T14:15:20.123456",
"distance_km": 0.5
}
🔧 Тестовые скрипты
test_ws_quick.py - Базовый тест
python test_ws_quick.py
Что проверяет:
- ✅ Получение JWT токена
- ✅ Подключение WebSocket
- ✅ Ping/Pong
- ✅ Слушание сообщений (30 сек)
Время: ~30 секунд
register_test_user.py - Создание пользователя
python register_test_user.py
Что делает:
- ✅ Регистрирует нового тестового пользователя
- ✅ Получает JWT токен
- ✅ Выводит готовый WebSocket URL
test_ws_full.py - Полное тестирование
python test_ws_full.py
Что проверяет:
- ✅ Аутентификация
- ✅ WebSocket подключение
- ✅ Создание SOS оповещения
- ✅ Получение уведомления
- ✅ Множественные клиенты
Время: ~1-2 минуты
🎯 Статус работоспособности
| Функция | Статус |
|---|---|
| WebSocket подключение | ✅ OK |
| Аутентификация | ✅ OK |
| Ping/Pong | ✅ OK |
| Создание SOS | ✅ OK |
| Получение уведомлений | ✅ OK |
| Broadcast | ✅ OK |
📊 Посмотреть статистику
Все активные соединения
curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
http://localhost:8002/api/v1/websocket/stats
Детальная информация
curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
http://localhost:8002/api/v1/websocket/connections
Пинг всех подключений
curl -X POST -H "Authorization: Bearer YOUR_JWT_TOKEN" \
http://localhost:8002/api/v1/websocket/ping
🐛 Решение проблем
Проблема: WebSocket не подключается
Решение:
1. Проверьте JWT токен (не истек ли)
2. Убедитесь в правильности user_id
3. Проверьте что Emergency Service запущена на 8002
Проблема: Плохое соединение
Решение:
1. Проверьте интернет (локальное тестирование)
2. Посмотрите логи сервиса
3. Попробуйте переподключиться
Проблема: Нет уведомлений о SOS
Решение:
1. Убедитесь что Location Service запущена
2. Проверьте что пользователи находятся в радиусе 1-2 км
3. Убедитесь что пользователи подключены к WebSocket
📚 Дополнительная информация
Подробные отчеты:
- WS_SOS_FINAL_REPORT.md - Полный технический отчет
- WS_SOS_TEST_REPORT.md - Результаты тестирования
Исходный код:
/home/trevor/dev/chat/services/emergency_service/main.py- WebSocket сервис- Класс
WebSocketManager(строка ~96) - Endpoint
websocket_endpoint()(строка ~393)
Последнее обновление: 13 декабря 2025
Статус: ✅ Все работает!