Rad s protokolom WebSocket i uloga u komunikaciji u stvarnom vremenu
Protokol WebSocket, definiran standardom RFC 6455, omogućuje dvosmjernu (full-duplex) komunikaciju između klijenta i poslužitelja preko jedne dugotrajne TCP veze. Za razliku od tradicionalnog HTTP protokola koji se oslanja na model zahtjeva i odgovora (request-response), WebSocket omogućuje poslužitelju da samostalno šalje podatke klijentu bez prethodnog upita. Ova arhitektura drastično smanjuje mrežni režijski promet (overhead) jer eliminira potrebu za stalnim otvaranjem novih veza i slanjem opsežnih HTTP zaglavlja pri svakoj razmjeni podataka.
U praksi, WebSocket je temelj za aplikacije koje zahtijevaju prijenos podataka u stvarnom vremenu, kao što su sustavi za razmjenu poruka, financijske platforme s prikazom cijena dionica, alati za zajednički rad na dokumentima i nadzorne ploče s telemetrijskim podacima. Korištenjem ovog testnog klijenta, razvojni programeri, inženjeri za integraciju, osoblje za osiguranje kvalitete (QA) i operativni timovi (Ops) mogu ručno uspostaviti vezu s javno dostupnim WebSocket krajnjim točkama, slati tekstualne poruke te pratiti ponašanje poslužitelja u stvarnom vremenu.
Životni vijek veze i stanja WebSocket protokola
Uspostava i prekid WebSocket veze prolaze kroz točno definirane faze unutar svog životnog ciklusa:
- Povezivanje: Veza započinje HTTP rukovanjem (handshake) u kojem klijent šalje zahtjev za nadogradnju protokola (Upgrade header). Dok se ovaj proces odvija, klijent prikazuje status
Povezivanje na ‹address›…. Veza se pokreće tek kada odaberete gumb za povezivanje. - Otvorena veza: Kada poslužitelj prihvati nadogradnju, veza prelazi u aktivno stanje. U dnevniku se tada prikazuje poruka
Povezan na ‹address›.. Od tog trenutka klijent i poslužitelj mogu slobodno razmjenjivati poruke. - Zatvaranje: Bilo koja strana može inicirati zatvaranje veze. Tijekom ovog procesa klijent prolazi kroz stanje zatvaranja, što se označava s
Zatvaranje veze…. Nakon što se veza potpuno prekine, u sučelju se ispisujeVeza zatvorena kodom ‹code›..
Ako poslužitelj ne odgovori i ne otvori vezu unutar 10 sekundi, klijent će prekinuti pokušaj i prikazati poruku Poslužitelj nije otvorio vezu unutar 10 sekundi.
Razlike između ws:// i wss:// protokola
Slično kao i kod HTTP-a, WebSocket protokol nudi dvije sheme koje određuju razinu sigurnosti prijenosa podataka:
ws://(WebSocket): Koristi nešifrirani prijenos podataka preko TCP-a. Podaci se šalju u čistom tekstualnom obliku, što ih čini podložnima presretanju na mrežnoj razini.wss://(WebSocket Secure): Koristi TLS/SSL enkripciju preko TCP-a. Ovaj protokol osigurava povjerljivost i integritet podataka, sprječavajući prisluškivanje i manipulaciju tijekom prijenosa.
Ovaj klijent podržava isključivo ws:// i wss:// sheme. Ako unesete bilo koju drugu shemu, sustav će prikazati upozorenje Koristite adresu ws:// ili wss://.. Ako unesena adresa nije potpuna, prikazat će se poruka Unesite potpunu WebSocket adresu kao što je wss://example.com/socket.. Maksimalna dopuštena duljina adrese je 2.048 znakova, a u slučaju prekoračenja klijent javlja Ta je adresa neobično duga. Držite ga pod znakovima 2,048..
Razumijevanje kodova i razloga zatvaranja veze
Kada se WebSocket veza zatvori, protokol predviđa slanje numeričkog koda i tekstualnog obloga koji objašnjavaju razlog prekida. Klijent prikazuje ove informacije u formatu Zatvoreno kodom ‹code› (‹clean›). Razlog: ‹reason›.
Status zatvaranja može biti označen kao čistim ako je veza zatvorena urednim rukovanjem s obje strane, ili nije čist (unclean) ako je veza prekinuta naglo, primjerice zbog gubitka mrežnog signala ili pada poslužitelja. Ako poslužitelj tijekom zatvaranja ne pošalje tekstualno obrazloženje, klijent će prikazati Nije naveden razlog.
Uobičajeni numerički kodovi zatvaranja definirani standardom uključuju:
| Kod | Značenje | Opis |
|---|---|---|
| 1000 | Normal Closure | Veza je uspješno ispunila svoju svrhu i uredno je zatvorena. |
| 1001 | Going Away | Poslužitelj se gasi ili klijent napušta stranicu. |
| 1002 | Protocol Error | Veza se prekida zbog pogreške u protokolu. |
| 1003 | Unsupported Data | Primljen je tip podataka koji klijent ili poslužitelj ne mogu obraditi. |
| 1006 | Abnormal Closure | Veza je zatvorena bez slanja okvira za zatvaranje (često zbog mrežnih problema). |
| 1009 | Message Too Big | Primljena poruka je prevelika za obradu. |
Tekstualne naspram binarnih poruka
WebSocket protokol razlikuje tekstualne i binarne okvire podataka:
- Tekstualne poruke: Sadrže UTF-8 kodirani tekst. Ovaj klijent omogućuje slanje tekstualnih poruka veličine do 100.000 znakova. Ako pokušate poslati veću poruku, klijent će prikazati
Ta je poruka neobično velika. Držite ga pod znakovima 100,000.. Ako pokušate poslati poruku prije nego što uspostavite vezu, prikazat će se porukaPovežite se prije slanja poruke.. - Binarne poruke: Sadrže sirove binarne podatke (poput slika, datoteka ili prilagođenih binarnih protokola). Klijent ne interpretira sadržaj binarnih poruka, već ih u dnevniku označava oznakom
Binarna porukauz prikaz njihove veličine u bajtovima, primjerice kroz formatbajtova.
Ograničenja preglednika i privatnost podataka
Ovaj testni klijent radi izravno unutar vašeg web preglednika. To sa sobom nosi određena tehnička ograničenja koja nameće sam preglednik i sigurnosni standardi:
- Nema prilagođenih zaglavlja: Preglednički WebSocket API ne dopušta dodavanje prilagođenih HTTP zaglavlja (poput autorizacijskih tokena) tijekom rukovanja. Klijent ne može zaobići ovo ograničenje.
- Sigurnosna pravila: Klijent ne može zaobići pogreške s SSL certifikatima niti nadjačati pravila pristupa poslužitelja (kao što su CORS ili restrikcije porijekla). Ako veza ne uspije zbog ovih razloga, prikazat će se poruka
Veza nije uspjela. Provjerite adresu, certifikat, dostupnost poslužitelja i pravila pristupa pregledniku.. - Nedostupnost mrežnih okvira: Preglednik ne izlaže fragmente na mrežnoj razini niti kontrolne okvire poput Ping i Pong signala aplikacijskom sloju, pa ih ovaj klijent ne može prikazati.
Što se tiče privatnosti, obrada podataka odvija se lokalno. Ništa se ne učitava na BroBroGo niti sprema ova stranica. Vaša adresa i poruke idu izravno iz vašeg preglednika na WebSocket poslužitelj koji odaberete. Ipak, preporučuje se oprez: uklonite osobne identifikatore i osjetljive pravne, financijske ili zdravstvene podatke prije povezivanja jer ova stranica ne može kontrolirati bilježenje ili zadržavanje podataka na poslužitelju na koji se povezujete.
Upravljanje dnevnikom poruka
Dnevnik kronološki bilježi sve događaje, poslane i primljene poruke. Svaka stavka ima jasnu oznaku smjera i tipa: Poslano za odlazne poruke, Primljeno za dolazne poruke te događaj za promjene stanja veze.
Kako bi stranica ostala responzivna i stabilna tijekom intenzivnog testiranja, primjenjuju se sljedeća pravila ograničenja:
- Dnevnik zadržava maksimalno 500 unosa. Kada se taj broj premaši, stariji unosi se automatski uklanjaju, a u dnevniku se ispisuje obavijest
‹count› stariji unosi dnevnika su uklonjeni kako bi ova stranica nastavila reagirati.. - Pojedinačni unosi u dnevniku prikazuju najviše 20.000 znakova. Ako je poruka dulja, sadržaj se skraćuje, a klijent prikazuje obavijest
Još ‹count› znakova skriveno je u ovom pregledu..
Korisnik može u svakom trenutku očistiti prikaz odabirom opcije za brisanje dnevnika. Čišćenje dnevnika briše samo trenutno prikazane zapise na zaslonu, ali ne prekida aktivnu vezu niti resetira brojače poslanih i primljenih poruka.
Često postavljana pitanja (FAQ)
Koje WebSocket podatke mogu provjeriti ovdje?
Možete vidjeti svaku tekstualnu ili binarnu poruku koju je otkrio vaš preglednik, njen smjer, vrijeme i veličinu, plus konačni kod zatvaranja, razlog i status čistog zatvaranja. Stranice preglednika ne mogu otkriti fragmente na mrežnoj razini ili Ping i Pong kontrolnih okvira.
Zašto veza ne uspijeva čak i kada adresa radi negdje drugdje?
Na sigurnoj stranici preglednik može zahtijevati wss://. Poslužitelj također mora prihvatiti veze preglednika i porijeklo stranice. Ovaj klijent ne može dodati prilagođena zaglavlja rukovanja, zaobići pogreške certifikata ili nadjačati pravila pristupa poslužitelja.
Mogu li testirati s proizvodnim ili osjetljivim podacima?
Koristite sintetičke podatke kad god je to moguće. Uklonite imena, podatke o računu, pravne podatke, financijske podatke i zdravstvene podatke prije slanja. Poruke idu na poslužitelj koji odaberete, čija su pravila zapisivanja i zadržavanja izvan kontrole ove stranice.
Što se događa kada očistim dnevnik poruka?
Pražnjenje dnevnika uklanja samo vizualne zapise s ekrana kako bi se oslobodio prostor u sučelju. Ova akcija ne prekida aktivnu WebSocket vezu niti utječe na brojače poslanih i primljenih poruka koji se nalaze u zaglavlju klijenta.