# Звіт. Розрахунково-графічне завдання Виконав роботу: Якушев Максим [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:** ![1](https://hackmd.io/_uploads/SkiYJeMmC.png) **Візуалізація топології мережі:** ![2](https://hackmd.io/_uploads/r1D91eM70.png) **Реалізація чата:** ![3](https://hackmd.io/_uploads/BkORDIkmA.png) Тут можна надсили текстові повідомлення та зображення маючи вибір передачі повідомлень unicasting або broadcasting. **Приклад використання методу передачі broadcasting:** ![4](https://hackmd.io/_uploads/HJ0-lefX0.png) **Приклад використання методу передачі unicasting:** Вказуємо id, який потрібен: ![5](https://hackmd.io/_uploads/Sk5tegM70.png) Отримаємо повідомлення: ![6](https://hackmd.io/_uploads/ryBqlezXR.png) **Надсилання зображень:** ![7](https://hackmd.io/_uploads/SJOkZxMQC.png) **Використання VPN та зміна місцезнаходження:** Застосунок визначає ip-адреси клієнтів: ![8](https://hackmd.io/_uploads/B1dzWefmA.png) ### Висновок Завдяки інтеграції API Socket.IO комунікація в реальному часі та обмін даними між клієнтами став простішим, що значно підвищило функціональність програми та поліпшило взаємодію з користувачем. Крім того, візуалізація топології мережі та статусів з’єднань надала важливу інформацію про продуктивність мережі, що сприяло кращому управлінню та виправленню неполадок.