Pričamo o četiri tehnologije real-time komunikacije: kratko pollanje, dugo pollanje, WebSocket i SSE
U ovom članku, pričaćemo o četiri tehnologije real-time komunikacije: kratko pollanje, dugo pollanje, WebSocket i SSE.
1 Kratko pollanje
Pretraživač redovno (npr. svake sekunde) šalje HTTP zahtev serveru, server odmah vraća trenutne podatke (bez obzira da li ima ažuriranja).

- Prednosti: jednostavna implementacija, odlična kompatibilnost
- Mane: visokofrekventni zahtevi štede resurse, loš real-time (zavisi od intervala pollanja)
- Kašnjenje: visoko (zavisi od frekvencije pollanja)
- Scenariji upotrebe: scenariji sa visokim zahtevima za kompatibilnost, neosetljivost na kašnjenje.
Najupečatljiviji scenario kratkog pollanja u mojoj karijeri je prenos rezultata uživo:

Kao što je prikazano na slici, korisnik ulazi na interfejs prenosa rezultata, pretraživač redovno upituje informacije o takmičenju (promene rezultata, žuti/crveni kartoni itd.), ako su se podaci promenili, ponovo renderuje stranicu.
Ovaj način je vrlo jednostavan i pouzdan za implementaciju, ali česti pozivi backend interfejsa će uticati na backend performanse (uglavnom CPU). Istovremeno, zbog zavisnosti od intervala pollanja, promene podataka na stranici imaju kašnjenje, korisničko iskustvo nije tako dobro.
2 Dugo pollanje
Nakon što pretraživač pošalje HTTP zahtev, server obustavlja vezu dok se podaci ne ažuriraju ili ne istekne vreme, nakon povratka odgovora pretraživač odmah šalje novi zahtev.

- Prednosti: smanjuje nevažeće zahteve, bolje real-time od kratkog pollanja
- Mane: server mora da održava obustavljene veze, visoka potrošnja resursa pri visokoj konkurenciji
- Kašnjenje: srednje (zavisi od frekvencije ažuriranja podataka)
- Scenariji upotrebe: scenariji koji zahtevaju bolji real-time i ne mogu koristiti WebSocket/SSE (kao obaveštenja o porukama)
Najčešći scenario dugog pollanja je: konfiguracioni centar, Nacos naš poznati centar za registraciju, Apollo su zavisni od mehanizma dugog pollanja.

Nacos dugo pollanje
Nakon što klijent pošalje zahtev, Nacos server ne odmah vraća rezultat zahteva, već obustavlja zahtev i čeka određeno vreme, ako se podaci servera promene u ovom periodu, odmah odgovara na zahtev klijenta, ako nema promena čeka do određenog vremena isteka zatim odgovara na zahtev, klijent ponovo pokreće dugo pollanje.
3 WebSocket
Protokol punog dupleksa baziran na TCP-u, kroz HTTP nadogradnju handshake (Upgrade: websocket) uspostavlja trajnu vezu (dvosmerno real-time komunikaciju).

- Prednosti: najniže kašnjenje, podrška za dvosmenu interakciju, ušteda propusnog opsega
- Mane: složena implementacija, potreba za posebnim rukovanjem stanja veze
- Kašnjenje: ekstremno nisko
- Scenariji upotrebe: sobe za ćaskanje, online igre, saradničko uređivanje itd. potrebe za visoko real-time dvosmenu interakciju
Radio sam za jednu e-kompaniju u Pekingu, učestvovao sam u razvoju funkcionalnosti kviza uživo.

Celokupna arhitektura kviza uživo je prikazana na sledećem dijagramu:

Tehnološki izbor TCP gateway-a je: Netty, ProtoBuf, WebSocket, izabrali smo WebSocket jer podržava dvosmenu real-time komunikaciju, istovremeno Netty ima ugrađenu implementaciju WebSocket-a, inženjerska implementacija je relativno jednostavna.
4 Server Send Event(SSE)
Baziran na HTTP protokolu, server može aktivno slati tok podataka (npr. Content-Type: text/event-stream), pretraživač sluša kroz EventSource API.

- Prednosti: prirodna podrška za ponovno povezivanje prekida, lagan (HTTP protokol)
- Mane: jednosmerna komunikacija (server->klijent), starije IE pretraživači ne podržavaju
- Kašnjenje: nisko (server može odmah slati)
- Scenariji upotrebe: berze dionica, real-time logovi itd. potrebe za server jednostrano slanje.
Najklasičniji scenario SSE-a je: DeepSeek web čet interfejs, kao što je prikazano na slici:

Nakon što se poruka pošalje u DeepSeek dijalog, pretraživač će poslati HTTP zahtev, server će vratiti podatke pretraživaču putem SSE načina.

5 Zaključak
| Karakteristike | Kratko pollanje | Dugo pollanje | SSE | WebSocket |
|---|---|---|---|---|
| Protokol | HTTP | |||
| HTTP | ||||
| HTTP | ||||
| WebSocket (baziran na TCP-u) | ||||
| Real-time | Nisko | |||
| Srednje | ||||
| Visoko | ||||
| Ekstremno visoko | ||||
| Potrošnja resursa | Visoka (frekventni zahtevi) | |||
| Srednja (obustavljene veze) | ||||
| Niska | ||||
| Niska (trajne veze) | ||||
Saveti za izbor:
- Potrebna jednostavna kompatibilnost → Kratko pollanje
- Potrebno srednje real-time → Dugo pollanje
- Samo server slanje → SSE
- Potrebna full-dupleks real-time interakcija → WebSocket
Preporučeno ranije:
Ove kolone su prilično eksplozivne!
Servis SMS poruka platform-sms 0.6.1 objavljen
Nakon što pročitate ovaj članak, ShardingSphere-jdbc praktično više nije strašan
Napisao sam obrazovni sistem raspoređivanja zadataka, vrlo jak!
