Bevezetés
Ma egy teljesen jó Keynote-on sikerült részt vennem.
A Kaazing.org egyik alapítója, Jonas Jacobi beszélt a jelenlegi HTTP hátrányairól. Legfőképp a Half-Duplex problémát és a ma egyre terjedő RI alkalmazások — számára a RIA "Richer, and Interactive Applications"-t jelenti — miatt felvetődött igényeket taglalta.
Előkerült, hogy a w3c és a HTML5-öt fejlesztő egyéb csoportok 2022-re tervezik kiadni a végleges specifikációt, ugyanakkor elmondta, hogy nem kell aggódnunk, azért is ilyen távlati időpontokat adnak meg egy-egy specifikáció véglegesítésére, mivel ha azt mondanák, hogy a specifikációt mondjuk 2010-re véglegesítenék, akkor azt megvárnák a böngésző-fejlesztők és ezzel önmagunkat hátráltatnánk. Emiatt viszont, hogy 2022-re tették a véglegesítés időpontját, a böngésző-fejlesztők apránként — ahogy az a <canvas> elemmel is megtörtént —, a véglegesítése előtt már implementálni kezdték.
Megoldás (?)
Hogy mi az, amivel Jacobi a megváltás reméli számunkra, RIA fejlesztőkre? A neve WebSocket. Igazából nem másról van szó, mintsem, hogy engedjék a böngészők, hogy hozzáférjünk a TCP réteghez, ami ugyebár a HTTP alapja, és így kétirányú, Full-Duplex kapcsolatot építhessünk ki.
var myWebSocket = new WebSocket('ws://my.example.com/application');
Ennyi a kód, amivel létrehozhatunk majd JavaScript-ben egy ilyen WebSocket-et. Ennek az objektumnak három Event Handler-t állíthatunk be:
Open
Amikor a kapcsolatunk létrejött hívódik meg.
Message
Minden, a szerver által push-olt üzenetkor hívódik meg. A kapott üzenetet az Event Handler-nek átadott event objektumon keresztül érhetjük el.
Close
A kapcsolat lezárásakor hívódik meg. Ezt a lezárást mind a kliens, mind a szerver kezdeményezheti.
A lényege
A WebSocket Server bármikor küldhet üzenetet a kliens számára, így nem kell a kliensnek a mai megoldásokkal időközönként ping-elni a szervert. Ezzel a megoldással időt, pénzt spórolhatunk meg:
- Időt és pénzt, mert az ilyen alkalmazások (IM, mail, tőzsdei figyelő, játékok, stb.) fejlesztési ideje töredékére csökken.
- Időt, mert az eseménykor azonnal megjelenik a kliensnél az eredmény, nem csak X idő múlva.
- Pénzt, mert felesleges sávszélességtől kíméljük meg a szerverünket.
Nagy jövőt látok a WebSocket-ben, szerintem hatalmas fejlődés lesz az internet történetében ez, az 1992-es HTTP modellt megújító megoldás! Mostmár csak a böngészőknek kell implementálniuk a WebSocket-et, amint lesz belőle draft specifikáció.