---
# System prepended metadata

title: Звіт. РГЗ

---

# Звіт. Розрахунково-графічне завдання

Виконав роботу: Якушев Максим

[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 комунікація в реальному часі та обмін даними між клієнтами став простішим, що значно підвищило функціональність програми та поліпшило взаємодію з користувачем. Крім того, візуалізація топології мережі та статусів з’єднань надала важливу інформацію про продуктивність мережі, що сприяло кращому управлінню та виправленню неполадок.
