>> Alle regte.
So het die fotonische lewe was, wat node.js as jy dit vandag ken?
Enigiets? Ja?
>> Dit was soos 'n raamwerk skryf JavaScript
Aansoeke breed -
>> OK, wat werk.
>> - Ek weet soos algemene gebruike soos -
of iets wat jy kan doen, is soos -
[Onhoorbaar Nota]
>> OK goed.
Ja, so dit is 'n raamwerk.
Dit is 'n enjin waarmee jy kan JavaScript-kode uit te voer
bediener site.
Dit kan beteken dat die eenvoudigste dinge
soos die skryf van 'n command line script nie in Python of Bash
of Ruby of PHP, maar net in JavaScript self
en die uitvoering van dit op 'n flikkerende command prompt.
Of jy kan eintlik loop dit binne 'n web bediener.
En in die waarheid binne node.js self,
hierdie raamwerk is 'n hele klomp biblioteke waaronder
in HTTP bediener ingeboude.
So, kan jy eintlik skryf 'n bediener soos ons sal sien
in net 'n oomblik, super maklik deur net om te verstaan ​​'n bietjie
van HTTP en TCP en hawens.
En jy kan 'n luister kuit web bediener sonder Apache,
sonder Microsoft se IIS.
Sonder enige ander sagteware geïnstalleer is,
jy kan net kuit hierdie en luister na die meeste 'n hawe
op die stelsel wat jy mag.
So geval en punte, laat my gaan en oop
hierdie voorbeeld, bediener-0.js.
So sien dat die top van hierdie lêer, net 'n klomp
van vervelige kommentaar en dan is daar 'n paar
verteenwoordigende reëls van die kode dat ons recurringly sal sien.
So, var HTTP kry vereis dat die "HTTP".
So ingeboude te node.js ' infrastruktuur is 'n hele klomp
van modules wat eintlik net biblioteke en alles is 'n soort
van die naam ruimte met Die unieke identifikasie
soos hierdie een is "HTTP".
So dat net soos in 'n baie tale soos Java en C + +
en C, net wanneer jy invoer of sluit
of in node praat vereis 'n module nie sy stukkies.
En al die geheue vereis kry gelaai
in geheue en dus gebruik.
So, jy soort van laai hierdie biblioteke of modules op aanvraag.
Dit beteken gaan voort en benodig
vir hierdie program die HTTP biblioteek,
en verwys na daardie biblioteek wyse van 'n veranderlike genoem HTTP.
Maar dit linkerkant simbool kon is iets genoem, cat,
bar, roof, beteken dit nie saak nie.
So in teenstelling met C + + en Java en C waar wanneer jy nodig
of die invoer van 'n biblioteek, dit het net soort
van word wêreldwyd toeganklik,
node.js modules is meer styf naamspasie.
Sodat eie - wat funksies is slegs toeganklik op die oomblik
deur middel van hierdie veranderlike naam.
Jy kan nie net begin tik metodes wat bestaan
in dit reg om 'n manier wat waarskynlik 'n goeie,
want dan jou namespace kry nie naastenby so deurmekaar
soos in 'n baie tale.
Alle reg, so nou as die gemeenskaplike stel, die skep van 'n HTTP-bediener
Jonathan [aanvaar spelling] moontlik was, is letterlik
so eenvoudig soos die roeping van die skep bediener metode binnekant
van die HTTP module.
So, is dit terug die verwysing
om 'n soort van web bediener.
Dit het tot Apache, nie noodwendig so swaar gewig.
Hierdie een is 'n bietjie makliker.
En nou, ek het net eenvoudig 'n paar dinge.
So die eerste, laat my blaai af na die onderkant hier
en slaan die hanteerder metode vir 'n oomblik.
En kennis van hierdie lyn van kode,
server.on wat wese beteken bediener -
luister, soos in jQuery kode,
luister vir 'n gebeurtenis genoem versoek
en net 'n raaiskoot wat moet ek doen
wanneer 'n versoek gebeurtenis brande in die bediener.
Ja?
>> Bel die funksie hanteerder.
So, letterlik voer die kode wat gekla is
deur hierdie veranderlike en eintlik nie 'n veranderlike te simbool,
wat is dit simbool verwys na?
Wel, hierdie naam van funksioneer hier
en hanteerder glo neem twee argumente.
Hoekom twee? Wel, as jy net lees die geen dokumentasie
vir hierdie spesifieke module, moet jy sal ingelig word dat die hanteerder
wat drie maande sal wees minstens twee argumente,
'n verwysing na die versoek,
en binnekant van die versoek dat ons beteken letterlik HTTP versoek.
So, al die HTTP-hoofde dat jy kan onthou
vanaf die begin van die semester of 'n voor die klas
of ervaring soos die kry lyn en die gasheer lyn
en User-agent lyn, al wat opgesluit en meer binne
van hierdie versoek voorwerp.
En die reaksie voorwerp gesorteer vir uitgaande data.
So, jy het 'n verwysing na 'n beswaar wat gaan om jou te laat
inligting terug te stuur na die leser deur die roeping van die metodes
op daardie laasgenoemde argument genoem Res vir reaksie.
Maar dit kan cat genoem word of bar, hierdie is net konvensies.
So nou, wat moet ek doen?
Wel, dit wat binne-in verskyn van hierdie super eenvoudige web bediener
dat ek implementering, ek is gaan die volgende te doen.
Ek gaan 'n HTTP te skryf kop met die status kode 200,
200 betekenis OK, alles is goed.
En dan, ek gaan om te slaag op blykbaar.
Wat is die data tipe van die tweede argument na regs kop?
>> Dit is 'n voorwerp?
>> Dit is 'n voorwerp met hoeveel sleutels en waardes?
Net een van elk, regs, een van die belangrikste waarde van paar.
So, 'inhoud soort ".
En die enigste rede Ek haal dit hier is
omdat die koppelteken kan wees conflated vir 'n minus teken
of iets soos dit.
So, ek het dit hier aanhaal, verse of dubbele aanhalingstekens.
Maar weereens algemene paradigma
in JavaScript-kode is dikwels aanhalingstekens hierdie dae,
kolon en dan die waarde.
So, dit is net die sogenaamde gedagte tipe.
Dit is 'n HTTP kop dit is letterlik gaan
inhoud koppelteken tipe kolon te wees teks streep plain wat gaan
uit die gestuur word bediener aan die leser
sodat die leser weet of dit as 'n rou teks te hardloop
of HTML of as 'n beeld of 'n fliek
of 'n flits lêer of enigiets anders.
Nou, waar ek eintlik wil te stuur in die liggaam van die bladsy?
Wel, net deur die lees van die dokumentasie
vir die reaksie voorwerp binnekant van hierdie biblioteek.
Ek sien dat daar is 'n reg metode en wat nie 'n string,
Miskien ander dinge, maar minimaal n string.
En die string is wat spoeg uit na die leser.
In hierdie geval die super eenvoudige, sy hallo wêreld,
maar dit kan wees opne bracket, html, naby bracket,
oop bracket kop, naby bracket en so meer,
Dit kan rou HTML wees.
Maar ons hou die voorbeeld eenvoudig deur die net spoeg
die eenvoudigste van die gees tipes wat waarskynlik teks / gewoon.
En dan Response.End net beteken die konneksie
en stuur alles wat ek het soort van gebuffer binnekant
van hierdie voorwerp terug aan die leser.
Ek is klaar. Alle regte.
So, die laaste ding wat Ek doen hier
en dit is 'n bietjie arbitrêre en bedoel om koel te wees,
word ek vertel die bediener uiteindelik te luister
op 'n sekere TCP deur standaard poort.
Onthou van die begin van die klas wat dienste -
of jy gewoonlik uniek identifiseer dit deur getalle,
AD is die web, 443 is HTTP gebaseer webtuistes, 22 is SSH, 21 is FTP
en 1337 is net arbitrêre maar dit is hoër as 1024
wat beteken op die meeste stelsels, kan ek dit gebruik
sonder super gebruiker voorregte.
So dit is net gerieflik.
Maar 8080 is in af - 'n algemene een, 8088, regtig iets groot
in die duisende as algemene maar dit is net meer elite.
Alle reg, so wat gebeur toe ek eintlik loop dit?
Wel, ek het nie net besoek nie die bladsy in 'n leser.
Hierdie lêer word genoem bediener-0.js.
Omdat weer, Apache is nou uit die prentjie
vir die tweede helfte van die kursus.
As ek wil web bediener, ek nodig het om te skryf
en dan loop die web bediener.
Maar dit blyk dat JavaScript beide op die kliënt se kant
en die bediener kant is 'n geïnterpreteer taal.
So, al wat ek nodig het, is 'n tolk.
So it's - as aandring om te hardloop knoop en dan bediener-0.js,
Ek kan of mag nie sien nie sommige uitset afhangende
op watter biblioteke Ek het ingesluit, blyk dit dat niks gebeur nie.
Maar laat my gaan na 'n leser en laat my gaan
dieselfde IP adres van my CS50 kliënte.
Maar dit kon net sowel wees my Mac
of my rekenaar en dan druk enter.
Dit lyk eintlik soos Apache.
Dit is soos die gids notering ons gekyk
op in die eerste helfte.
So, wat het ek verkeerd gedoen?
Ja.
[Onhoorbaar Nota]
Presies, reg?
So, Apache is nog steeds luister op die standaard poort 80.
Selfs al het ek kan dit verander, Ek kan dit afskakel almal saam
maar dit is steeds aan die gang.
Maar hierdie ouens kan beslis saamleef.
Ek het net hoef te sit kolon 1337 en dan miskien
of dalk nie 'n streep op die einde van hierdie hawe om toegang te verkry
dat hierdie bediener loop op.
En nou sien ek dat Hello, World teruggekeer het.
En ek kan herlaai getref baie keer as ek wil,
dit is nog steeds dien tot 'n bladsy.
Inderdaad as ek oop Chrome se inspekteur, gaan na netwerk
en dan herlaai die hele bladsy,
sien dat dit inderdaad was dit die versoek wat gestuur is.
As ek kyk na die rou bron,
sien my leser stuur al daardie dinge.
En dan is die reaksie van die bediener was super eenvoudig.
Daar is die 200.
As dit nie te laag op die skerm,
daar is die tipe inhoud.
En dan node.js soort van outomaties
vir my het bygevoeg dat die datum en al die ander dinge
dat die weblesers tipies verwag.
So, laat ons sien net 'n bietjie gesonde verstand tjek.
Laat my terug te gaan na die kode in bediener-0.js en laat my -
elke keer as ek gaan in die hanteerder,
laat ek net sê console.log.
("Ons het 'n besoeker!").
Ek het nie nodig om te hercompileren of iets soos dit,
dit is 'n geïnterpreteer taal.
So nou, laat my terug te gaan na die bladsy herlaai een, twee,
drie keer en gaan Terug na my venster.
En nou het Ek dit sien.
Wel, dit is vreemd, Ek sien ses lyne.
Interessante web trivia, hoekom het Ek kry ses versoek nie drie?
Ja?
[Onhoorbaar Nota]
Ja. So, as jy dalk weet wat die bietjie dom ikoon in die boonste
van die leser bar wat 'n baie
webwerwe gebruik kan 'n Harvard kruin,
dit kan 'n maatskappy logo of iets soos dit.
So, implementeer hierdie dae soort
van vermetelheid maak 'n addisionele HTTP-versoek
byna elke webwerf wat jy besoek nagaan indien daar
by verstek 'n lêer genoem favicon.ico
in dieselfde gids as Die lêer wat u versoek.
En as dit so is, dit sit die ikoon daar.
So al wat ons nou sien is presies dit.
En in die waarheid, laat ons kyk of ons kan sien dit eerder as die tipe
uit net: "Ons het 'n besoeker.
Laat my voor en uitset gaan.
En ek weet net dit uit kyk na die dokumentasie.
Daar is 'n eiendom binne die versoek voorwerp genoem URL
wat gebeur die pad te wees
wat versoek is in die werklike URL.
So, as ek weer die bediener eenvoudig deur rerunning knoop
op bediener-0.js en nou nie hierdie een, twee,
drie en gaan terug hier.
Daar is dit.
Sny is wat ek - die menslike versoek
in favicon.ico is wat die leser is
deur vermetelheid versoek.
Maar die punt is nie soveel dinge favicon
Maar hoe die bediener word bedryf.
Ja?
>> Waarom is wat sommige versoek om te wees?
>> Hoekom het dit te - uit die aard van hoe HTTP werk.
So, HTTP kan slegs 'n versoek 'n lêer op 'n tyd.
Browsers kan slim wees om hierdie dae
en hou die TCP verband open.
As jy het CS143 of oor die algemeen vertroud is met die netwerk,
sodat jy kan doeltreffendheid winste
deur die behoud van die netwerk socket oop
in die maak van verskeie HTTP versoeke in volgorde oor dit
maar hulle is 'n lêer per versoek.
So, as jy na iets soos -
Ek bedoel ons kan gaan na die meeste enige webtuistes.
As jy na - laat trek die Chrome se inspekteur hier.
Dit kan kry vul die meeste van die bladsy.
Gaan na die blad netwerk en gaan na www.cnn.com.
En wanneer jy na cnn.com, sy tuisblad -
die leser eerder afgrijselijk maak - nog steeds toe.
OK. Ten minste 289 HTTP versoeke weer en weer.
En dit is die rede waarom wanneer jy besoek veral opgeblase webwerwe,
hulle is stadig om te laai gevolg van al
van die bates wat hulle laai.
So, dit lyk soos 298.
Daar is dalk 'n paar Ajax gaan op hierdie punt of 'n
van die bates is net laag.
So, elkeen van daardie is 'n individuele versoek om terug te gaan
en weer, heen en weer.
En dit is hoekom vroeër, selfs al het ons soort van gepraat
daaroor ietwat denkbeeldig waar jy die script tag,
absoluut maak 'n verskil wanneer jy -
dit begin met 'n baie te hê van die verkeer en 'n baie
lêers word versoek.
En elkeen van hierdie verteenwoordig waarskynlik 'n beeld, 'n media-lêer,
'n JavaScript-lêer, CSS-lêer of die wil.
So, ons is reeds tot sowat 4 MB net
om te kyk na vandag se nuus.
Goeie vraag.
Alle regte.
So, wat is 'n paar van die die upsides al?
Reg, ons weet hoe om te maak webblaaie wat met PHP.
En baie van julle het in te die klas te weet Django
en Python of relings met Ruby.
So, hoekom moet ons nog 'n taal en infrastruktuur?
Wat is node.js veral goed op as jy weet?
[Pouse]
Sommige ding?
Nee? Ja?
>> Dit is nadelig vir boodskappe.
>> So, heruitzetting boodskappe.
So dit is waar en dit is waar vir 'n meer tegniese rede
en dat node.js en regtig JavaScript is veral
goed geskik vir asinchrone kode,
As waardeur jy ' die illusie
doen verskeie dinge op een slag.
Dus, selfs al is hulle werklik gebeur in volgorde,
inderdaad in die meeste gevalle, JavaScript beide kliënt kant
en bediener kant is enkele stringe.
Watter As jy neem 161 of selfs 61 beteken dat -
van hierdie program weet,
die tolk kan letterlik net een ding op 'n keer.
Maar dit is nie 'n groot vir iets soos 'n web bediener
waar jy dekades kan hê of honderde of miskien selfs duisende
gebruikers al probeer jou webblad om toegang te verkry
by die einste tyd.
En tog, wat daarop dui dat die hantering van hulle een
na die ander na die ander, veral as 'n
van daardie versoek soos ons gesien het op CNN mag nodig dien
up 300 lêers het voordat jy selfs na die volgende gebruiker
wat wil om te sien die sê die nuus.
Node.js is beter geskik vir omgewings soos dit.
Want wat gebeur, is enige stadig lopende proses
soos die lees van 'n lêer vanaf die skyf of bevraagteken 'n databasis of praat
na 'n ander netwerk bediener,
wat geneig is om 'n latency, reg?
As jy het om 61 of 161 veral al hierdie soort
perifere dienste is geneig om te veel stadiger
as enigiets doen binne dieselfde RAM en dieselfde CPU
wat sê in hierdie geval die bediener is eintlik hardloop.
Maar wat lekker is node.js is dat jy kan -
en JavaScript meer in die algemeen is dat jy iets daaraan kan doen
en dan sê: "Hmm, dit gaan
om my te neem 'n paar millisekondes of selfs 'n paar sekondes.
Laat my soort vurk dat af, " maar dit is nie 'n ware proses.
En dan wanneer dit gedoen is om wat stadig hardloop proses
soos gryp rye van 'n databasis of lees van 'n lêer. html
van die skyf, sal dit terug te kry om my eerder
as ek om te wag vir dit.
So, om dit meer duidelik te maak.
Dit is my manier van maak dit meer bekend is.
Alle reg, sodat dit is die Skud Shack in die vierkant.
Dit is 'n soort van 'n algemene paradigma
vir die verduideliking asynchronicity.
Dit is eintlik 'n goeie byvoorbeeld omdat Skud Shack
en lekker Burger is merkwaardig stadig vir wat hulle doen.
Maar die punt is dat hulle regtig 'n goeie by die neem van bestellings
en die neem van jou geld na wat jy wag vir jou kos.
So, dit is eintlik 'n beter ontwerp as die alternatief.
Omdat veronderstel jy in loop 'n winkel soos hierdie en jy het
aan die voorkant van die lyn en jy geplaas om jou bestelling en jy wil
Burger, as beste wat ek kan vertel, dit neem ten minste vyf
of meer minute eintlik 'n burger.
So, sou dit goed wees van 'n slegte besigheid model
As terwyl jy wag vir jou Burger, Alice [aanvaar spelling]
en Bob [aanvaar spelling] en Charlie [aanvaar spelling]
en almal is toustaan ​​agter jou
en jy letterlik blokkeer die lyn wag vir jou kos.
So natuurlik, by Skud Shack
en ander kitskos plekke doen dit nie,
hulle doen iets soos hierdie.
Hulle gee jou 'n klokkie.
En hulle soort stuur jou op jou pad.
En hulle bel jou terug deur die maak van hierdie klein ding vibreer
of flits om jou aandag te kry.
So, dit is letterlik wat?
Iets soos node.js doen.
As node.js of JavaScript meer algemeen gebruik word
en die programmeerder is slim genoeg
om te besef, "Jy weet wat?
Alles wat ek nodig het om reg te doen hier kan 'n aantal neem
millisekondes of sekondes.
Jy weet wat?
Laat my voor en nie te gaan noem dit sinkronies -
"Dit is ou blok almal in lyn, "-
laat my voort te gaan en soort van terugstaan
en net noem myself terug
wanneer daardie lang loop operasie is voltooi. "
En terug te bel natuurlik word verwys in hierdie geval
'n terugbel funksie, 'n verwysing na 'n Chuck van die kode
wat uitgevoer raak wanneer jou burger is gereed,
baie soos hierdie ding het 'n paar soort funksie ingeboude
dat dit begin vibreer of gons wanneer dit tyd is vir jou
om terug te genoem word die voorkant van die lyn.
So, wat beteken dit beteken in reële terme?
Wel, ons het om te werk ons ​​pad aan.
So, laat my gaan voort en doen dit eerste.
In bediener-1.js, laat my eerste vereenvoudig die kode
sodat ons baba stappe kan neem om die rigting 'n meer dwingende probleem.
Dit is presies dieselfde program wat ek geskryf het nie.
Maar wat het verander?
Daar is soort van 'n effense sintaktiese verskil
tussen hierdie en weergawe 0 'n oomblik gelede.
Wat spring uit by as jy onthou?
Ja Cynthia [aanvaar spelling]?
[Onhoorbaar Nota]
Ja. So nou het ons 'n lyn funksie oorgedra word in
Ons het ontslae geraak van die soort
van vrugteloos vernoem hanteerder funksie.
Nutteloos is slegs in daardie voor selfs noem dit in een plek,
Ek het nie regtig nodig het nie tyd mors gee dit 'n naam
en maak dit moeiliker om te lees die kode van bo na onder.
So, laat ons net verklaar inline is 'n anonieme funksie.
En ek doen twee ander dinge.
Ek is 'n beter gebruik van die dot-notasie.
Dus, net soos in jQuery, 'n baie knoop metodes kan saam vasgeketting word.
Sodat wanneer jy klaar is 'n beroep iets wat jy nie het nie
te wag om 'n nuwe lyn en noem 'n ander metode,
jy kan net ketting hulle saam.
En so op hierdie manier, kan ons regtig draai dit op.
So, dit is letterlik 'n web bediener in vyf lyne
van die kode totale teenstelling met die -
Anders as wat jy kan normaalweg hoef te doen om iets op te rig.
As ek gaan in bediener 2 nou, laat ons dit doen.
In bediener 2 - eintlik laat kom terug na die bediener 2.
Kom ons kyk nou oop ASYNC-0.js en spreek die probleem aan die hand.
So die eerste, laat ons gaan voor en oop
up ASYNC-0.js in die leser.
So ASYNC-0, laat my gaan terug na die leser.
Getref herlaai.
En nou, hierdie is 'n soort van die fout boodskap.
Inderdaad Ek sien 'n 500 in Chrome se inspekteur.
Maar laat my meer presies versoek hello.txt.
OK. So, dit blyk te werk.
So ASYNC-0.js lyk nie dien om iets vir streep.
Dit het geen standaard lêer te ondersteun.
Maar as ek uitdruklik versoek hello.txt,
wat blyk te wees ondersteun.
Hoekom is dit?
Wel, wat ek hier weg
en gedoen is geïmplementeer 'n super eenvoudige web bediener
wat toon waar asynchronicity kan nuttig wees.
En dit is geïmplementeer soos volg.
Eerstens, ek is met behulp van die HTTP module weer
maar ook FS wat waarskynlik staan ​​vir?
In die algemeen in CS, lêer stelsel.
OK lêer stelsel.
Vandaar weer FS, lêer stelsel.
Alle reg, so wat beteken dit gee my?
Funksies wat verband hou met lêers soos om geslaag het,
die opening van lêers, skryf dopgehou, lees dopgehou
en al daardie soort van dinge.
So nou sien, hierdie kode is dieselfde as voorheen,
die skep van die bediener, verby in 'n anonieme funksie.
Dit is 'n soort van arbitrêre.
Dit is nie 'n baie veilige web bediener.
In werklikheid is, kan jy toegang tot die meeste 'n lêer op my hardeskyf
of op die bediener se harde ry deur die uitvoering van hierdie kode
omdat ek net blindelings die veronderstelling dat ek gaan
aan te gryp wat die gebruiker versoek in die URL.
En ek gaan prefix met dot
sodat ek effens veilig
deur te sê watter lêer hulle kan versoek het om ten minste begin
in die huidige gids.
Natuurlik is daar 'n bedreiging hier.
Want as hulle plaas sluit wat?
In hul pad, kan hulle soort van werk om dit ook.
Dot, dot, reg?
So, as die gebruiker net sit dot, dot in die URL, in teorie,
hulle kan begin om my - en sê wagwoord lêer.
So, is dit nie bedoel verseker te word,
Dit is bedoel om maklik wees.
So hier, ek het 'n veranderlike wat is die aaneenskakellling van dot
wat teenwoordig gids en die versoek URL
wat ons gesien het voordat IS soos streep / of hello.txt.
So nou, dit kry 'n bietjie meer interessant.
Eerstens, let op die onderkant.
Ek luister op die dieselfde hawe as tevore.
Dus is die werklike interessante werk is binnekant van hier.
Elke keer as 'n versoek kom in deur die natuur
van hierdie kode, wat doen ek?
Ek bel lêer stelsel lees lêer metode,
verby in die pad wat ek wil om te lees.
En nou is dit Wat is interessant hier,
Dit is deur die implementering in asynchrone metode.
Jy kan nie 'n opbrengs waarde van lees lêer.
In werklikheid kennis, is daar geen linker uitdrukking
aan die linkerkant van lees lêer.
Dit gaan nie terug 'n waarde.
Inteendeel, dit roep 'n terugbel funksioneer wanneer dit gereed is
jou terug te gee 'n antwoord.
So weer duidelik te wees, terwyl dit in weleer,
in baie programme tale, as jy wou
'n lêer geval te lees in punt PHP,
lêer underscore kry beklemtoon die inhoud,
jy het 'n linker-hand uitdrukking in al die waarde na -
voor die gelyk teken, dit beteken dat jy die toeken
aan daardie veranderlike die terugkeer waarde van daardie funksie.
Jy kan dit doen in node.js, maar jy het gewoonlik
uitdruklik sinchrone te roep weergawes van funksies soos,
Ek dink dit is te lees sync lêer of sync lees lêer.
Ek het vergeet hoe hulle dit genoem.
En wat jou sal gee jy 'n terugkeer waarde.
Maar as die lêer op 'n afgeleë lêer stelsel
of skyf is net natuurlik stadig, dit kan 10 millisekondes
of 2 sekondes vir wat lêer om werklik terug te kom.
Intussen, geen ander web Besoekers word gediens
deur jou websit.
Jy blokkeer.
Dit is wat genoem blokkeer IO, toevoer / afvoer.
So hier is dit baie slimmer.
Want wat node.js gaan
om te doen by die interpretasie is die volgende,
dit gaan om te bel Lees die lêer metode,
probeer om een ​​van die lêer wat dit het 'n pad wat deur die waarde P.
En dan, indien en wanneer dit gereed is jou terug te gee die inhoud
van die lêer P, sal dit noem 'n funksie wie se handtekening is
deur konvensie die volgende.
Twee argumente, die eerste van wat dalk 'n fout voorwerp,
kapitaal E, dit is 'n voorwerp genoem fout of Null
As daar is geen so 'n fout.
En die tweede argument - neem 'n raaiskoot - gaan wees wat?
Dit is bekend as data natuurlik, maar wat data meer konkreet?
>> Inhoud?
>> Die inhoud van hello.txt in die voorbeeld wat ek getrek
in my leser 'n oomblik gelede.
So met ander woorde lêer te lees en baie node.js funksies
soos by geen waardes terugkeer nie.
Hulle noem verifikasie en slaag
aan diegene wat sou verifikasie tradisioneel die
terugkeer waarde.
Die onderstebo van hierdie benadering is
dat jy kan noem Lees lêer 'n T0.
Die terugbelfunksie mag nie een tik later genoem word
om so te praat by T, dit dalk 'n T1000 genoem word,
'n duisend bosluise later.
Maar die punt is dat die res van die kode in die lêer,
indien enige onmiddellik word uitgevoer terwyl node.js
En terwyl die lêer stelsel figure uit hoe om te lees
dat 'n lêer en kry dit terug na jou.
So jy maak dit -
so effektief die illusie
parallelisme terwyl laat stadiger hardloop prosesse is nie
blok die belangrike dinge, die deel wat die diens van die gebruikers.
So, hoe kan ons dit hanteer?
Dit is 'n baie algemene node.js paradigma.
En daar is manier om net te vereenvoudig dit is ons sal voor saam sien.
Ek het eers nagegaan indien Fout is nie null.
Dus, as dit is nie vals dan was daar 'n fout.
Ek weet nie wat dit is nie, Miskien die lêer nie bestaan ​​nie.
Ek het nie regte.
Die padnaam is verkeerd.
Enige aantal van die dinge wat kon verkeerd gaan.
Vir nou, ek gaan om te arbitrêr terugkeer van die 500
wat interne bediener fout.
Iets het verkeerd gegaan.
Ek het nie regtig omgee om dit te diagnoseer.
So, laat ons net sê die gebruiker dit is gebreek.
En dan, ek gaan res.end te doen,
en dit is snelskriknotasie.
Onthou dat verlede tyd wat ek gedoen het res.write
en dan het ek res.end.
As jy net wil stuur 'n reël van die produksie,
jy kan net doen dit alles in 'n keer met res.end met 'n argument,
en wat gaan stuur Wat ook al die fout boodskap is
binnekant van die voorwerp aan die leser.
Dit was 'n bietjie vlam boë onthou 'n oomblik gelede.
Ek het geen idee wat hierdie bedoel met die eerste oogopslag.
Maar toe ek versoek om 'n lêer wat nie bestaan ​​het nie -
Oeps, ons moet hardloop die bediener weer.
Toe ek 'n lêer versoek wat nie bestaan ​​het nie, EISDIR,
so iets dat dit 'n gids,
As ek doen 'n ewekansige string daar,
glo dit beteken dat die lêer nie eens bestaan ​​nie.
En dit is omdat my kode is eenvoudig te sê om te skryf
uit watter die rou Fout boodskap is,
so nie baie gebruikers vriendelik maar ten minste ek hanteer dit.
Anders, as dit was nie 'n fout wat ek doen?
Dieselfde as voor spit 'n 200 OK, 'n plain -
teks / gewoon gedagte tipe en dan spoeg uit die data.
En dit is hoekom ek kry die inhoud van hello.txt wat net
om te bevestig of ek gekyk by hello.txt,
dit is letterlik net Hello, World.
En as ek dit verander Hello, World, stoor die lêer,
tik die bediener, herlaai die bladsy.
Nou, ek kry die weergawe.
So, ek het eintlik net reimplemented n web bediener
soos bestaan ​​vir baie jaar, maar met behulp van node.js.
Maar ons kan dit doen selfs meer skoon.
Laat my oopmaak ASYNC-1.js.
Nou, let ek te voeg 'n ander module hierdie tyd,
Blykbaar het die pad module.
Nou, dit is 'n goeie geleentheid om te kyk
na wat die dokumentasie lyk.
Node.js is dokumentasie.
Soos PHP Ek dink eintlik redelik goed
en reguit vorentoe.
As ek gaan na node.js en Google en soek vir node.js pad,
wat jy gewoonlik sien is 'n direkte skakel na 'n URL
dat ek sit hier 'n oomblik gelede.
So / API is die amptelike plek om te gaan vir die dokumentasie.
En wat jy sien by die top
van node se amptelike dokumentasie is al die metodes en
of eiendomme binne hierdie spesifieke module,
een van wat genoem word sluit.
En sluit aan by die helper funksie wat gaan om my te laat
om nie die moeite met al die plus punte.
En dit het die bygevoeg bonus as jy sien
uit die hawe is dit ook normaliseer die gevolglike pad.
So, as die gebruiker of jy het kolle of dot kolle of enige kombinasie
van daardie soorte van relatiewe paaie, onder die upsides
van die aangesluit metode is dat dit gaan alles wat om skoon te maak
en gee jou 'n kanoniese pad sonder enige
van daardie kolle of dot kolle.
So, dit is 'n goeie ding in generaal vir sekuriteit ten minste
As jy die beheer van die terugkeer waarde wat ek is nie
in hierdie spesifieke geval eenvoudig.
Maar ek het dit wil gebruik.
So, Ek skep nou die pad 'n bietjie meer programmaties
met path.join plaas van Raw aaneenskakellling.
So, dit is 'n bietjie skoner as voorheen.
En nou sien ek 'n bietjie meer intelligente eerder
as net blindelings probeer om die lêer te lees,
Ek gaan eintlik noem fs.stat.
So, as jy vertroud is
met 'n lae-vlak C funksies en C, selfs PHP.
Baie van die biblioteke hierdie funksie stat opbrengste
wese statistieke op 'n lêer, die grootte van die lêer,
die regte, die naam en dinge soos wat,
en ook implisiet as die lêer bestaan ​​of nie,
en as dit 'n lêer of gids
of simboliese skakel of iets anders.
So nou sien, is ek roep fs.stat.
En dan glo volgens na die dokumentasie,
Ek moet terug te kry fout voorwerp
of Null gevolg deur 'n statistieke voorwerp.
Maar laat ons kyk hierdie, node.js.fs.
Hier is die lêer stelsel dokumentasie.
Laat my kyk vir statistieke.
Daar is 'n baie meer van funksies hier.
Oeps, wat stat sync, fs.stat.
So hier is dit asynchrone statistieke (2).
Dit is wat beteken dat as jy onthou van die hoof bladsye,
hoofstuk 2 van die hoofblad
wat beteken dit is letterlik net 'n knoop implementering
van die lae-vlak stelsel funksie stat.
So, die terugbel kry twee argumente, fout en stat
waar stat is 'n fs.stats beswaar.
So laat ons sien wat die voorwerp veronderstel is om te lyk.
Kom ons kliek die skakel en ek sien.
Die statistieke voorwerp bevat glo 'n paar helper metode,
is lêer, is die gids, is 'n klomp van die ander dinge.
Dit is die "is" lêer wat ek omgee oor in hierdie spesifieke geval.
So hier gaan ek.
As daar 'n fout is, dan laat my net hierdie keer borgtog
en aanvaar.
As daar 'n fout, dit was waarskynlik 'n 404-lêer nie gevind nie.
Dit kan iets anders wees
maar ek is 'n bietjie lui hier net om te fokus
op die meer interessante inligting.
Maar vir die gebruiker se doeleindes, is die lêer nie gevind nie,
As daar 'n fout vermelding van die lêer.
Anders, laat my kyk of die lêer is inderdaad 'n werklike lêer.
So as dit nie 'n lêer, dit bestaan.
Daar is iets daar, maar dit is waarskynlik 'n gids
of dalk 'n simboliese skakel
of iets anders wat funky op die lêer stelsel.
Óf manier, die gebruiker moet dit nie sien nie.
So nou, is ek net gaan om te spoeg
uit konvensionele ongemagtigde 403.
Maar weereens net 'n konvensie,
Ek kon gebruik het iets anders in teorie.
En dan laastens, laat my probeer om die lêer te lees.
So, laat my rol af.
En nou sien, dit is waar Die kode kan 'n bietjie slordig kry,
agterkom dat ek vra fs.readFile verby
in dieselfde pad, dieselfde terugbel as laaste tyd,
sodat die vorige weergawe.
En dan as ek wil vind -
As ek dit nie doen nie, Ek spoeg uit 500.
En as ek nie kry nie, hoe lyn gaan ons hier te sien?
Ons gaan die FS te sien skryf kop 200 waarskynlik
en 'n res.end stuur die werklike data.
Maar dit agterkom.
En dit is nie demonstratiewe van die ergste geval scenario.
Maar ek het hierdie stat oproep hier as wat ek het 'n paar dinge.
Dan, ek het 'n ander asynchrone oproep hier,
sodat meer inkeping.
So, net soort van ekstrapoleer as jy kon van hier.
Watter probleem is geneig om op te staan ​​met die taal soos JavaScript
in hierdie omgewing waar jy terugkeer waardes het nie
maar eerder jy hierdie verifikasie.
En natuurlik, dit is net 'n stilistiese ding die feit
dat ek hou insp.
Maar neem dit aan die logiese volgende stap.
Veronderstel daar was een of twee of drie ander funksies
wat ek nodig het om te voer was deur die natuur asynchrone,
en daarom moet jy net 'n soort hou insp om dit te hanteer,
om dit te hanteer, dit te hanteer.
Jy soort van terugbel hel as mense noem dit
waar jou kode begin baie wye te kry
en eerlik werklik moeilik om te lees.
Soos dit is, ek kan soort van skaars vertel dat dit is 'n soort van 'n vloei
wat hierdie soort
van die stilistiese en skuins ding gaan hier aan.
So, dit is nie ideaal nie, want dit kan baie vinnig '
lomp, selfs al twee asynchrone oproepe nie
so 'n groot deal.
So, kan ons vermy dit, reg?
Jy kan bijhorend het dat Ek misclicked 'n oomblik gelede.
In die dokumentasie, jy weet, dit lyk asof daar statSync.
En statSync neem nie 'n terugbel as 'n argument.
Dit neem net die pad, want dit blykbaar doen wat?
Dit gee 'n geval van fs.stats.
So dit kan wees om jou eerste instink, reg?
Veral as terugbel funksies
en asynchronicity is 'n bietjie nuut vir jou, eerlik,
die maklikste benadering is waarskynlik net verhoed dat die probleem al
saam, gaan terug na sorteer van CS101 styl ontwikkeling
waar jy funksie bel of metode, gee die waarde,
noem funksie, opgawes die waarde,
funksie, gee die waarde.
En ek kan dus gebruik fs.statSync
wat letterlik dieselfde maar dit is 'n sinkrone weergawe
wat beteken dat dit terug die waarde.
Dit maak nie verby 'n waarde aan 'n terugbel.
Maar hoekom sou dit waarskynlik 'n suboptimale tydelike oplossing te wend
te sinchrone funksies?
Ja?
[Onhoorbaar Nota]
Presies, dit neem 'n lang tyd.
Jy is net stadiger alles af.
Omdat baie soos Skud Shack of Tasty Burger, indien hulle ontslae geraak
van diegene Buzzers en gemaak het, die kliënt staan ​​by die voorkant
van die lyn totdat jou kos is gereed selfs voor die neem van die einde
van die persoon agter jy natuurlik
deur sit vertraag.
Mense begin verlaat, jy soort van teken pakkies.
Jy kan enige aantal maak van analogieë hier.
Maar in kort, dit is waarskynlik nie 'n goeie ding
vir besigheid of vir die bediener.
So asynchrone kode is tipies goeie ten minste
in hierdie geval, maar dit is beslis begin 'n paar angs veroorsaak.
En in die feit dat ek dit waag om te sê wanneer eerste skryf van hierdie dinge,
dit sal 'n bietjie neem bietjie gewoond raak aan.
So, laat ons begin te rus jy met 'n paar biblioteke
en tegnieke te maak dit 'n bietjie makliker te maak.
So, een van die mees algemene biblioteke is gewild biblioteke
hierdie dae, is hierdie een wat geroep is async.js.
En soos 'n baie node.js biblioteke of modules,
dit is al open source.
Hulle het byna almal leef en kry middelpunt bronne wat soort
van die de facto plaas hierdie dinge te stoor.
En dan is daar 'n hele infrastruktuur
vir die installering van hierdie dinge genoem NPM, Node Package Manager
wat as jy vertroud is met EvanTube is 'n soort
van soos inligting of inligting te kry.
As jy vertroud is Red Hat en Fedora
soos in die toestel, dit is soos yum.
Maar dit is 'n knoop - dit is 'n pakket bestuurder net
vir hierdie spesifieke omgewing.
Dus, kan ons aflaai en installeer dinge soos die ASYNC biblioteek
en ook 'n ander een het die beklemtoon biblioteek of module.
Maar hierdie so ver FS, HTTP, pad,
dit is al kom gebou in te knoop.
So as ons na die API Docs, jy eintlik sien wat gebou
in node jy gratis 'n hele klomp van die modules.
Maar baie van die mooi mense op die internet het dosyne gemaak
Indien nie honderde ander biblioteke
om dinge te doen beter of anders.
So, laat ons 'n blik op hoe hierdie biblioteek werk.
So, die meeste van hierdie kode is identies vir die oomblik.
Ek het 'n pad om geskep tot bo-op.
En nou is ek 'n beroep async.series.
So het die ASYNC biblioteek, is dit net 'n biblioteek wat kan jy
om te slaag of verhoog tipies van funksies genoem een ​​kry
na die ander net om te soort vermy dat inkeping kwessie,
en eintlik net die geestelike Vrees wat altyd sal opstaan
ten minste wanneer jy die eerste keer duik in hierdie op jou eie
met die ontwikkeling asynchroon.
Soos in syde, as jy geneem 161 en jy met slotte behandel het
en verhoog voorwaardes en al van daardie, asynchrone kode
en 'n omgewing soos node.js is eintlik baie,
baie makliker waarskynlik
as eintlik skryf multi-kode.
Elke keer as jy multi-kode,
jy het verhoog voorwaardes.
Jy hoef te bekommer oor twee drade wat
vir dieselfde hulpbronne skyf of geheue.
Die skoonheid van JavaScript
in node.js is daar letterlik net een draad,
beteken wat die leser
of die bediener kan slegs doen een ding op 'n keer.
Dis net vir jou, die programmeerder
'n geestelike model te hou vir hoe jy soort van tou dinge
en uit te vind hoe jou kode te bestel.
Maar jy nooit hoef te bekommer oor samel voorwaardes
in baie dieselfde manier op minste met rou-kode soos hierdie.
So, dit is 'n bietjie hard om hier grack.
Maar - So laat my oopmaak die dokumente vir net 'n oomblik.
Die async.js biblioteek wat Net so is baie googleable,
dit leef in die GitHub verpotten soos 'n klomp van hulle.
Moenie dink dit is oppervlakkig, dit is nie.
Laat my rol af aan die Read Me hier.
So, die ASYNC biblioteek bied 'n hele klomp
metodes binnekant van dit.
Byvoorbeeld, daar is ' 'n metode genoem het,
wat as ek kliek dit net sy dokumente te sien vir 'n oomblik,
dit is 'n funksie of metode wat u toelaat om iets te doen
soos 'n vier elk maar in parallel.
Hulle is almal gaan gebeur potensieel in parallel.
En die metode elk is slegs gaan om terug te keer na jou toe al
van die iterasies is voltooi.
So miskien is hulle gebeur die een na die ander.
Ideaal, dit gebeur wese in parallel.
Maar die metode nie bel jou terug.
Dit maak nie gons jou sirene totdat al
van die elemente wat jy het herhaal oor voltooi het.
So, dit is net 'n mooi manier
vermy die gebruik van 'n eenvoudige vier lus
maar eintlik doen iets asynchroon.
Maar nou meer direk verwant aan hierdie voorbeeld,
sien daar is dié reeks metode.
En laat my net trek 'n eenvoudige kanonieke voorbeeld.
So het die ASYNC biblioteke, reeks metode neem in soos geïmpliseer
deur die vierkantige hakies in skikking.
Wat is die data tipes van die elemente
in hierdie reeks gebaseer op 'n eenvoudige voorbeeld?
Dit is 'n verskeidenheid van funksies.
So in C, sou jy bel hulle funksioneer wysers.
In JavaScript, daar is meer behoorlik verwys na funksies
of anonieme funksies.
En dit net beteken, skikkings
natuurlik bestel van nul tot op.
So, het hulle in stand gehou 'n bevel wat 'n goeie
vir 'n reeks, want reeks natuurlik middel om iets te doen
ten einde nie in parallel.
So, dit net beteken dat hierdie funksie sal uitgevoer te kry,
dan is hierdie een, dan is dit een, hierdie een, dan is hierdie een,
Maar daar is baie
totdat die opsionele terugbel genoem word.
So, neem kennis van die paradigma hier.
En selfs al is dit is een man se biblioteek,
dit is verteenwoordigend van die baie algemeen JavaScript paradigma
om weer die gebruik van verifikasie.
So, let op wat jy hier doen.
In die eerste funksie om geslaag in via hierdie skikking,
jy omskryf 'n anonieme funksie net met die funksie.
Maar kennisgewing wat blykbaar volgens hierdie dokumentasie,
dat anonieme funksie moet neem 'n argument terugbel.
Dit gaan 'n wyser te wees of 'n verwysing na 'n funksie
dat jy wanneer jou moet bel kode is gereed om 'n waarde om terug te keer.
So weer, in teenstelling met net vir tipies prosedurele programmering
waar jy gebruik om te terugkeer waardes onmiddellik
dat een verskil met gebruik van 'n biblioteek soos hierdie
in asynchrone ontwikkeling meer Die algemeen, is wanneer jy gereed is om
'n waarde terug te keer uit 'n databasis van 'n lêer,
van 'n rekenkundige uitdrukking, dit is aan jou
die callback funksie te roep.
En die lekker ding oor hierdie biblioteek
As ons lees die dokumente meer versigtig is dat,
as en slegs as al die verifikasie area genoem
sonder 'n fout voorwerp, sal die hele ding daarin slaag?
So met ander woorde, As daar is 2,
As daar 10 anoniem funksies
in hierdie reeks dus in hierdie reeks,
slegs indien almal van hulle slaag,
sal die finale opsionele terugbel word suksesvol beskou?
As iemand van hulle versuim, elke funksie
nadat dit sal nie selfs uitgevoer word.
So, dit is 'n mooi manier van sorteer van 'n daisy-ketting
dat aborteer voortydig As iets verkeerd gaan.
So om dit te sien in die konteks, hier is hoe ons kan weer implementeer
dat die vorige program.
Ek kry die pad as voorheen, so dit is die maklike deel.
Ek kopieer plak hierdie geraamte kode
van die dokumentasie is daar async.series oop hakies,
oop vierkante hakies.
En nou sien ek een funksie in hierdie begin
van 'n tweede, sal ons sien waar ons gaan uit hierdie.
En nou sien, dit is 'n bietjie kompleks by die eerste
maar fokus net op dit reël vir reël.
Fs.stat beteken kry die statistieke of wat nie van die pad.
Noem dit terugbel wanneer dit gereed is.
Hierdie kode is dieselfde as voorheen.
As daar 'n fout, daar is 'n verskil nou.
Weereens, die baie algemene paradigma in node.js ontwikkeling is
As iets verkeerd gaan en 'n verifikasie moet weet
wat deur konvensie, die eerste argument tot 'n terugbel gaan
te wees nie, as alles goed is of 'n verwysing na 'n fout voorwerp,
kapitaal E. Dit is soos 'n fout klas wat wêreldwyd bestaan
maar meer oor dit 'n ander tyd.
So deur dit te doen, indien daar is 'n fout, wat is die implikasie?
Wel gebaseer op wat ek het gesê die reeks nie,
is as enigiets gaan verkeerd is, ons het net soort van wil
die hele reeks te staak anonieme funksie noem.
So, is dit voldoende om vir my te net terug terugbel verby
in die fout voorwerp.
Want as stat het my terug 'n fout,
Ek kon 'n nuwe Fout voorwerp van my eie,
maar ek het nie regtig omgee om,
Ek wil net om te slaag, ongeag die fout is wat eintlik gebeur
sodat ek dit kan slaag hierdie terugbel.
En net om duidelik te wees, die terugkeer nie streng nodig is.
Ek wil in wese om dit te doen maar ek wou nou nie "terug te keer;
/ / So dat daar nie meer kode hier voer. "
So weer 'n ander algemene konvensie in JavaScript,
selfs al is jy nie terugkeer 'n waarde per se,
jy wil die waarde te slaag die terugbelfunksie
maar dan moet jy wil hê uitvoering te stop
van die funksie is jy in die triviale manier
om dit te doen, is net te noem hier terugkeer.
Maar daar is niks verkeerd nie,
Ons doen net terugkeer terugbel fout, selfs al is dit gaan
om terug te keer in ongedefinieerde waarde.
Alle reg, dit beteken nie terug 'n waarde waarskynlik.
Al wat ek omgee, is 'n instap verdere uitvoering.
So, my samesmelting van hierdie twee lyne is net 'n stilis
konvensie net om te het die getal van die lyn
van die kode Ek het net geskryf 2-1.
So, wat anders?
As daar nie 'n fout -
eintlik om duidelik te wees Ek kan ook voorkom
dat deur dit te doen, indien anders.
Maar weereens, 'n ander algemene paradigma is tjek
vir jou foute tot bo-op en dan net terugkeer eerder as om voort
jou kode met ingekeep elses en elses en elses.
So as dit nie 'n lêer, nou, jy weet,
Ek wil om dit te hanteer 'n bietjie spesiaal.
So hier soos in Java of C + + of 'n paar ander tale,
hier is hoe kan instansieer 'n beswaar fout verby te tik
in 'n standaard boodskap van nie 'n lêer
en dit is net ietwat arbitrêr.
Maar ek is 'n teken 'n fout van my eie.
En wat beteken hierdie laaste lyn vermoedelik dui?
Alles is goed.
As jy slaag in nul vir die fout parameter, wat net beteken
deur konvensie alles is goed.
So, wat beteken dat dit wat sal logies gebeur?
As nul is verby die terugbel
wat beteken dat hierdie anonieme funksie het daarin geslaag
om so te praat.
So, wat moet die reeks metode voorafgaan en nou nie gebaseer
op my verbale definisie vroeër?
[Onhoorbaar Nota]
Skuif op na die volgende een, reg?
As dit 'n nie-nul teruggekeer waarde, sou dit net staak
en nie meer anoniem funksie genoem sou raak.
Maar omdat dit nie het nie, dan dit sal genoem raak volgende.
So, die logika hier is pretty much dieselfde as voorheen
en ons sal sien hoe om skoon te maak hierdie up verder in 'n oomblik.
Ek besef dit is 'n soort van 'n baie
al mondelings te absorbeer en visueel.
Maar nou sien, die tweede anonieme funksie wat ek wil
uit te voer in 'n reeks is om te probeer om die lêer te lees.
Noem dit terugbel wanneer jy gereed is.
As daar 'n fout is, net sein dit deur middel van die terugbel
sodat die res van die hierdie dinge aborteer.
Else terugkeer null.
Maar hoekom is ek verby in twee argumente?
Wel hierdie keer as ek lees die lêer en terug te kry
as 'n veranderlike genoem data,
Ek wil nie net dui alles goed deur die terugkeer van nul
vir die eerste argument.
Ek wil die werklike om terug te keer data as die tweede argument.
Want as ek verder lees in die dokumentasie,
agterkom laaste stuk van die kode vierkante hakies beteken dit is die
einde van die reeks.
Daar was net twee anonieme funksies in hierdie reeks.
As daar 'n fout hier nie, dan Ek weet dat een van die skakels
in hierdie ketting so om te praat misluk.
So met ander woorde, die fout gaan 'n fout voorwerp
Dit is nul indien enige van hierdie ouens het misluk.
En as dit die geval is, is ek net gaan om borgtog uit en ek gaan
om te sê 400 wat beteken versoek misluk,
dit is baie generiese fout boodskap.
En dan, ek gaan om te druk die fout boodskap.
So, ek is nie pla om te super anale hierdie tyd,
Ek gaan nie om te onderskei tussen 500 en 404 en 403,
Ek is net 'n soort blindelings my hand waai
en sê iets verkeerd geloop het.
Maar as daar niks verkeerd gedoen gaan
Ek gaan om dit te stuur res.end verby hierdie data.
Nou dit lyk 'n bietjie kripties.
Maar weer, as ek lees die dokumentasie,
die tweede argument te hierdie laaste, finale terugbel,
die ou wat nog net uitgevoer Sodra die reeks word gedoen
uitvoering of 'n gedeelte is daar van, dit gaan 'n skikking te wees
van al die tweede argumente
wat geslaag is die terugbel.
Nou, dit blyk dat die enigste skakel in hierdie reeks
wat eintlik terug te keer na die tweede argument is hierdie een hier.
So ek gaan soort van op 'n sprong van die geloof gebruik net veronderstel
vir die oomblik wat Laasgenoemde is 'n metode
wat gee jou die laaste elemente van 'n skikking.
Omdat hierdie skikking dit is oorgedra
vir my het twee EKSPONENTE, nul en een.
Dis net 'n nul het geen waarde want hierdie man terug -
nie in 'n tweede slaag argument, maar hierdie man doen.
So lei bracket nul is niks,
resultate bracket een bevat wat,
As jy is volgende langs tot op hierdie punt?
Die lêer, die hallo, wêreld inhoud vermoedelik,
so dit is hoe ek eintlik druk.
En laat my klaar een detail hier.
As ek dit doen hierdie soort van ou skool, as ek wil te kry
op die laaste elemente, as ek kon doen resultate [results.length-1],
Dit is soort van die ou skool manier
toegang tot die laaste elemente in - of nul-indeks skikking.
Maar soos in die kant, onthou dat ek hierdie biblioteek
hier onderstreep wat deur konvensie is net genoem
letterlik 'n underscore karakter wat nie spesiale,
dit net lyk koel soos dollar-teken nie vir jQuery.
Dit is net 'n helper metode beklemtoon dot laaste
wat nie presies dieselfde ding.
En as jy nog nooit dit gebruik voor onderstreep JS beide
vir die kliënt kant kodering
en bediener kant is 'n wonderlik nuttige biblioteek
dat soveel mense beskryf dit wil jQuery bevat al
van die metodes, mense wou gekom het met JavaScript self.
OK.
>> So, soos mooi vir my en Ek kyk in die reeks,
jy het soos terugbel as 'n argument?
>> Ja.
>> Soos so wanneer jy eintlik soos druk wat in,
en soos wat dit doen bedoel wanneer jy net
soos terugbel en dan doen soos -
[Onhoorbaar Nota]
>> OK, goeie vraag.
So, laat my toe om die ASYNC hoofblad hier
of die dokumentasie oor GetHub.
So dit is die kanonieke struktuur.
As jy met behulp van hierdie oproep spesifieke metode reeks,
daar is twee groot dele om dit te.
Een is 'n verskeidenheid van anonieme funksies
en twee is 'n finale terugbel funksie wat eintlik
uitgevoer op die heel einde van die reeks.
Nou, as ons zoom in 'n bietjie nader op die eerste
van die groot dinge, die verskeidenheid van anonieme funksies
deur vereistes van hierdie man se dokumentasie
'n anonieme wees funksie wat '
in een argument genoem terugbel of cat of bar, beteken dit nie saak nie
maar hy is noem dit terugbel.
En dit is 'n soort van jou sirene dat Skud Shack hande het jy.
Dit is die wyse waarop jy kan 'n waarde terug
aan die kliënt omdat jy kan nie net terug te keer letterlik nie.
Jy het om dit te doen deur weg van hierdie terugbel.
Want as binnekant van hierdie funksie is 'n stadige loop
kode soos navraag databasis, lees die lêer van die lêer stelsel,
jy wil nie daar wag en blok almal,
jy wil die terugbel om te bel.
So, dit is letterlik die naam van die argument.
Maar net soos in C, moet jy het funksie wysers.
In Java jy verwysingstelsel metodes
en dieselfde hier in JavaScript.
Dit is 'n veranderlike, maar sy soort is funksie.
So eenvoudig deur sy naam te skryf of 'n terugbel of cat
of bar, dan open hakies en naby hakies,
jy die uitvoering van daardie op daardie funksie.
En verby 'n nul wat beteken nul fout en een
wat beteken dit is die data wat ek wil om in te slaag
En dan die stuk om duidelik te wees, dit is 'n ander terugbel.
En dit is nie terugbel genoem,
dit is net konseptueel is 'n terugbel metode funksie
want dit is genoem per definisie
van die skrywer se biblioteek toe die hele reeks voltooi het
of deelversameling daarvan indien 'n Fout het vroeër gebeur het nie.
So, die naam van terugbelfunksie, roep terugbelfunksie,
naam van terugbelfunksie, roep terugbelfunksie,
verskillende terugbel funksioneer almal saam.
>> Ons het nou soos terugbel definieer?
>> Nee, want hierdie man sal slaag in jou skikking
anonieme funksies,
'n verwysing na die kode hy wil uit te voer.
Presies, alles reg.
So, sê asseblief dat die kode kry 'n bietjie makliker.
So, dit kan.
En as jy soos ek, neem troos in ten minste te weet,
dit neem 'n rukkie om te gewoond te raak aan hierdie.
Maar ons kan skoon hierdie 'n bietjie,
nie te veel op te gooi vir jou maar hier is nog 'n variasie
en sy met 'n ander metode
in dieselfde biblioteek genoem waterval.
Die positiewe sy van wat Anders reeks waar elke
van daardie anonieme funksies wese uitgevoer
onafhanklik van elk van die ander.
Waterval soos die naam voorstel laat die boonste funksies
soort slaag in waardes aan die laer-funksie,
soort van soos 'n waterval van water.
So het die onderstebo van hierdie is dat ek soort
van gebruik hierdie tot my voordeel.
In async.waterfall, kennis van die volgende.
Ek kan net noem fs.stat verby in die pad
dat ek wil te kry statistieke oor.
En dan onthou voordat ek het 'n anonieme funksie
dat het twee argumente dwaal,
ERWACHTE en dan het ek genoem die terugbelfunksie hand?
In ander woord is net te wees duidelik, onthou dat vroeër
in ASYNC 2, ek het al van hierdie nare werk.
Ek het fs.stat geslaag in P,
verklaar my eie anonieme funksie.
Ek het toe nagegaan indien fout nie null dan het ek dit gedoen het,
anders wat ek gedoen het, het die hele skoonheid van volgende konvensies
soos in node.js is dat terugbel funksies in die algemeen is bedoel
ten minste een argument te neem, 'n Fout voorwerp gevolg deur nul
of meer bruikbare waardes.
So neem kennis van die paradigma hier,
hierdie terugbelfunksie Ek is verklaar volg presies
paradigma, wat hierdie man se ASYNC Biblioteek.
Wat is om dit te sê, hoekom is Ek implementering van my eie terugbel
metode as die skrywer van hierdie biblioteek is my letterlik oorhandig
op 'n skinkbord so te sê, 'n terugbelfunksie ek kan gebruik?
So, ek kan net slaag in die verwys hy my gegee
sodat onmiddellik, my 'n paar lyne
van die kode een lyn van kode.
Nou, waar gaan ons met hierdie?
Die volgende funksie wat Ek wil uit te voer,
die volgende anonieme funksie in hierdie reeks
van funksies doen die volgende.
Kennis eerste stat is die eerste argument.
So iets het reeds verander.
Nou, hierdie man wat het die biblioteek -
en ek sê man want dit is 'n man.
Hierdie man wat hierdie biblioteek geskryf is dokumentasie waarborge
dat indien hierdie funksie hier gaan my terug 'n fout voorwerp
of nul gevolg deur 'n koma geskeide lys van ander waardes,
Hy sal seker maak dat diegene ander waardes is handed
hierdie anonieme funksie in volgorde van links na regs.
En wat gebruik word om net 'n wees terugbelfunksie alleen eenvoudig
word die laaste so 'n argument.
Nou, ek weet nie wie ek is fokus op net jy weet.
Maar nou, wat is die wegneem hier?
So, ons weet uit die dokumentasie
of die vorige paar voorbeelde
dat fs.stat uiteindelik verwag 'n terugbel met twee argumente,
Die fout voorwerp wat 'n Fout voorwerp of nul gevolg
deur 'n verwysing na statistieke beswaar.
So as ek dink oor wat, Fout voorwerp koma statistieke beswaar,
wat pas in die paradigma van die persoon se biblioteek.
So, ek kan net sê, want Ek het nie die tweede argument
dat dit is - wat gaan geslaag moet word deur fs.stat
die callback dwaal, statistieke deur definisie van hierdie biblioteek,
Ek kan die tweede stel argument se naam hier
of wat ook al ek dit kan hernoem
As ek wil gevolg deur die terugbel hier.
So, kan ek een slaag waarde van hier tot hier.
Nou, almal van hierdie kode al weliswaar ietwat kripties is
ten minste kopieer pasta vir die grootste deel van die aangesig van.
Die enigste verskil is kennis hier Ek verklaar 'n fout
beswaar en nou wil ek om 'n bietjie liefhebber.
Ek wil eintlik weet wat die fout is, so ek gaan
snoepie binnekant van die voorwerp 'n eiendom arbitrêr genoem kode
sodat ek weet dat dit is nie 'n lêer
dat ongemagtigde moet wees, dit is 'n HTTP 403.
Laat my onthou dat voordat Ek slaag die fout voorwerp
die terugbel.
En dan laastens probeer om te lees die lêer, sodat in hierdie geval,
die waterval, Ek het gebreek die kode van twee groot stappe
in drie kleiner stappe.
Let op die skoonheid hier
Ek kan fs.readFile noem verby in die pad.
En dan is die harde deel geestelik, is ek net slaag
in die ou se terugbel.
Die ding wat hy die uitreiking van my, ek is gaan slaag om fs.readFile.
Omdat ons almal hou dieselfde konvensies,
eerste argument na 'n callback 'n Fout voorwerp of nul gevolg
deur 'n koma of geskei lys van nuttige dinge.
So, wat dit beteken nou en as ek lees die dokumentasie sal ek weet
hierdie, die laaste terugbel, hierdie man hier buite
van die vierkantige hakies gaan om in die fout voorwerp geslaag word
of nietig wat ek moet gaan vir Soos altyd met hierdie kode hier.
En dan per definisie van hierdie metode
in die ou se dokumentasie, die laaste waarde wat
van die laaste metode in my anonieme verskeidenheid -
my verskeidenheid van anonieme funksies.
So, wat beteken gelees lêer terugkeer
en ek gebruik 'n terugkeer losweg nou.
Ek bedoel wat nie gelees lêer pas as argumente
die callback metode sy hande?
Twee argumente, eerste 'n Fout voorwerp of nul,
dit is byna altyd gaan om die antwoord te wees.
En die tweede ding gaan te wees wat vir lees lêer?
Die inhoud van die lêer, data soos ons dit genoem het vroeër.
So, deur eenvoudig te verklaar dwaal, lei,
en kyk vir foute hierdie is 'n soort van saai nou.
Anders, ek doen res.end verby in dat die resultaat.
Dit sal ongetwyfeld nie pas nie perfek
totdat jy eintlik skryf dit self.
Maar vir nou, neem weg ten minste die feit
dat daar is blykbaar hierdie algemene paradigma waardeur as ons
en skrywers van biblioteke alle soort van stok
met hierdie konvensie van terugbel metodes.
En die eerste argument is 'n Fout voorwerp of nul.
En die tweede en derde
en vierde voorwerpe is dinge ons omgee en ons soort
van reëls nakom en dokumentasie.
Ons het begin met 'n kode wat eerlik is redelik lelik.
En selfs al is die mees onlangse voorbeeld is eerlik soort van harde
jou verstand te draai om, dit is ten minste visueel,
lyk soos dit is baie strenger.
En as jy gemaklik met dit, is dit soveel makliker
en dit is so veel minder geneig om te foute as wat die vorige voorbeeld.
So, laat my demonstreer Een laaste ding hier.
Dit is weergawe drie.
En - Nee, kom ons laat hierdie een alleen.
Laat my gaan in 'n paar ander laaste dinge as teasers.
Alle reg, sodat in bediener 2.
OK. Eerstens, om enige vrae, Ek weet dit is 'n baie
maar jy meer wou instruksies, so?
Jy het nie 'n goeie sê opdrag noodwendig nie.
Ja?
[Onhoorbaar Nota]
Korrek is, is jy in wese toegeeflik te bedryfstelsel
om uit te vind hoe om te hanteer al hierdie balle gelyktydig,
lees van 'n lêer, lees van 'n databasis.
En dit is hierdie JavaScript-bediener self wat is enkele stringe.
En wese en eintlik,
daar is 'n foto Ek het nie gooi,
en dit is nie noodwendig alles wat insiggewend
maar miskien sal ons gee jy 'n geestelike model.
JavaScript self en node
in die besonder het hierdie sogenaamde gebeurtenis lus.
Waarvolgens, kan jy dink van node.js, die program,
is letterlik soos 'n oneindige lus.
Dit is net 'n wilde loop, wag en wag en wag,
soek vir take te voltooi.
En die taak kan wees, gaan iets uit 'n databasis haal
of hier is 'n waarde van die databasis of gaan kry hierdie lêer
vanaf skyf of hier is 'n versoek van 'n gebruiker.
Enige soort byeenkoms, net soos die blaaier gebeurtenis gedrewe,
so as die bediener kant gebeurtenis gedrewe.
En enige van daardie dinge uitmaak gebeure.
So iemand in node.js, net geskryf 'n oneindige lus,
'n groot wilde lus, wag vir dinge om te gebeur.
En as dinge nie gebeur nie, is dit eindig in 'n ry, reg?
Sekerlik, 'n databasis dalk 'n waarde teruggee.
En 'n lêer stelsel, die bedryfstelsel stelsel kan 'n waarde terug
min of meer dieselfde tyd Maar daar is waarskynlik gaan
sommige bestel vir hulle te wees.
En node.js gaan het in wese 'n tou
soos 'n groot verskeidenheid of 'n vektor, sommige data struktuur
dat buffer al van daardie dinge.
Want dit kan letterlik net hanteer een van hulle op 'n tyd.
So, wanneer jy, die ontwikkelaar,
skryf asynchrone JavaScript kode gebruik asynchrone
funksie, jy toelaat dat hierdie sogenaamde geval lus om te gaan
na die volgende blok, reg?
So, solank as wat jy onmiddellik terugkeer as al
van hierdie asynchrone metodes doen, soos lees lêer en stat,
hulle het dadelik terug omdat die terugbel uiteindelik
kry terug.
Sodra jy terugkeer,
dit beteken dat iemand anders kan kry inloer hier af die voorraad
of dat dit kan inloer kry af in die voorkant van die tou hier.
En so is daar in die feit dat die opeenvolgende
van alles wat gebeur,
selfs al is al hierdie dinge kan gebeur in parallel
op 'n multi-stelsel.
Maar node.js self en die bediener hardloop
as een draad.
En die negatiewe kant van wat t jy nie noodwendig maksimum
uit jou rekenaar se vermoë is as veral
as jy 'n 16 kern-of selfs 'n 2 kern rekenaar
en jy net hardloop een geval van node.
Maar as jy weer het iets soos 161 geneem,
jy vermy 'n groot nagmerrie van hoofpyn wanneer dit kom
voorwaardes en ras slotte en semafoor
en werklik die skryf van die multi-kode,
so upsides en nadele.
OK. Dus, terug na die kode hier, Laat my voor dat ons begin
om dinge te vereenvoudig 'n bietjie.
Ons het gesien bediener een 'n bietjie gelede wat lyk soos hierdie.
So, dit is waarskynlik eenvoudig.
Maar net soos in die wêreld van PHP, is daar raamwerke
soos Laravel en daar is dinge soos Rails en Django,
dieselfde ding in die node.js wêreld.
En ons sal spandeer meer tyd op hierdie Woensdag
en in die volgende projek.
Maar as ek gaan in 'n bediener 2 gids,
sien 'n paar paradigmas hier.
So dit is - daar gaan 'n ekwivalente voorbeeld
maar dit is die gebruik van 'n raamwerk genoem express.js,
Dit is gratis open source sagteware soos Rails en Django,
soos Laravel, dis net uiteindelik gaan
Vandag gewaardeërd te wees Want ons het al skryf
so 'n eenvoudige voorbeelde.
Maar ons vertrou.
Dit sal baie vinnig word jou vriend
want dit sal red jy 'n baie TDS kode.
En 'n gemeenskaplike paradigma vir 'n express.js aansoek
'n app.js of server.js te hê lêer wat die logika bevat
van jou program of by minste die beginpunt.
Jy kan het veelvuldige lêers.
'N knoop module subdirectory wat die biblioteke
wat jy afgelaai soos ASYNC
en druk hom in die ander.
En dan package.json, package.json lyk soos hierdie,
en jy kan dit met die hand te skep of gereedskap skep dit vir jou
en dit is letterlik 'n into lêer
en die interessante deel is om die afhanklikes hier.
Net soos in Laravel, jy gehad het dat die verkoper gids
en jy het om te bekommer pakkette en doen -
eintlik opdatering met Vakman of soortgelyke bevele,
biblioteke jy geïnstalleer het,
Net so met die package.json hier en jy die biblioteke te bestuur
en die weergawes dat jy omgee.
So, as ek 'n package.json, Ek kan eenvoudig nie NPM,
Knoop pakket Bestuurder installeer, dit gaan outomaties na
op daardie package.json lêer.
Kyk en te sien, het ek het die jongste weergawe
van al die verskaffers modules
in 'n knoop beklemtoon modules gids hier of miskien
in sommige ouer of stamvader gids.
En indien nie, is dit gaan hulle af te laai
en jy sal 'n hele klomp te sien
HTTP dinge aan die gang oor die draad.
So byvoorbeeld, laat my wys jy die inhoud
van node modules net te druk.
Laat my gaan voort en knoop modules vrymoedigheid verwyder
sodat al wat ek nou het, is nie.
En as ek die installering van NPM nie, sal jy sien dat dit gaan om te lees
dat package.json lêer en Ons het gesien uitset soortgelyke
om dit in die Laravel wêreld.
Dit is die aflaai van 'n hele n klomp van die dinge en dit is
omdat uitdruklike op sy beurt hang af van 'n hele klomp
van ander mense biblioteke.
So, almal is soort van word rekursief afgelaai.
Tot nou toe, as ek dit doen in LS weer
daar is my knoop modules Terug
en druk as back.
So dit is net 'n manier om vereenvoudig pakket bestuur.
Nou, as ons kyk na die app.js lêer, gaan dit
'n terugkeer na te wees ons vroegste web bediener
waar ons net spoeg out "Hello, World".
Maar let op die paradigmas hier,
eerste benodig ons die uitdruklike module, dan moet ons hierdie lyn
van die kode wat jy weet uit die dokumentasie.
Jy behandel letterlik dat module se veranderlike as 'n funksie,
so oop hakies naby hakies beteken dit uit te voer.
Dit gaan blykbaar terug iets wat ons gaan
algemeen noem 'n app.
Hoe werk dit?
Ek weet nie regtig.
Ek sal jou laat iemand anders, jy weet, in die uitdruklike wêreld skryf nie.
Ek gaan nou staan ​​op sy of haar skouers so
my aansoek te doen hardloop 'n bietjie makliker.
Hier, ek gaan om te luister op daardie spesifieke poort
dat die meeste enigiets kan wees.
En hier is die kode wat Miskien meer herinner nou
van Laravel en routes.php.
So is dit aandete eenvoudige, ek is net gaan om 'n roete te spesifiseer
vir streep ster, so alles gaan geabsorbeer word
deur hierdie versoek hanteerder.
Die paradigma vir versoek hanteerder is die anonieme funksie
met 'n versoek argument
en 'n reaksie voorwerp net soos voorheen.
En res.send in uitdruklike middel stuur die kode gevolg
deur alles wat jy wil stuur.
En natuurlik, kan jy doen iets liefhebber
deur eintlik die stuur lêers of HTML
of 'n dinamiese gegenereerde inhoud.
Maar vir nou, al wat ons gedoen het is spoeg Hello, World.
As ons gaan in bediener drie, dit is selfs liefhebber net
om te wys jy 'n paar funksies.
En ons sal jou 'n bewys sexier weergawe
van hierdie op Woensdag.
Maar as jy nog ooit gehoor het van Socket IO miskien,
so as ek dink Jonathan of iemand vroeër gesê het,
een van die dinge wat knoop is werklik bekend
vir is die regte tyd gedrag, reg?
Dink oor PHP in MySQL, as jy was 'n chat server te implementeer
in PHP waardeur twee mense kon open 'n venster te foo.com
en dan begin IMing elke ander, Alice in 'n venster,
Bob in 'n ander, sodat elkeen van hulle sien sy
of haar boodskappe in die ander venster.
Hoe sal jy dit doen in PHP en MySQL?
Of nie gebruik Laravel soort van nie-wesenlike, kan jy
soos 'n jeug lêer.
En jy het om te hê - in sommige gevalle dit het te spoeg
uit vorm, so is daar gaan 'n HTML-vorm te wees
wat waarskynlik lê nie via normale vorm voorlegging
maar Ajax waarskynlik, reg?
So, 'n on voorlê hanteerder, so jy tik in 'n teks veld,
jy getref betree en dan raak dit via Ajax na die bediener gestuur.
Wat doen jy dan doen op die bediener?
So, jy het artikels
of iets dot PHP dis ontvang in HTTP parameter
van die gebruiker, Alice se of Bob se direkte boodskap, wat doen jy
daarmee om dit te versprei Bob of Alice, onderskeidelik?
Ek bedoel jy letterlik het die gereedskap waarmee
om dit te doen in jou min.
Dus, net soos wat sou jy doen?
Jy het een minuut hierdie program te implementeer.
Ja?
[Onhoorbaar Nota]
Perfect. Right, so jy het 'n databasis.
Ons weet 'n bietjie bietjie oor MySQL.
So, jy het 'n tafel dis boodskappe,
Miskien is daar 'n keer stempel, 'n gebruiker-ID,
die liggaam van die boodskap self geskep dat
opgedateer dat en al van dat.
So, jy slaan in 'n databasis.
En veronderstel Alice stuur die eerste boodskap, hoe Bob kry
dat die boodskap nou uit die databasis?
>> Dit mag dalk 'n paar Ajax reaksie wat is voortdurend gaan
Terug na die databasis top kry die [onhoorbaar].
>> Presies.
So Bob se kode wie se kode is dieselfde as Alice is net soort
van 'n simmetriese verhouding,
Bob se leser het 'n paar Ajax-kode dit is waarskynlik miskien elke 30
sekondes trek die bediener via Ajax pas nie,
Is daar nuwe boodskappe?
Elke 30 sekondes gaan soort suboptimale wees
want hy het nog wag
As Alice letterlik net die boodskap gestuur het.
So, Bob se leser kan elke tweede druk op die bediener.
Maar dit beteken dat Alice se leser is slaan die bediener
elke sekonde.
Wat van Charlie [Aanvaar spelling]
en David [veronderstelde spelling] en Edward [aanvaar spelling]
en elke ander brief van die alfabet?
Wat is die probleem van hierdie benadering?
Daar is baie van die treffers oormatige -
Ek bedoel jy is net effektief Dosering jou eie oë
of DDOSing, Versprei Ontkenning van die diens aanval
op jou eie werf, deur met al
van hierdie gebruikers hardloop JavaScript kode wat net ping die
klink van jou bediener selfs as arbitrêre getal,
80 persent van die tyd niemand het iets gesê
in die chat kamer.
Maar jy is net nagaan om seker te maak van so maak.
So PHP in 'n baie tale is net nie goed
vir die regte tyd kommunikasie.
Want in PHP Onthou daar is geen sentrale geheue, reg?
Jy het sessie voorwerpe wat skep die illusie
van die sentrale stoor, maar dit is op 'n per gebruiker basis.
Jy het geen globale geheue hê soos jy doen in 'n Java
in 'n bekende of in ander raam werk soos dit.
Node.js al is, het jy globale geheue want jy
'n bediener en dat "kan onthou nie dit wil
oor al die gebruikers.
En jy kan nog steeds 'n databasis.
Maar die lekker ding van node.js ook dit is wat dit is baie beter
as iets soos PHP en die skep van die illusie
van die hantering van verskeie dinge op een slag.
En in die waarheid as in ter syde stel, kan jy implementeer chat bedieners in PHP,
maar jy sal tipies iets genaamd 'n lang stemdag
waardeur jy nie pingen nie die bediener elke sekonde.
Jy ping die bediener, die bediener reageer nie op jou
vir meer as 30 sekondes, is dit letterlik sit
in 'n lus wag en wag.
En die bediener tjeks indien daar is nuwe data in die databasis
en slegs wanneer dit wat jy sien, "O, hier is 'n boodskap van Bob, "
dit te antwoord op die HTP bediener?
So het die effek in jou leser is dat die IE icon of Mozilla
of wat ook al hou net spin vir 30 sekondes op 'n tyd.
Maar die positiewe kant is, kan jy dit nie doen nie 30 verband versoeke
in 30 sekondes, het jy een.
So is dit genoem lang stemdag.
Maar selfs beter in die moderne web implementeer is iets genaamd
WebSocket, wat neem jy die CS143,
jy effektief kan 'n TCP-verbinding van 'n kliënte
soos 'n leser aan 'n bediener en dan hang aan dit
sonder die gebruik van byna soveel hulpbronne
as HTTP tradisioneel doen.
En Socket IO is 'n node.js biblioteek
wat maak dit baie makliker om te maak die potjie verbindings
of illusies daar op vir die ou blaaiers
sodat jy dit kan implementeer real time funksie se.
So, hier is 'n voorbeeld.
Hierdie dinge het top kry 'n bietjie meer ingewikkeld
maar dit is meestal kopieer en plak van socket.io se dokumentasie.
Hier is nou 'n meer presiese versoek hanteerder.
As die gebruiker versoek om 'n streep, wat lêer gaan ek
te glo nie dien aan hulle?
Index.html.
En daar is 'n paar nuwe dinge hier stroom
wat ek jou sal wys in net 'n oomblik.
Maar dit is net 'n ander manier
gryp 'n lêer 'n bietjie meer doeltreffend
as net doen fs.readFile.
Dit is 'n bietjie slimmer veral vir groot lêers.
So lang storie kort, hierdie lyne net te dien
'n lêer met die naam index.html
wat nou aanvaar bevat die HTML-vorm waardeur Alice
en Bob kan omgaan.
Laastens, io.sockets.on, so hierdie kom uit hierdie lyn hier.
So, ek is net die lees van die dokumentasie io.socket gee my
toegang tot 'n sogenaamde WebSocket met 'n leser,
tussen die leser en die bediener.
Ek luister vir 'n spesiale gebeurtenis verband wat beteken
wanneer die gebruiker eerste treffers van die bediener probeer
hierdie verband te maak, ek is gaan hierdie oproep om terug te bel.
En nou, ek gaan die volgende te doen.
Elke vyf sekondes, wat ek gaan doen?
Ek gaan om te stoot of uitgesaai As jy onthou nuuts af,
die grafiese taal sou dat 'n uitsending blokke?
So, jy gaan te stoot
of sneller 'n gebeurtenis genaamd arbitrêr van die bediener.
En dit gaan bevat 'n boodskap Ping
en die huidige datum.
So, dit is 'n werklike chat bediener wat Alice
en Bob kan gebruik, maar dit is soort van 'n outomatiese chat bediener
waar die boodskappe net soort van sonar pings.
Dit is net datum tye wat gestuur word elke vyf sekondes.
So, as ek eintlik loop van hierdie ding - en dit is dit.
Om duidelik te wees hier, kennisgewing dit is net te meld hier.
So, laat my beurt 'n blinde oog te dat.
Laat my doen knoop van app.js.
Laat my gaan na my leser.
Herlaai die tuisblad hier.
[Pouse]
En laat my naby die inspekteur.
Elke vyf sekondes, ek het 'n demonstrasie selfs al nie
interaktiewe vir menslike
van iets wat gebeur asynchroon.
In die leser kennis, daar is geen spin ikoon.
Dit is die gebruik van 'n liefhebber funksie van Chrome in moderne blaaiers
van die handhawing van 'n voetstuk verband onder die enjinkap
en dit is wat genoem algemeen 'n kroeg / sub-model,
publiseer / skryf model, waar ons nie gedoen het nie
wat uitdruklik hier.
Maar wat is lekker oor hierdie algemene pub / sub paradigma is
dat jy kan een uitgewer.
In hierdie geval die sentrale bediener en al
van die individu implementeer is kliënte.
Alices en Bobs van die wêreld kan inteken op dit,
sodat jy kan boodskappe oordra onder 'n aantal van die gebruikers.
En selfs al is ons weer nie sien nie interaktiwiteit,
Ons het miskien 12 reëls van die kode net om dit te doen.
En dit is waarskynlik nie 'n sprong om te dink hoe jy kan sweep
uit die lêer index.html wat 'n ware HTML vorm,
bietjie van jQuery kode met Ajax wat nie 'n dag stuur
Maar net stuur net Alice of Bob tipe na die bediener
En dan is die bediener sal aflos dit uit.
En ek belowe om te blik by een laaste ding wat net
om jou te terg met hierdie.
As ons gaan in stroom nul en een,
jy sal sien kode wat net 'n bietjie anders hier.
Net so jy het dit gesien, dit is 'n alternatiewe
wat ek genoem die fs.readFile metode vroeër, waardeur,
jy kan vertel node.js, "Gaan lees hierdie lêer in die geheue.
Maar as dit is groot net gee vir my 'n stuk op 'n tyd. "
En jy kan weet van CS165
of 161 van die lêer stelsels verskillende
prestasie eienskappe.
Jy mag dalk wil om te lees in blokke van 512 grepe
of 2 kilogrepe of wat ook al.
Dit is 'n manier om te optimaliseer om terug lêer iteratief
sodat jy dit kan spoeg 'n bietjie vinniger
aan die leser of wie die einde kliënt.
So groot hoeveelheid van die inhoud vandag en ons gaan duik
in meer detail op Woensdag Tim [aanvaar spelling]
in die besonder kyk na hoe ons kan vertaal sommige van die idees
van die eerste helfte van die Natuurlik Laravel en modelle
in 'n biblioteek wat hy self geskryf genoem Bookshelf.js
wat toenemend word gewild in die gemeenskap
want dit gee jou die meeste van hulle,
indien nie meer as die funksie van die welsprekende
wat herroep is dat biblioteek insig van Laravel,
so meer op wat en hoe meer
volwaardig te ontwikkel programme op Woensdag.
Ons sien jy dan.