Реалізація Low-Latency взаємодії через 5G у мобільних застосунках
Час циклу (round-trip time) у 5G URLLC теоретично менш 1 мс на радіоінтерфейсі. На практиці end-to-end затримка від дотику екрана до відповіді сервера і назад становить 10–50 мс при хорошому покритті. Це принципово змінює те, що можна реалізувати у мобільному застосунку: хмарний рендеринг, дистанційне управління устаткуванням, синхронна мультиплеєрна механіка.
Де насправді втрачається час
Типова декомпозиція затримки для 5G-застосунку:
| Компонент | Затримка | Коментар |
|---|---|---|
| Дотик → JS подія | 8–16 мс | Бюджет кадру UIKit/Choreographer |
| Обробка JS | 1–5 мс | Залежить від навантаження основного потоку |
| 5G радіо (UE → gNB) | 0,5–4 мс | Sub-6 ГГц, URLLC |
| Транспорт (gNB → MEC/хмара) | 2–20 мс | Залежить від відстані до сервера |
| Обробка сервера | 1–50 мс | Залежить від завдання |
| Зворотний шлях | ~те ж саме | Симетричний |
Реалістичний загальний: 25–100 мс. Це достатньо для більшості інтерактивних застосунків. Для хірургічних роботів — ні, але вони використовують спеціалізоване обладнання.
Ключовий паттерн: оптимістичний UI + відкат
Очікування підтвердження від сервера перед оновленням UI додає видиму затримку навіть при низькому RTT. Правильний підхід: застосувати зміни локально одразу, асинхронно відправити на сервер, відкатити при помилці.
type OptimisticAction<T> = {
optimisticState: T;
serverCall: () => Promise<T>;
onConflict: (serverState: T) => T; // розв'язання конфліктів
};
async function applyOptimistic<T>(
setState: React.Dispatch<React.SetStateAction<T>>,
action: OptimisticAction<T>
) {
const previousState = await new Promise<T>(resolve => setState(prev => {
resolve(prev);
return action.optimisticState;
}));
try {
const serverState = await action.serverCall();
setState(action.onConflict(serverState));
} catch {
setState(previousState); // відкат
}
}
Для мультиплеєрної механіки: версіонування стану з вектором годинників або порядковими номерами дозволяє визначити, чия дія прийшла пізніше і чи необхідний відкат.
WebSocket vs HTTP/3 для Low-Latency
WebSocket — стандартний вибір для двосторонньої low-latency комунікації. Однак HTTP/3 (QUIC) має переваги на мобільних мережах:
- Міграція з'єднання: коли IP змінюється (LTE → 5G, зміна точки доступу), QUIC з'єднання залишаються живими. TCP/WebSocket розривають.
- Блокування на початку рядка: у QUIC втрата пакета у одному потоці не блокує інші. У TCP втрата блокує все.
- 0-RTT рукостиск: при повторному підключенні до відомого сервера QUIC пропускає TLS рукостиск.
У React Native: fetch через мережевий шар Expo підтримує HTTP/3 на iOS 15+ (через URLSession з QUIC) та Android 12+ (через OkHttp з QUIC через Cronet). Для явного контролю використовуйте нативні модулі з Cronet на Android та URLSessionConfiguration з QUIC на iOS.
MEC (Mobile Edge Computing): сервер біля антени
Щоб досягти мінімальної затримки, сервер повинен бути близько. MEC розміщує обчислення на граничних вузлах оператора—фізично біля базових станцій. Затримка від UE до MEC-сервера: 2–10 мс.
Для мобільних застосунків: виявивши 5G з низькою затримкою, перемикайтеся на MEC-точки входу (оператори надають API-s для виявлення краю). При переході на LTE або русі за межі MEC-зони, повертайтеся на хмарний сервер.
Виявте MEC через GSMA Open Gateway API або спеціальні API операторів (AT&T, Deutsche Telekom надають Edge Discovery Service).
Нативний UDP для мінімальної затримки
WebSocket працює поверх TCP. Для завдань, де втрата пакетів допустима, але затримка критична (онлайн-ігри, синхронізація фізики, аудіопотік), використовуйте UDP. На мобільних платформах:
-
iOS:
Network.frameworkзNWConnection(to:, using: .udp). ВикористовуйтеNWParameters.dtlsдля зашифрованого UDP. -
Android:
java.net.DatagramSocketабо через NDK. - React Native: потрібен нативний модуль—Expo/Metro не надають прямого UDP.
Для ігор: WebRTC Data Channel надає надійний або ненадійний UDP з вбудованим ICE/STUN/TURN для NAT traversal. react-native-webrtc підтримує DataChannel.
Оцінка часу
Оптимістичний UI + WebSocket low-latency архітектура у React Native: 3–5 тижнів. З нативними QUIC/UDP модулями та MEC-інтеграцією: 6–10 тижнів. Вартість розраховується індивідуально.







