U svijetu web aplikacija svi vole scenarij gdje jedna aplikacija zahtjeva određenu akciju, a druga aplikacija zatim odgovori zahtijevanom akcijom. Ovaj jednostavni, ali efikasni proces je u većini slučajeva sve što jedan set web aplikacija treba kako bi ispravno funkcionirao. No što se dogodi ako jedna aplikacije ne može čekati drugu aplikaciju da završi svoju akciju i zatim pošalje odgovor? U slučajevima instantnih poruka ili konferencijskih razgovora, na primjer, sve aplikacije moraju biti savršeno sinkronizirane da bi mogle razgovarati u stvarnom vremenu. Baš u takvim situacijama web tehnologije komunikacije u stvarnom vremenu (eng. real-time communication web technologies) dolaze u središte pozornosti.

Web tehnologija komunikacije u stvarnom vremenu je pojam koji definira svaku web tehnologiju koja omogućava komunikaciju uživo između dvoje ili više klijenata preko Interneta bez kašnjenja prijenosa. U tom je području u posljednje vrijeme lider jedna moderna, obećavajuća i moćna tehnologija zvana WebRTC.

a term used to refer to any web technology that enables live communication between two or more peers over the Internet without transmission delays

Što je WebRTC

WebRTC je besplatna, open-source tehnologija koja pruža web preglednicima i mobilnih aplikacijama komunikaciju u stvarnom vremenu kroz jednostavan API (eng. application programming interface). Ona omogućava direktnu audio i video komunikaciju između klijenata, eliminirajući potrebu za instalacijom bilo kakvih drugih dodataka (eng. plugin) ili aplikacija. Kreiran je od strane Google-a u lipnju 2011. kao open-source tehnologija za komunikaciju u stvarnom vremenu između web preglednika. WebRTC je trenutačno potpuno stabilan, sa zadnjom službenom objavom verzije 1.0 u lipnju 2018. godine. Standardiziran je kroz W3C (World Wide Web Consortium) i IETF (Internet Engineering Task Force) te je podržan od strane Apple-a, Google-a, Microsoft-a, Mozilla-e i Opera-e.

Kako funkcionira WebRTC

WebRTC dolazi sa predefiniranim algoritmom razmjene poruka koji mora biti konfiguriran u programskom rješenju kako bi WebRTC komunikacija započela i normalno funkcionirala. Sljedeća slika ilustrira što se mora dogoditi kako bi WebRTC konekcija započela.

WebRTC comes with a pre-defined messaging algorithm, which has to be configured in the software solution in order for WebRTC communication to start and work normally

Ukratko, postoje četiri glavna koraka u pokretanju WebRTC sesije:

a) Klijenti moraju pronaći svoje javne IP adrese koristeći STUN – Session Traversal Utilities for NAT – server.

b) Nakon što klijenti pronađu svoje javne IP adrese, klijent A mora poslati tzv. SDP ponudu (eng. Offer SDP) klijentu B preko servera za signalizaciju (eng. Signaling server), nakon čega klijent B mora validirati dobivenu ponudu i poslati klijentu B tzv. SDP odgovor (eng. Answer SDP). SDP – Session Description Protocol – je format koji opisuje komunikacijske parametre za prijenos medijskih podataka te se kao takav koristi kod najave i validacije sesije i njenih parametara.

c) Nakon što je sesija najavljena i validirana, klijent A mora poslati tzv. ICE kandidate (eng. ICE Candidates) klijentu B kroz server za signalizaciju, nakon čega klijent B mora validirati ICE kandidate te dati odgovor istog tipa. ICE – Interactive Connectivity Establishment – je metoda za prikupljanje svih dostupnih kandidata (IP adresa) koji se nakon prikupljanja prosljeđuju klijentima.

d) Kad je sesija u potpunosti validirana i ICE kandidati su spremni tada WebRTC audio i video komunikacija može početi, bilo direktno ili kroz TURN – Traversal Using Relays around NAT – server.

U pozadini WebRTC koristi nekoliko različitih protokola kako bi pružio pouzdanu audio i video komunikaciju.

WebRTC uses several different protocols in other to provide reliable audio and video communication

Kao što vidimo na slici iznad, WebRTC koristi UDP – User Datagram Protocol – na transportnom sloju, prvenstveno zato što je UDP protokol temelj za komunikaciju u stvarnom vremenu kod modernih web preglednika. Osim toga, WebRTC koristi već spomenute ICE, STUN i TURN protokole kako bi započeo i održao peer-to-peer konekciju kroz UDP. Na kraju, SCTP – Stream Control Transport Protocol – i SRTP – Secure Real-Time Transport Protocol – se koriste da multipliciraju različite medijske stream-ove, osiguraju sigurnost i kongestiju, te pružaju djelomično pouzdanu isporuku na UDP-u.

Kako implementirati WebRTC

Da bi se WebRTC implementirao u programskom rješenju ključno je konfigurirati tri glavne stavke:

a) Server za signalizaciju (eng. Signaling server)

b) STUN i TURN servere

c) Klijentske aplikacije (web ili mobilne)

Server za signalizaciju

Server za signalizaciju je važna server-side aplikacija koju klijentske aplikacije koriste kako bi međusobno komunicirale u stvarnom vremenu. On koristi tehnologiju mrežnih socket-a (WebSocket, socket.io ili neko slično rješenje) da bi organizirao klijente u specijalne grupe (tzv. sobe), slušao njihove poruke i proslijedio ih točnim primateljima. Implementacija servera za signalizaciju je najčešće veoma jednostavna, no ona mora biti sinkronizirana sa algoritmom razmjene poruka implementiranim u klijentskim aplikacijama.

STUN i TURN serveri

STUN serveri su jednostavni serveri koji služe kako bi klijenti mogli naći svoje javne IP adrese. Oni nisu teški za postavljanje i često su besplatno dostupni za korištenje (npr. Google ima nekoliko STUN servera koje potpuno besplatno daje ljudima na upotrebu). Nakon što klijenti saznaju svoju IP adresu, oni mogu nastaviti sa algoritmom prijenosa poruka, tj. konekcija i prijenos medijskih podataka mogu početi. No vjerojatno se pitate, što je sa TURN serverima u cijeloj toj priči? U savršenom svijetu STUN serveri bili bi uvijek dostatni da WebRTC konekcija započne. No u otprilike 30% slučajeva to nije tako, tj. sam STUN server nije dovoljan. To se najčešće događa zbog strogih pravila vatrozida (eng. Firewall) ili simetričnog NAT-a (eng. Network Address Translation) koji se koristi u mrežnoj konfiguraciji klijenata. U takvim je slučajevima TURN server potreban kako bi se započela konekcija i kako bi on dalje služio kao relej kod emitiranja medijskih podataka između klijenata.

include several STUN servers, as well as a few TURN servers in a WebRTC configuration

TURN serveri se mogu implementirati zasebno (ili potpuno od početka ili koristeći open-source rješenja kao što je coTURN) ili se mogu kupiti kao usluga (npr. Xirsys). Preporuča se korištenje nekoliko STUN server, kao i nekoliko TURN servera u WebRTC konfiguraciji klijentskih aplikacija. Što više takvih servera se koristi, to je veza stabilnija, no treba napomenuti da definiranje previše servera može usporiti sam proces uspostave konekcije.

Klijentske aplikacije (web ili mobilne)

Završni korak u implementaciji WebRTC-a je konfiguriranje klijentskih aplikacija. U njihovom programiranju je potrebno konfigurirati dvije ključne stavke kako bi WebRTC u potpunosti funkcionirao:

a) Dohvaćanje medijskih podataka korisnika (eng. User media data) – sastoji se od korištenja nekoliko predefiniranih poziva WebRTC API-ja u programskom kodu. Developeri zaslužni za razvoj WebRTC-a omogućili su da ovaj dio implementacije bude veoma jednostavan, tako da bi par linija koda po tehnologiji (u kojoj je napisana klijentska aplikacija) trebalo biti dovoljno.

b) Definiranje komunikacije preko socket-a – sastoji se od kreiranja algoritma razmjene poruka u programskom kodu, koji će dozvoliti svakom klijentu da prođe kroz već opisani WebRTC proces u pravom redoslijedu.

Kada je komunikacija kroz socket-e ispravno definirana i sinkronizirana sa implementacijom servera za signalizaciju, klijent se samo mora spojiti na socket grupu, dohvatiti medijske podatke iz uređaja i pokrenuti algoritam razmjene poruka kroz server za signalizaciju. Ako je sve točno postavljeno, WebRTC sesija bi se trebala automatskim inicirati i prijenos medijskih podataka bi trebao početi.

If everything is configured correctly, the WebRTC session should automatically initialize and the call can start

Zašto WebRTC

Iz svega navedenog možemo zaključiti kako WebRTC definitivno nije bez razloga trenutno vodeća web tehnologije komunikacije u stvarnom vremenu. Prednost nam ostalim tehnologijama istog tipa daju joj njezina jednostavnost implementacije, predefinirana sigurnost na više slojeva, mogućnost implementacije cross-platform rješenja koja će obuhvaćati web i mobilne aplikacije, garancija višegodišnje podrške od strane najvećih web preglednika i mobilnih operacijskih sustava, te ono najvažnije, njena jednostavnost korištenja od strane krajnjeg korisnika. Bilo da se radi o jednostavnom web chatu između dva klijenta na jednakoj platformi, ili pak složenom sustavu komunikacije u stvarnom vremenu višestrukih klijenata na različitim platformama, WebRTC se s razlogom nameće kao prvi izbor kod velikog broja IT stručnjaka i bit će veoma zanimljivo vidjeti kako će daljnji razvoj ove tehnologije utjecati na kompletno poimanje komunikacija u stvarnom vremenu kakvog danas poznajemo.

What's your reaction?