Веб-приложение показывает передвижение автобусов на карте Москвы.
- Скачайте код
- Запустите эмулятор автобусов (ниже инструкция)
- Запустите сервер (ниже инструкция)
- Откройте в браузере файл index.html
python fake_bus.py [-h] -server SERVER -rn ROUTES_NUMBER -b BUSES_PER_ROUTE -id EMULATOR_ID [-t REFRESH_TIMEOUT] [-v {0,10,20,30,40,50}]
Параметры:
-h, --help
- помощь
-server SERVER, --server SERVER
- адрес сервера (вместе с портом)
-rn ROUTES_NUMBER, --routes_number ROUTES_NUMBER
- количество эмулируемых маршрутов
-b BUSES_PER_ROUTE, --buses_per_route BUSES_PER_ROUTE
- количество автобусов на маршрут (автоматически будут находиться в разных точках маршрута)
-id EMULATOR_ID, --emulator_id EMULATOR_ID
- уникальный id эмулятора при запуске нескольких эмуляторов, для понимания инициатора сообщения при логировании
-wn WEBSOCKETS_NUMBER, --websockets_number WEBSOCKETS_NUMBER
- число сокетов в эмуляторе, от 1 до 20, по умолчанию 5
-t REFRESH_TIMEOUT, --refresh_timeout REFRESH_TIMEOUT
- отправлять новую точку каждые REFRESH_TIMEOUT секунд
-v {0,10,20,30,40,50}, --verbosity {0,10,20,30,40,50}
- уровень логирования (по умолчанию 0 - без логирования)
python server.py [-h] -host HOST -lp BUS_PORT -sp BROWSER_PORT [-v {0,10,20,30,40,50}]
Параметры:
-h, --help
- помощь
-host HOST, --host HOST
- адрес сервера
-lp BUS_PORT, --bus_port BUS_PORT
- порт приема сообщений от эмулятора автобусов
-sp BROWSER_PORT, --browser_port BROWSER_PORT
- порт приему и отправки сообщений браузеру
-v {0,10,20,30,40,50}, --verbosity {0,10,20,30,40,50}
- уровень логирования (по умолчанию 0 - без логирования)
Внизу справа на странице можно включить отладочный режим логгирования и указать нестандартный адрес веб-сокета.
Настройки сохраняются в Local Storage браузера и не пропадают после обновления страницы. Чтобы сбросить настройки удалите ключи из Local Storage с помощью Chrome Dev Tools —> Вкладка Application —> Local Storage.
Если что-то работает не так, как ожидалось, то начните с включения отладочного режима логгирования.
Фронтенд ожидает получить от сервера JSON сообщение со списком автобусов:
{
"msgType": "Buses",
"buses": [
{"busId": "c790сс", "lat": 55.7500, "lng": 37.600, "route": "120"},
{"busId": "a134aa", "lat": 55.7494, "lng": 37.621, "route": "670к"},
]
}
Те автобусы, что не попали в список buses
последнего сообщения от сервера будут удалены с карты.
Фронтенд отслеживает перемещение пользователя по карте и отправляет на сервер новые координаты окна:
{
"msgType": "newBounds",
"data": {
"east_lng": 37.65563964843751,
"north_lat": 55.77367652953477,
"south_lat": 55.72628839374007,
"west_lng": 37.54440307617188,
},
}
Сервер ожидает получить от эмулятора JSON сообщение с информацией об автобусе:
{
"busId": "c790сс",
"lat": 55.7500,
"lng": 37.600,
"route": "120"
}
Если сервер получил от браузера или от эмулятора некорректное сообщение, то он отправляет сообщение об ошибке
{
"msgType": "Errors",
"errors": [
{
"loc": ["data", "east_lng"],
"msg": "field required",
"type": "value_error.missing"
}
]
}
pytest tests\
Код написан в учебных целях — это урок в курсе по Python и веб-разработке на сайте Devman.