
Real-Time
Zäit, dat komescht Konzept, erstallt vun eis, fir ze beschreiwen wéi Ännerungen eis Perceptioun vun der Welt beaflossen. Och wann et just dat ass, e Konzept, eist Liewen dréit dorëms an dofir ass et wichteg et ze berücksichtegen. Software Engineering an Entwécklung sinn net anescht. Wou d'Internet herrscht ass, ass et ondenkbar an dësem Dag an Alter, eng Web-App (oder all Applikatioun fir déi Matière) z'entwéckelen a klickt op e Reload Knäppchen/F5/Ctrl+r fir déi rezent Donnéeën ze kréien. Eis Uwendunge mussen Echtzäit sinn.
Wat ass eng Echtzäit Applikatioun (RTA), Dir frot?
Et ass eng Applikatioun déi de Sënn vun der Instantanitéit gëtt, zB wann de Benotzer A e puer Daten an der Applikatioun ännert, dës Ännerung gëtt vun all de Benotzer an de kuerzsten Verspéidungen bekannt, ouni datt d'Applikatioun nei lued.
Ausserdeem ass de Latenzkriterium deen d'Liwwerverzögerungen vun den Daten op enger Applikatioun beaflosst (Internet, Dateveraarbechtung an sou weider) zimmlech wichteg wa mir eng Echtzäit Uwendung wëllen implementéieren. Ofhängeg wéi gutt mir d'Deadline respektéiere kënnen, fällt eis Uwendung an eng vun den dräi folgende Kategorien:
- Hard Echtzäit, wou mir all eenzel Frist an eiser Demande respektéiere mussen. Soss resultéiert et zu engem totalen Systemfehler.
- Firm Echtzäit, wann e puer Frist vermësst ass tolerabel. All Donnéeën, déi no enger Frist kritt ginn, sinn nëtzlos an dofir ass d'Qualitéit vun den Uwendungen ëmgekéiert proportional zu der Quantitéit vun de verpasste Frist.
- Soft Echtzäit, d'Nëtzlechkeet vun den Donnéeën, déi no hirer Frist kritt ginn, reduzéiert, an dofir d'Qualitéit vum System.
An d'Fro déi sech stellt ass: Wou ass de Web an all deem? Oder fir méi präzis ze sinn, wou stinn Web-Apps an deenen dräi Kategorien?
Gutt, et sollt evident sinn, Web-Apps kënnen net an der éischter Kategorie plazéiert ginn, well de Web ëmmer Verzögerung huet, an et ass bal onméiglech all eenzel Frist an eiser Uwendung ze versécheren wéinst der Internetentropie.
Eng Web-App kann awer an de leschte Kategorien plazéiert ginn.
No all deem Gespréich iwwer RTA, schéngt et datt all Applikatioun hautdesdaags en Echtzäitkomponent muss enthalen. Wéi scho gesot, mir wëllen datt eis Uwendungen reaktiv sinn. Wann eng Ännerung gemaach gëtt, muss säin Effekt duerch all Benotzer rëselen, déi d'Applikatioun benotzen. Notifikatiounen, Chat Messagen, Newsfeed, asw. All dës sinn Beispiller vun Echtzäit an eisen Uwendungen.
Wéi och ëmmer, RTAs bauen ass net onbedéngt e Stéck Kuch. Dëst bréngt zousätzlech Komplexitéit an eisen Architekturen well et méi Ressourcen erfuerdert, wat och Synchroniséierung tëscht deenen implizéiert. An de Wee wéi mir eis Donnéeën ëmgoen, kann och zimlech komplizéiert sinn (d'Uerdnung tëscht Messagen, Verspéidungen, Verloscht a Retransmission, etc.).
Real-Time Uwendungen bauen
Elo, loosst eis Affär schwätzen!
Wéi bauen mir Echtzäit Uwendungen?
Witzeg genuch, op architektonescht Siicht hu mir schonn d'Basis, Server a Client. Wéi och ëmmer, de komplizéierten Deel ass d'Kommunikatioun tëscht hinnen. Mir kommunizéieren scho mam Server iwwer HTTP Ufroen an de Server schéckt HTTP Äntwerten. Mir wëllen awer och datt de Server eis Messagen schécken kann. Aféieren Websockets a Server-Sent Eventer (SSE).
Websockets a Server-Sent Eventer si Weeër fir en iergendwéi bidirektionalen Kommunikatiounswee tëscht dem Server a Clienten z'erreechen.
Websäiten
Websockets benotzen eng TCP Verbindung (pro Websocket). Et ass en Upgrade HTTP-Protokoll deen bidirektional Kommunikatioun tëscht engem Web-Client an engem Web-Server mat nidderegen Overhead erméiglecht. (Fair Warnung, Websockets sinn net hei (wéi de Moment) e Wee fir HTTP ze ersetzen, benotzt w.e.g. keng Websockets fir Är üblech Posts ze maachen a kritt.)
Als Profis bitt Websockets eis eng voll Duplex Kommunikatioun déi déi meescht Firewalls ouni vill Rekonfiguratioun passéiert. Mir kënnen all Zort vun Daten austauschen, an et huet och e gudde Sécherheetsmodell (Origine-baséiert Sécherheetsmodell).
Wéi och ëmmer, et ginn nach ëmmer Proxyen déi de Protokoll net ënnerstëtzen, a Websocket Servere brauche verschidde Optimisatiounen am Verglach mat normale Webserveren.

Server-geschéckt Evenementer
SSE, déi dacks vernoléissegt gëtt, sinn normal HTTP Ufro an Äntwerten, sou wéi laang Polling ouni iwwerdriwwen Overhead. Déi éischt Ufro, déi awer geschéckt muss ginn, muss en Inhaltstyp Text / Event-Stream hunn. Wann dës Ufro geschéckt gouf an de Server unerkannt ass, kann et Messagen un de Client drécken.
Als Virdeeler benotzt SSE gemeinsam HTTP, Reconnection an Event-IDs ginn vun der Implementatioun uginn an et ass en einfache Protokoll.
Leider huet SSE keng binär Ënnerstëtzung an et ass limitéiert op d'Zuel max o HTTP Verbindungen.

Websockets vs SSE
Nodeems Dir dës béid Tools ausgesat huet, sinn d'Froen déi opstinn:
Wéini soll ech dat eent oder dat anert benotzen?
Ass deen een besser wéi deen aneren?
Gutt, et hänkt dovun of (et ass ni wierklech sou einfach, ass et?).
Websockets, wéi scho gesot, si am beschten benotzt wa mir wierklech e bidirektionale Wee tëscht dem Server an dem Client wëllen, typesch wa mir eng kollaborativ App bauen, e Multiplayer Spill, e Chat, etc.
Wa mir just Updates vun eisem Server wëllen kréien zB Notifikatiounen, Update Streams wéi e Feed, SSE si super well se net vill Aarbecht erfuerderen an et kritt d'Aarbecht gemaach.
Éierlech Nimm
Och wa mir iwwer dee beschte Wee geschwat hunn fir Echtzäit z'erreechen, ginn et e puer aner Tools déi et wäert sinn ze ernimmen.
Echtzäit Datenbanken sinn, wéi den Numm et scho seet, Datenbanken déi bereet sinn Daten mat de Prinzipien vun Echtzäit Computing ze handhaben, sou datt d'Donnéeën einfach verfügbar sinn fir dem Client geschéckt ze ginn wann néideg a méi Daten am Allgemengen behandelen. Beispiller vun dëser Aart vun Datenbanken sinn RethinkDB, a Firebase bitt och eng Echtzäit Datebank.
Ad Summam
Ech mengen et ass ganz genuch fir en Artikel, oder? Also, fir ofzeschléissen, wa mir iwwer Echtzäit fir d'Webapps geschwat hunn, kann den Echtzäitkomponent vun der Applikatioun nëmmen als mëll oder fest beschriwwe ginn an och wann, Echtzäit trendy a wierklech nëtzlech ass, kann et sinn schwéier et ze programméieren / erhalen oder ëmzegoen. Endlech béid Websockets a Server-Sent Eventer si Weeër fir Echtzäit an eisen Uwendungen z'erreechen. Wielt virsiichteg, heiansdo brauch Dir deen een oder deen aneren. Wann Är Applikatioun eng voll bidirektional Verbindung tëscht dem Server an dem Client erfuerdert, benotzt Websockets. Wann Dir nëmmen Updates braucht, benotzt SSE.
Vergewëssert Iech meng GitHub repo eraus, mat béiden dësen Tools ze spillen!
Merci all fir d'Liesen vun dësem Artikel, fillt Iech gratis all Virschléi fir weider Verbesserungen oder Korrekturen ze ginn.
schrëftlech vun Yoan Ribeiro
