HTML5 WebSockets: internet nu som dialog!

I forhold til HTML5 går meget af snakken omkring de rigere brugeroplevelser, og i vid udstrækning udviklingen af mobilsites i bredeste forstand – altså alt fra telefoner til tablets. Det handler om at lave lækre mobile oplevelser med sprøde effekter og simpel interaktion. Det fokus skyldes naturligvis at brugere verden over har taget smartphones og tablets til sig, og det er blevet en naturlig og central del i manges hverdag at arbejde med mobile enheder.

WebsocketUd fra et rent teknisk synspunkt er det imidlertid ikke der hvor der er de største nyheder i HTML5. Ingen tvivl om at det har stor værdi at vi bedre kan udtrykke styling, animationer og at vi kan arbejde med rigere formularer. De ting har vi dog egentlig kunne løse før, det har bare været mere besværligt, ustandardiseret og javascript tungt.

Som udvikler er det derfor en større nyhed at der er mulighed for at anvende telefonens GPS til at vide hvor brugeren befinder sig, eller kameraet til at læse stregkoder. Endnu mere grundlæggende er det interessant at vi får mulighed fra at supplere http protokollen, som internetter helt grundlæggende bygger på, med andre former for kommunikation.

Udgangspunktet

Selvom man som bruger ikke tænker over det i hverdagen er http begrænset af at alt kommunikation foregår ved at klienten, som oftest brugerens browser, efterspørger noget på en server som sender det retur. Kommunikationen foregår et kald af gangen, uden nogen fast forbindelse imellem klient og server. Det vil sige at serveren i princippet ikke ved hvem klienten er, hvilket man så omgår på forskellige måder. Det der sker er i alle tilfælde at klienten selv sender noget med som serveren kan bruge til at identificere klienten, og derved kan serveren gemme oplysninger, holde styr på hvem der er logget ind osv.

Hvorfor et der så et problem tænker du måske? Det er det heller ikke nødvendigvis, med den måde vi bruger internettet på idag, hvor vi surfer rundt imellem forskellige sider for at søge information. Begrænsningen viser sig når man vil lave værktøjer hvor brugeren skal arbejde med data som hele tiden opdateres. Fordi serveren ikke har mulighed for at skubbe data til klienten løser man det ved at klienten bliver ved med at spørge serveren i et givent interval. Som du sikkert kan forestille dig er det ikke nogen særlig effektiv måde at kommunikere på.

Tænk hvis du hele tiden skulle spørge din bedre halvdel om han/hun havde noget at sige, fordi du var den eneste der havde mulighed for at indlede hver enkelt sætningsudveksling. Selvom nogen måske ville tænke det kunne være rart, da man så kunne få noget ro, så vil det være ret vanskeligt at få en dagligdag til at fungere.

Det  nye

Som en del af HTML5 kommer der to måder hvor serveren kan sende beskeder til klienten, hvilket er server sent events og websockets.

Server sent events fungerer ved at klienten kan abonnere på events som serveren udstiller, så det er stadig envejs kommunikation over http – det foregår bare den anden vej. Server sent events vil eksempelvis kunne bruges til at pushe statusopdateringer og nyheder ud. Server sent events har sin styrke i at det er ret nemt at implementere og bygger et godt stykke hen ad vejen på velkendt teknologi. Server sent events er implementeret i nyere browsere med undtagelse af IE.

Websockets tilbyder tilgengæld low level, full duplex kommunikation imellem server og klient via en helt ny protokol. Det åbner helt nye muligheder for direkte og hurtig kommunikation imellem server og klient. Derved vil man kunne lave systemer hvor brugere kan samarbejde i real-tid, spille spil eller i det hele taget bare få en virkelig hurtig og lækker brugsoplevelse. Idag vil man installere Skype, Live Messenger o.lign på sin egen pc, men det vil muligvis slet ikke være nødvendigt nu kommunikaitonen kan foregå i browseren via websockets. IE får websockets med fra version 10, Safari og Opera har delvis support allerede og Firefox og Chrome har allerede fuld support idag. Den gode nyhed for IE er imidlertid at Microsoft efter sigende anser det for at være en meget vigtig teknologi, så de vil efter sigende “gå længere” med deres implementering af websockets – hvad det så end kommer til at betyde.

SignalR

Hamlet monkey

Der findes et antal forskellige implementationer af websockets server side blandt andet Socket.IO til java og node.js, jetty til java og EM-WebSocket til Ruby.

Til .NET er der et for tiden meget omtalt projekt på github som hedder SignalR, som bliver udviklet af David Fowler og Damian Edwards. SignalR har de ting man skal bruge for at det er nemt at arbejde med i .NET – inklusiv nuget pakker til installation og  en pakke med et eksempel, som man blot kan installere hvis man vil se en hurtig demonstration.

SignalR skiller sig ud på den måde at det indeholder alt hvad man skal bruge både på klient og server for at bygge interantive realtime, multi-user applikationer. Det er opdelt sådan at SignalR.JS, SignalR.Client og SignalR.Client.WP7 er libraries man kan bruge som klient og SignalR.Server kan bruges til at hoste en server eller Azure kan bruges som host.

Det er implementeret sådan at det kan bruges på tværs af flere browsere fordi det kan degradere pænt. Det vil sige at websockets bliver brugt til kommunikation hvis det er muligt, men hvis det ikke er tilgængeligt vil der istedet blive brugt long polling og Ajax. Så man får en konsistent programmeringsmodel der anvender den bedste form for transport der er til rådighed. Med andre ord vil det være muligt at bruge idag, med nogen af de samme design overvejelser som jeg før har været inde på i forhold til polyfills. Kort genfortalt er spørgsmålet – kan man leve med at performance ikke er den samme på de browsere der degrader, imod at man får nogle muligheder man ellers ikke har?

I den helt nørdede ende er der en ret sjov demo hvor SignalR er blevet brugt til at løse “the Shakespearean monkeys problem”, som er interessant hvis man er til den slags. Det er jeg, så synes liiige den skal nævnes…

Opsummering

WebSockets giver mulighed for at bygge nogle løsninger som ikke tidligere har været mulige, og netop derfor er en stor del af udfordringen lige nu at få den gode ide, hvor man udnytter potentialet. Selvom jeg, i alt beskedenhed, lister nogle områder hvor det kan være interessant er det ikke særligt kreative bud. Hvis jeg havde den gode ide sad jeg nok heller ikke her og skrev, men var nok igang med at implementere den allerede 🙂

Sandheden tror jeg er at de fleste gode ideer opstår i samarbejde imellem kunder og udviklere. Så hvis du eksempelvis skulle have en god ide til hvordan din løsning kunne blive bedre ved at brugere i realtid kan samarbejde om design, sammensætning af produkter eller bare gøre kommunikationen i virksomheden mere effektiv, så kan det være tid til at se på at føre den ud i livet. Kom med dine forslag og lad os diskutere mulighederne, så de kan blive realiseret.

Teknologien er ny og rimeligt grøn, men værktøjerne er under udvikling, og det er et område hvor det går stærkt. Nogen software producenter er allerede begyndt at implementere websockets i deres serverløsninger. Blandt andet har google talk implementeret web sockets, så det vil sandsynligvis bliver flere muligheder for at anvende teknologien uden at man selv skal bygge både server og klient fra bunden. Det bliver I hvert fald spændende at se hvad teknologien ender med at blive brugt til i praksis – så jeg vil vride min hjerne og se om jeg kan komme med et bidrag til udviklingen…

Christian Holm Nielsen
Vertica A/S

Kategorier: Design, Forretning, Udvikling

Tagged as: ,

Skriv et svar

Udfyld dine oplysninger nedenfor eller klik på et ikon for at logge ind:

WordPress.com Logo

Du kommenterer med din WordPress.com konto. Log Out / Skift )

Twitter picture

Du kommenterer med din Twitter konto. Log Out / Skift )

Facebook photo

Du kommenterer med din Facebook konto. Log Out / Skift )

Google+ photo

Du kommenterer med din Google+ konto. Log Out / Skift )

Connecting to %s