javascript - Skrive realtidsapps med NodeJS


Jeg ser frem til at bygge RT-webapps med NodeJS. Kommer fra Rails, har jeg forelsket mig i NodeJS og Async JS-programmering.

Kør nogle få eksperimenter med Node, og da jeg søgte efter værktøjer og ressourcer at vænne mig til, blev jeg overvældet af alting der.

Jeg fandt mange biblioteker og komponenter derovre, og blev ret forvirret over, hvordan en stor-skala vel skrevet og implementeret RT-webapp burde bygges.

Så appen vil køre over NodeJS, ved hjælp af Express-rammeværket.

Jeg læste om knockout.js, et klient-side bibliotek der tilbyder realtidsfunktioner som automatisk UI-opdatering, og jeg gætter på, at jeg kunne kombinere det med jQuery. Jeg fandt også socket.io. Forfatteren siger: Socket.IO har til formål at gøre realtidsapps mulige i alle browsere og mobile enheder, og udvisker forskellene mellem de forskellige transportmekanismer. Det er bekymringsfri realtid 100% i JavaScript. Så socket.io handler om kompatibilitet. Hvad med backbone.js? Hvor passer det ind?

Med så meget materiale blev jeg chokeret. Hvad burde jeg lære? Hvilke moduler er værd at studere? Jeg fokuserer på NodeJS og Express, men de fleste bøger/vejledninger dækker gamle versioner af NodeJS. Så jeg bliver vejledt af dets officielle API. Nu er jeg her for at bede om dit råd og for at organisere på en eller anden måde al den information, der findes derude. Ret mig, hvis mine antagelser ikke er præcise, vær venlig at pege mig i den rigtige retning og føl dig fri til at foreslå andre moduler, der kunne hjælpe mig i min læring.

Tak på forhånd

Svar #1

Det kan være nyttigt for dig at adskille node.js server-side biblioteker (via npm osv...) fra alle klient-side (browser) biblioteker og teknologier som jquery, backbone, knockout osv..., når du tænker over det. Selv socket.io, som åbner en vedvarende socket-forbindelse mellem browseren og serveren (for at undgå polling), dikterer ikke, hvilke klient-side teknologier du bruger.

Fokusér på at eksponere en solid web-API (tilfældigt eksempel) fra din server, og dine klientteknologier kan udskiftes, udvides osv. uden effekt på serveren. Det eneste sted, de krydser hinanden, er hvis du bruger en visningsteknologi som Jade. Det er også en mulighed at have en ren adskillelse, hvor serveren kun leverer klientfilerne, og din klient er en tykkere javascript-applikation (ved brug af knockout, jquery osv.), der kalder en god server-web-API.

Nogle folk forsøger at forene klient- og servermodellerne - for eksempel denne artikel, der bruger Backbone og Node. Det afhænger af, hvor meget data du arbejder med, for at sige, om det er gennemførligt, men det kobler klienten og serveren sammen og gør serveren stateful, hvilket kan have ulemper (skalering, kræver affinitet osv.). Personligt bliver jeg forsigtig med så meget magi (binding, tilstand, synkronisering osv.). Node handler om at holde tingene enkle, lette og hurtige. Det er en hurtig front-end netværksserver.

Mine 2 øre (og nogle kan være uenige). Start med node på serveren og vælg din lagerløsning (mongoDb osv...). Design et solidt RESTful (hypermedia) API - en god webapi uanset klienten. Start derefter med en grundlæggende html/css/js, måske en jquery-klient, og tilføj ting som knockout osv... efterhånden som du udvider dine klientfærdigheder. Det vil give dig mulighed for at udskifte dine klientteknologier uafhængigt af din server, efterhånden som de nye teknologivinde ændrer sig (og det vil de).

Det er kendetegnet ved et veludformet system - evnen til at udskifte komponenter/undersystemer uden at omskrive alt :)

Håber det hjælper med at rydde lidt op i tågen :)

Svar #2

Du vil måske kigge på Meteor, hvis du fokuserer på realtids Javascript-apps: http://meteor.com/