# Звіт. Розрахунково-графічне завдання
Виконав роботу: Якушев Максим
[TOC]
### Завдання:
Створити мульти-клієнт - серверний додаток з візуалізацією поточної топології мережі та стану з'єднань, що використовує хостинг replit.com з реалізацією функціоналу за допомогою API Socket.IO
Додаток має забезпечувати
1) передачу повідомлень від вашого клієнта будь-якому іншому (unicasting)
2) передачу повідомлень від вашого клієнта всім іншим (broadcasting)
Повідомлення мають бути двох типів
* текстові повідомлення
* зображення
Під час передачі даних додаток повинен контролювати поточну затримку поширення (propagation delay)) від клієнта $\delta_{i}$ і пропускну здатність $B_{i}$ канала клієнта (де $i$ - номер клієнта, що бере участь у поточній комунікації) та візуалізувати їх на діаграмі товщиною ребер графа діаграми та розміром вузлів.
### Теоретична частина
**Пропускна здатність (Bandwidth)**. Вказує на максимальну швидкість передачі даних через мережу або канал зв'язку. Зазвичай вимірюється у бітах на секунду (б/с). Вища пропускна здатність дозволяє швидше передавати дані і може підтримувати більше одночасних підключень або великі обсяги даних.
**Затримка поширення (Propagation Delay)**. Це час, необхідний для сигналу, щоб пройти від відправника до отримувача в каналі зв'язку. Вона включає час, необхідний для поширення сигналу через середовище (наприклад, кабелі, оптичні волокна), а також будь-які затримки обробки в маршрутизаторах або комутаторах вздовж шляху. Затримка поширення залежить від фізичної відстані між відправником і отримувачем, швидкості світла у середовищі та обробних здібностей проміжних пристроїв.
### Код програми
Посилання на код: https://replit.com/join/yrtrbysviq-maksymyakushev
Для тествання використовувались: різноманітні браузері, різні пристрої, VPN.
### Програма
**Початкова сторінка з приєднаними кількома користувачами, кожному користувачеві присвоюється новий унікальний id:**

**Візуалізація топології мережі:**

**Реалізація чата:**

Тут можна надсили текстові повідомлення та зображення маючи вибір передачі повідомлень unicasting або broadcasting.
**Приклад використання методу передачі broadcasting:**

**Приклад використання методу передачі unicasting:**
Вказуємо id, який потрібен:

Отримаємо повідомлення:

**Надсилання зображень:**

**Використання VPN та зміна місцезнаходження:**
Застосунок визначає ip-адреси клієнтів:

### Висновок
Завдяки інтеграції API Socket.IO комунікація в реальному часі та обмін даними між клієнтами став простішим, що значно підвищило функціональність програми та поліпшило взаємодію з користувачем. Крім того, візуалізація топології мережі та статусів з’єднань надала важливу інформацію про продуктивність мережі, що сприяло кращому управлінню та виправленню неполадок.