| flags | ||
| .gitignore | ||
| index.html | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| server.js | ||
| servers.json | ||
Test Net
Self-hosted тест скорости сети на Node.js без внешних npm-зависимостей. Приложение показывает download/upload скорость, HTTP-пинг до каждого сервера, позволяет выбрать целевой сервер и переключать светлую/темную тему с акцентным цветом.
Возможности
- выбор сервера из общего
servers.json; - измерение HTTP-пинга от браузера клиента до каждого сервера;
- download/upload тесты через выбранный сервер;
- SVG-флаги стран в карточках серверов;
- автоматическое скачивание недостающих флагов в
flags/; - светлая и темная тема, пользовательский акцентный цвет;
- адаптивный canvas-график скорости с пиками и средними значениями;
- cluster-режим Node.js для использования всех CPU.
Запуск
npm start
По умолчанию сервер слушает http://localhost:3000.
Переменные окружения:
PORT=3000 SERVER_ID=local WORKERS=4 npm start
PORT- порт HTTP-сервера.SERVER_ID- id текущего сервера изservers.json.WORKERS- количество Node.js worker-процессов. Если не задано, используется количество CPU.
Конфигурация серверов
servers.json можно держать одинаковым и синхронизировать на всех серверах.
Текущий инстанс выбирается через SERVER_ID; если переменная не задана,
используется currentServerId.
{
"currentServerId": "de-1",
"servers": [
{
"id": "de-1",
"name": "Frankfurt",
"address": "https://de.example.com",
"country": "Германия",
"countryCode": "de"
},
{
"id": "nl-1",
"name": "Amsterdam",
"address": "https://nl.example.com",
"country": "Нидерланды",
"countryCode": "nl"
}
]
}
Важно: address должен быть доступен из браузера клиента. Для тестов между
разными доменами backend отправляет CORS-заголовки.
Флаги
При старте primary-процесс читает servers.json, создает папку flags/ и
скачивает недостающие SVG-флаги с https://flagcdn.com/<countryCode>.svg.
Если флаг уже есть локально, повторная загрузка не выполняется.
API
GET /- интерфейс теста.GET /api/servers- JSON со списком серверов и текущим сервером.GET /ping- легкий endpoint для измерения задержки из браузера.GET /download- бесконечный поток байтов для download-теста.POST /upload- принимает поток данных и возвращает количество байтов.GET /flags/:code.svg- локально сохраненный SVG-флаг.
Как работает измерение
Клиент сначала загружает /api/servers, затем для каждого сервера делает
несколько запросов к /ping и показывает минимальное значение. Выбранный сервер
используется как base URL для /download и /upload. График строится в
браузере по текущим скоростям, которые обновляются каждые несколько сотен
миллисекунд.