>> Allt í lagi.
Svo cliffhanger var, hvað er node.js eins og þú veist það í dag?
Nokkuð? Já?
>> Það var eins og ramma skrifa JavaScript
umsókn í stórum dráttum -
>> OK, það virkar.
>> - Ég veit eins og algengar notar eins -
eða eitthvað sem þú getur gert er eins og -
[Inaudible Athugasemd]
>> OK gott.
Já, svo er það ramma.
Það er vél sem þú geta keyrt JavaScript kóða
framreiðslumaður vefsvæðis.
Þetta getur þýtt að einföldustu hlutum
eins og að skrifa a stjórn lína handrit ekki í Python eða Bash
eða Ruby eða PHP, en bara JavaScript sig
og framkvæma það á blikkandi stjórn hvetja.
Eða þú getur í raun að keyra það innan vefþjóni.
Og í raun innan node.js sjálft,
Þessi rammi er allt fullt af bókasöfnum á meðal eru
í HTTP framreiðslumaður innbyggt.
Svo getur þú í raun að skrifa miðlara og við munum sjá
á aðeins augnablik, frábær auðvelt bara með að skilja svolítið
HTTP og TCP og höfnum.
Og þú getur hrogn a hlustun vefur framreiðslumaður án Apache,
án Microsoft IIS.
Án annarra hugbúnaður setja í embætti,
þú getur bara hrogn þetta og hlusta á flestum hvaða höfn
á kerfinu sem þú ert leyft að.
Svo málið og stig, láta mig fara og opna
upp þetta dæmi, framreiðslumaður-0.js.
Svo eftir því að efst þessa skrá, bara fullt
af uninteresting athugasemdir, og þá er það par
of Representative línum af kóða að við munum sjá recurringly.
Svo var HTTP fær þurfa "http".
Svo innbyggður-í til node.js ' uppbygging er allt fullt
einingar sem eru í raun bara Bókasöfn og allt er svoleiðis
nafns rúm með Auðkenni
eins og þetta er "HTTP".
Þannig að eins og í fullt af tungumál eins og Java og C + +
og C, aðeins þegar þú flytja eða fela
eða í hnút tala krefjast eining gerir bits hennar.
Og allt minnið krefst að fá hlaðinn
í RAM og því notuð.
Svo, þú ert svona hlaða þetta bókasöfn eða einingar á eftirspurn.
Þetta þýðir að fara á undan og krefjast
fyrir þetta forrit HTTP bókasafn,
og vísa til þess bókasafn með leið breytu sem heitir HTTP.
En þetta vinstri tákn gæti hafa verið kallaðir neitt, foo,
bar, Baz, það skiptir ekki máli.
Svo ólíkt C + + og Java og C þar þegar þú þarfnast
eða flytja bókasafn, það bara svoleiðis
af verður heimsvísu aðgengileg,
node.js einingar eru fleiri þétt Nafnrými.
Þannig að eigin - sem virkni er aðeins aðgengileg í augnablikinu
með því að þessari breytu nafninu.
Þú getur ekki bara byrja vélritun aðferðir sem eru fyrir hendi
í það rétt leið sem er líklega gott,
því þá Nafnrými þín ekki fá nærri eins ringulreið
eins og í fullt af tungumálum.
Allt í lagi, svo nú sem algengar stinga upp á, búa til vefþjóni
sem Jonathan [ráð stafsetningu] var hægt er bókstaflega
eins einfalt og að hringja í búa miðlara aðferð inni
HTTP mát.
Svo, þetta er að fara aftur tilvísun
til einhvers konar vefur framreiðslumaður.
Það kom að Apache, ekki endilega eins og þungur þyngd.
This einn er a lítill einfaldara.
Og nú verð ég að bara einfaldlega að gera nokkra hluti.
Svo fyrst, láta mig fletta niður á botn hér
og sleppa stjórnandinn aðferð um stund.
Og taka þessa línu af kóða,
server.on sem er í raun þýðir framreiðslumaður -
hlusta eins og í jQuery kóða,
hlusta fyrir atburð kallað beiðni
og bara taka giska hvað ætti ég að gera
þegar beiðni atburður eldar í þjóninum.
Já?
>> Hringdu virka dýraþjálfari.
Svo bókstaflega framkvæma á kóða sem er vísað
með þessari breytu og raun ekki breyta til tákn hér,
hvað er það tákn að vísa til?
Jæja, þetta nafn virka upp hér
og sýnandi virðist tekur tvær breytur.
Hvers vegna tveir? Jæja, ef þú bara lesa engin gögn
fyrir þessari tilteknu einingu, þú verður að segja að stjórnandinn
sem verður beitt verður samþykkt það minnsta tvær breytur,
tilvísun í beiðni,
og inni í biðjum við bókstaflega þýtt HTTP beiðni.
Svo allir þeir HTTP haus að þú gætir muna
frá upphafi sem önn eða einhver fyrir bekknum
eða reynslu eins og fá línu og gestgjafi línu
og User-Agent línu, allt sem er encapsulated og fleiri inni
þessa beiðni mótmæla.
Og viðbrögð mótmæla er raðað til útlanda gögn.
Svo, þú hafa a tilvísun til mótmæla sem er að fara að leyfa þér
að senda upplýsingar til baka til vafrinn með því að kalla aðferðir
á þeirri seinni rök heitir Res fyrir svar.
En þetta gæti kallast foo eða bar, þetta eru bara samningar.
Svo nú, hvað á ég að gera?
Jæja, það virðist sem inni þessarar frábær einfaldur vefur framreiðslumaður
að ég er að innleiða, ég er fara að gera eftirfarandi.
Ég ætla að skrifa HTTP haus með stöðukóðanum 200,
200 merking OK, allt er vel.
Og þá ætla ég að fara að miðla virðist.
Hvað er gögn tegund af Seinni rök til hægri höfuð?
>> Það er hlutur?
>> Það er hlutur með hversu margir lykla og gildi?
Bara einn af hverjum, hægri, einn lykill gildi par.
Svo, "Content type '.
Og eina ástæðan Ég vitnaði í það hér er
vegna bandstrik gæti verið conflated fyrir mínustákn
eða eitthvað svoleiðis.
Svo hef ég að vitna í það hér, singe eða gæsalappa.
En aftur algengt hugmyndafræði
JavaScript kóða er oft einfalda gæsalöpp þessa dagana,
krabbamein í ristli og síðan gildið.
Svo, þetta er bara svokallaða hugur tegund.
Þetta er HTTP haus það er bókstaflega að fara
að efni bandstrik tegund ristill texti slash látlaus sem er að gerast
til að senda frá miðlara til að vafra
þannig að vafra veit hvort að keyra þessa eins og hrár texti
eða HTML eða sem mynd eða bíómynd
eða glampi skrá eða eitthvað annað.
Nú, þar sem ég vil í raun og veru að senda í meginmál síðu?
Jæja, bara með því að lesa skjöl
fyrir svar mótmæla inni af þessu safni.
Ég sé að það er rétt aðferð og það tekur a band,
kannski önnur atriði en óverulega streng.
Og band er hvað er spýta út til the flettitæki.
Í þessu tilviki, Super þess einfalt, halló heimur hennar,
en það gæti verið opne krappi, HTML, nærri krappi,
opinn krappi höfuð, loka krappi og svo framvegis,
þetta gæti verið hrár HTML.
En við erum að halda sem dæmi einfalt bara með spúandi
út einföldustu gerðum huga sem er að öllum líkindum text / plain.
Og þá response.end bara þýðir loka tengingunni
og senda allt sem ég hef konar dúuðum inni
af þessum hlut til baka til the flettitæki.
Ég er búin. Allt í lagi.
Svo, the síðastur hlutur Ég er að gera hérna
og þetta er nokkuð handahófskennt og ætlað að vera kúl,
er ég að segja miðlara loksins að hlusta
á ákveðnu TCP sjálfgefið höfn.
Muna frá upphafi af flokki sem þjónustu -
eða þú einstaklega venjulega þekkja það með tölum,
AD er vefur, 443 er HTTP byggir vefsíður, 22 er SSH, 21 er FTP
og 1337 er bara handahófskennt en það er hærra en 1024
sem þýðir á flestum kerfi, ég get notað það
án þess að þurfa frábær notandi forréttindi.
Svo er það bara þægilegt.
En 8080 er í burt - sameiginlegt einn, 8088, virkilega nokkuð stór
í þúsundum eins algengt en þetta er bara meira Elite.
Allt í lagi, svo hvað gerist þegar ég hlaupa í raun þetta?
Jæja, ég er ekki bara að fara síðuna í vafranum.
Þessi skrá er kallað miðlara-0.js.
Því aftur, Apache er nú út úr myndinni
fyrir síðari árshelming námskeiðsins.
Ef ég vil vefnum miðlara, þarf ég að skrifa
og þá hlaupa this vefur framreiðslumaður.
En það kemur í ljós að JavaScript bæði á the viðskiptavinur hlið
og miðlara megin er túlkað tungumál.
Svo, allt sem ég þarf er túlk.
Svo it's - ef heimta að keyra hnút og þá framreiðslumaður-0.js,
Ég mega eða mega ekki séð Nokkrum hagvexti eftir
á hvaða bókasöfnum ég hef sett, ekkert virðist vera að gerast.
En láta mig fara til A vafra og láta mig fara
á sömu IP tölu af CS50 viðskiptavini mína.
En þetta gæti bara eins verið Mac minn
eða tölvunni minni og þá högg koma inn í.
Sem reyndar lítur út eins og Apache.
Það er eins og möppuna skráningu við skoðuðum
á í fyrri hálfleik.
Svo, hvað gerði ég rangt?
Já.
[Inaudible Athugasemd]
Einmitt, ekki satt?
Svo, Apache er enn að hlusta á vanræksla höfn 80.
Jafnvel þó að ég gæti breytt því, Ég gæti snúa það burt allt saman
en það er enn í gangi.
En þessir krakkar geta vissulega lifa.
Ég hef einfaldlega að setja ristill 1337 og þá kannski
eða kannski ekki skástrik á enda til að opna þessa gátt
að þessi framreiðslumaður er hlaupandi á.
Og nú sé ég að halló, heimur hefur skilað.
Og ég get högg endurhlaða eins oft og ég vil,
það er enn að þjóna upp síðu.
Reyndar ef ég opna Króm Skoðunarmaður, fara í netið
og þá endurhlaða alla síðuna,
eftir því að örugglega var þetta beiðnin sem var send.
Ef ég lít á Raw uppspretta,
taka vafrinn minn sendir alla þá hluti.
Og þá svar frá þjóninn var frábær einfalt.
Það er 200.
Ef það er ekki of lágt á skjánum,
Það er efni gerð.
Og þá node.js konar sjálfkrafa
fyrir mig bætt dagsetningu og öll önnur efni
sem vafrar búast venjulega.
Svo skulum við sjá bara lítið geðheilbrigði stöðva.
Leyfðu mér að fara aftur til kóðann í Server-0.js og láta mig -
í hvert skipti sem ég fer í að stjórnandinn,
láta mig segja bara console.log.
('Við höfðum gest!').
Ég þarf ekki að laun eða eitthvað svoleiðis,
það er túlkað tungumál.
Svo nú, láta mig fara aftur til að síðu, Hlaða aftur einn, tveir,
þrisvar sinnum og fara aftur að glugganum mínum.
Og nú sé ég þetta.
Jæja það er undarlegt, Ég sé sex línur.
Áhugavert vefur fróðleiksmoli, hvers vegna gerði Ég fæ sex beiðni ekki þrír?
Já?
[Inaudible Athugasemd]
Já. Svo, eins og þú kannist við lítill heimskur táknið efst
af the flettitæki bar að mikið
um vefsíður notuð máttar vera Harvard Crest,
það gæti verið fyrirtæki lógó eða eitthvað svoleiðis.
Svo, vafra þessa dagana að raða
af presumptuously gera að viðbótar HTTP beiðni
við nánast hvert vefsvæði sem þú heimsækir stöðva ef það er
sjálfgefið að skrá kallast favicon.ico
í sömu möppu sem skráin sem þú baðst um.
Og ef svo er, setur það táknmyndin þar.
Svo allt sem við erum að sjá er einmitt það.
Og í raun, við skulum sjá hvort við getur séð þetta frekar en tegund
út bara, "Við áttum gestur '.
Láta mig fara á undan og framleiðsla.
Og ég veit bara þetta frá horfa á gögnum.
Það er eign inni beiðni mótmæla heitir URL
sem gerist að vera leið
sem var óskað í raun vefslóð.
Svo, ef ég endurræsa þjóninn einfaldlega með rerunning hnút
á framreiðslumaður-0.js og nú gert þetta einn, tveir,
þrjú og fara aftur hingað.
Það er það.
Slash er það sem ég - manna óskað
í favicon.ico er hvað vafrinn er
presumptuously óska.
En það er ekki svo mikið favicon efni
en hvernig framreiðslumaður er rekið.
Já?
>> Hverju kemur það að vera einhvers beiðni?
>> Hvers vegna kemur það til - eftir eðli hvernig HTTP virkar.
Svo, HTTP getur bara farið ein skrá í einu.
Vafrar geta vera klár þessa dagana
og halda TCP tengingu opinn.
Ef þú tókst CS143 eða almennt þekki net,
svo þú getur fengið hagsauka
með því að halda net fals opinn
í að gera margar HTTP beiðnir framhaldsþáttum yfir það
en þeir eru ein skrá hverja beiðni.
Svo, ef þú heimsækir eitthvað eins og -
Ég meina við getum farið í flest allir vefsíður.
Ef þú ferð til - við skulum draga upp eftirlitsmaður Chrome er hér.
Það má fá fylla mest á síðunni.
Fara á flipann Network og fara www.cnn.com.
Og þegar þú ferð cnn.com, heimasíðu sinni -
Vafrinn þinn frekar atrociously gerir - enn að telja.
OK. Amk 289 HTTP requests aftur og aftur.
Og þetta er ástæðan þegar þú heimsækir sérstaklega uppblásinn vefsíður,
þeir eru hægt að hlaða vegna allra
af eignum sem þeir hlaðast.
Svo það lítur út eins og 298.
Það gæti verið einhver Ajax gerast á þessum tímapunkti eða einhver
af eignum eru bara lágmark.
Svo, hvert þeirra er einstaklingur beiðni fara aftur
og fram og til baka.
Og þess vegna fyrr, jafnvel þó að við svoleiðis talaði
um það nokkuð fancifully þar sem þú setur handrit tag,
algerlega gerir munur þegar þú ert -
það byrja að hafa mikið af umferð og mikið
af skrá sem óskað er eftir.
Og hver af þessum táknar sennilega mynd, media skrá,
JavaScript skrá, CSS skrá eða þess háttar.
Svo erum við nú þegar allt að sumir 4 megabæti bara
að líta á fréttir í dag.
Góð spurning.
Allt í lagi.
Svo hvaða ert sumir af að upsides þó?
Rétt, við vitum hvernig á að gera vefsíður nú þegar með PHP.
Og margir af þú kom inn til bekknum vita Django
og Python eða teinar með Ruby.
Svo, hvers vegna þurfum við enn eitt tungumál og innviði?
Hvað er node.js sérstaklega góður á ef þú veist?
[Hvíla]
Sumir hlutur?
Nei? Já?
>> Senda bréf.
>> Svo að senda bréf.
Svo er það satt og það er satt Fyrir frekari tæknilegar ástæðu
og það node.js og raunverulega JavaScript er sérstaklega
vel til þess fallin að ósamstilltur númer,
ef þar sem þú býrð blekking
að gera margar hluti í einu.
Svo, jafnvel þótt þeir séu raunverulega að gerast í framhaldsþáttum,
örugglega í flestum tilvikum, JavaScript bæði viðskiptavinur hlið
og miðlara megin er einn Threaded.
Sem ef þú ert að taka 161 eða jafnvel 61 þýðir að -
af þessu forriti vita,
túlkurinn getur bókstaflega aðeins gert eitt í einu.
En þetta er er ekki mikill fyrir eitthvað eins og a vefur framreiðslumaður
þar sem þú gætir hafa heilmikið eða hundruð eða jafnvel þúsundir
notenda allir að reyna til aðgang vefsíðuna þína
á mjög sama tíma.
Og enn, sem benda að meðhöndlun þá einn
á eftir öðrum eftir að annað sérstaklega ef einhver
af þeim beiðni eins og við sáum á CNN gæti þurft að þjóna
upp 300 skrár áður en þú jafnvel fá til the næstur notandi
sem vill sjá segir fréttir.
Node.js er betur í stakk búið fyrir umhverfi eins og þessi.
Vegna þess að það gerist er allir hægur í gangi ferli
eins og að lesa skrána af disk eða samskipta við gagnagrunn eða tala
að einhverju öðru net miðlara,
sem hefur tilhneigingu til að hafa leynd, ekki satt?
Ef þú did taka 61 eða 161 sérstaklega alla af þessu tagi
á útlimum þjónustu tilhneigingu til að vera miklu hægar
en að gera neitt inni sama RAM og sama CPU
að segja í þessu tilviki framreiðslumaður er raunverulega í gangi.
En hvað er gott um node.js er að þú getur -
og JavaScript almennt er að þú getur gert eitthvað
og síðan segja, "Hmm, þetta er að fara
að taka mér nokkrar millisekúndur eða jafnvel í nokkrar sekúndur.
Leyfðu mér svoleiðis punga að slökkva " en það er ekki satt ferli.
Og svo þegar það er gert að gera að hægur í gangi ferli
eins grabbing raðir frá gagnagrunnur eða lesa skrá. HTML
frá disknum, það mun koma aftur til mín frekar
en mín að þurfa að bíða eftir því.
Svo, til að gera þetta meira ljóst.
Þetta er leið mín um gera þetta kunnuglegt.
Allt í lagi, þannig að þetta er Hrista Shack á torginu.
Þetta er tegund af sameiginlegur hugmyndafræði
fyrir að útskýra asynchronicity.
Þetta er í raun góð td vegna þess Shake Shack
og bragðgóður hamborgari eru ótrúlega hægur fyrir það sem þeir gera.
En punkturinn er að þeir eru mjög góðir í að taka pantanir
og taka peningana þína eftir sem þú bíða fyrir mat.
Svo, þetta er í raun betra hönnun en val.
Því ráð fyrir að þú gengur inn í verslun svona og þú fékkst
að framan á línu og þú sett pöntunina og þú vilt
til hamborgara, sem best ég get segja, það tekur að minnsta kosti fimm
eða fleiri mínútur að reyndar fá hamborgara.
Svo, það væri góður um slæma viðskipti líkan
ef á meðan þú ert að bíða fyrir þinn hamborgari, Alice [ráð stafsetningu]
og Bob [ráð stafsetningu] og Charlie [ráð stafsetningu]
og allir aðrir er biðröð fyrir aftan þig
og þú ert bókstaflega sljór lína að bíða eftir mat.
Svo augljóslega, að Shake Shack
og öðrum skyndibita Staðir gera þetta ekki,
þeir gera eitthvað eins og this.
Þeir gefa þér buzzer.
Og þeir svoleiðis senda þér á þinn hátt.
Og þeir kalla þig aftur með sem gerir þessa litlu hlutur titra
eða glampi til að fá athygli þína.
Svo, þetta er bókstaflega það?
Eitthvað eins node.js gerir.
Ef node.js eða JavaScript almennt er verið að nota
og forritari er sviði nógur
að átta sig á, "Þú veist hvað?
Hvað þarf ég að gera rétt hér gæti tekið smá númer
millisekúndur eða sekúndur.
Þú veist hvað?
Láta mig fara á undan og ekki kalla það réttri -
"Það er strákur sljór allir aðrir í línu, "-
láta mig fara á undan og konar stíga til hliðar
og einfaldlega kalla mig aftur
þegar það lengi í gangi aðgerð er lokið. "
Og kalla til baka auðvitað er vísa í þessu tilfelli
svarhringingu virka, tilvísun til chuck af kóða
sem mun fá fram þegar hamborgari þinn er tilbúinn,
líkt þessum hlutur hafa sumir konar virkni innbyggður-í
að það byrjar titringur eða buzzing þegar það er kominn tími fyrir þig
að vera kölluð aftur til framan á línu.
Svo, hvað þýðir þetta meina að raungildi?
Jæja, verðum við að vinna okkur upp.
Svo, láta mig fara á undan og gera þetta fyrst.
Í framreiðslumaður-1.js, láttu mig fyrst einfalda kóðann
svo við getum taka barn stíga í átt meira sannfærandi vandamál.
Þetta er nákvæmlega sama forrit sem ég skrifaði áður.
En hvað hefur verið breytt?
Það er tegund af lítilsháttar Nokkur dæmi um setningarleg munur
milli þessa og útgáfa 0 fyrir augnabliki.
Hvað stekkur út á þú ef þú manst?
Já Cynthia [ráð stafsetningu]?
[Inaudible Athugasemd]
Já. Svo nú höfum við línu af virka berist inn
Við höfum fengið losa af því tagi
af uselessly heitir Handler virka.
Gagnslaus aðeins í því áður en jafnvel kalla það á einum stað,
Ég í raun ekki þörf á að eyða tíma gefa það upp nafn
og gerir það erfiðara að lesa kóðann toppur til botn.
Svo, við skulum lýsa bara inline er nafnlaus aðgerð.
Og ég er að gera tvo aðra hluti.
Ég er að gera betur Notkun punktur sýndur.
Svo eins og í jQuery, fullt af hnút aðferðir er hægt að læst saman.
Þannig að þegar þú ert búinn að hringja eitthvað, hefur þú ekki
að bíða eftir að nýja línu og kalla aðra aðferð,
þú getur bara keðja þá saman.
Og svo á þennan hátt, við getum virkilega herða þetta upp.
Svo, þetta er bókstaflega a vefur framreiðslumaður í fimm línum
af kóða samtals ólíkt -
ólíkt því sem þú gætir venjulega þarft að gera til að setja eitthvað upp.
Ef ég fer inn í miðlara 2 Nú, við skulum gera þetta.
Í miðlara 2 - reyndar skulum koma aftur til þess miðlara 2.
Við skulum nú opna async-0.js og takast á þessi vandamál á hönd.
Svo fyrst, við skulum fara undan og opna
upp async-0.js í vafranum.
Svo async-0, láta mig fara aftur til the flettitæki.
Högg Reload.
Og nú, þetta er góður af villuboð.
Reyndar er ég að sjá 500 í skoðunarmaður Króm '.
En láta mig einmitt meira óska hello.txt.
OK. Svo þetta virðist virka.
Svo async-0.js virðist ekki þjóna upp eitthvað fyrir slash.
Það hefur engin vanræksla skrá stuðning.
En ef ég skýrt óska hello.txt,
sem virðist vera að styðja.
Hvers vegna er það?
Jæja, það sem ég hef farið hér
og gert er hrint í framkvæmd frábær einfaldur vefur framreiðslumaður
sem sýnir hvar asynchronicity getur verið gagnlegt.
Og það er hrint í framkvæmd eins og hér segir.
Fyrst, ég er að nota HTTP eining aftur,
en einnig FS sem sennilega stendur fyrir?
Almennt í CS, skrá kerfi.
OK skrá kerfi.
Þess vegna framvegis FS, skrá kerfi.
Allt í lagi, svo hvað þýðir þetta að gefa mér?
Virkni tengist skrár eins og að fá staðist,
opna skrár, skrifa framkvæmdarstjóra, lesa framkvæmdarstjóra
og öll þessi tegund af efni.
Svo nú eftir, þennan kóða er það sama og áður,
búa á miðlara, sem liggur í nafnlaus aðgerð.
Þetta er eins konar handahófskennt.
Þetta er ekki mjög tryggja vefþjón.
Í raun gætir þú aðgang flest allir skrá á harða diskinum mínum
eða á miðlaranum er erfitt aka með því að framkvæma þennan kóða
því ég er bara í blindni að því gefnu að ég ætla
að grípa hvað sem notandinn óskað í vefslóðinni.
Og ég ætla að forskeyti það með punkti
þannig að ég er lítillega vera öruggur
með því að segja hvað sem skrá þeir geta beiðni hefur að minnsta kosti byrjun
í núverandi möppu.
Auðvitað er það ógn hér.
Þvi ef þeir í staðinn fela hvað?
Á vegi þeirra, þeir geta tegund af að vinna í kringum það líka.
Punktur, punktur, ekki satt?
Svo ef notandi var að setja punkt, punktur í vefslóð, í orði,
þeir gætu byrjað að fá minn - og segja lykilorð skrá.
Svo, þetta er ekki ætlað til að tryggja,
það er ætlað að vera einfalt.
Svo hér, ég er með breytu sem er samtenging punkts
sem er til staðar skrá og beiðni URL
sem við sáum áður er eins rista eða / hello.txt.
Svo nú, fær það aðeins meira áhugavert.
Fyrst, taka eftir the botn.
Ég er að hlusta á sömu höfn og áður.
Þannig að raunverulegur áhugavert vinna er inni hér.
Hvert skipti sem beiðni kemur í eðli sínu
þessa kóða, hvað er ég að gera?
Ég hringi skrá lesa skrá aðferð kerfisins,
liggur í götunni sem ég vil lesa.
Og nú, þetta er hvað er áhugavert hér,
þetta er við framkvæmd í ósamstilltur aðferð.
Þú getur ekki fá til baka gildi frá lesa skrána.
Í raun fyrirvara, það er nei vinstri tjáning
vinstra megin við lesa skrána.
Það þýðir ekki að skila gildi.
Frekar, kallar það svarhringingu virka þegar það er tilbúið
að gefa þér aftur svar.
Svo aftur að vera skýr, en í fyrra,
í mörgum forritun tungumál, ef þú vildir
að lesa skrá mál í lið PHP,
skrá undirstrik fá undirstrika innihald,
þú ert með vinstri-hönd tjáningu í öllum verðmæti eftir -
áður jafnan tákn, sem þýðir að þú ert að framselja
til breytunni aftur gildi að virka.
Þú getur gert það í node.js, en þú hefur yfirleitt
að hringja sérstaklega samstilltur útgáfur af aðgerðum eins,
Ég held að það er lesið sync skrá eða samstilling lesið skrána.
Ég gleymdi hvernig þeir nefndu það.
Og það myndi gefa þú skilagildi.
En ef þessi skrá er á sumir fjarlægur skrá kerfi
eða diskur er bara náttúrulega hægur, það gæti tekið 10 millisekúndur
eða 2 sekúndur fyrir að skrá til raunverulega koma aftur.
Á sama tíma, og enginn annar vefur gestir eru þjónustaðar
með Websit þín.
Þú ert sljór.
Það er það sem er kallað blokka IO, inntak / úttak.
Svo hér, þetta er miklu betri.
Vegna þess hvað node.js er að fara
að gera við að túlka er eftirfarandi,
það er að fara að hringja að lesa skrá aðferð,
reyna að einn upp skrána sem fékk slóð tilgreint af verðmæti P.
Og þá ef og þegar það er tilbúið að gefa þér aftur innihald
af skjalinu P, mun það kalla fall sem undirskrift er
samningur eftirfarandi.
Tvær breytur, fyrsta sem er kannski Villa Object,
höfuðborg E, er það hlut kallað Villa eða Null
ef það er engin sem villa.
Og seinni rök - taka giska - er að fara að vera það?
Það heitir gögnum augljóslega en Hvað er Data meira concretely?
>> Efnisyfirlit?
>> Innihald hello.txt í dæminu sem ég dró
upp í vafranum mínum í smá stund síðan.
Svo í öðrum orðum að lesa skrá og margir node.js aðgerðir
eins og á ekki aftur gildi.
Þeir kalla callbacks og standast
þeim callbacks hvað myndi hefur verið hefð að
aftur gildi.
The kosti þessa nálgun er
sem þú kalla mætti lesa skránni T0.
The svarhringingu virka gæti ekki kallað einn merkið síðar
svo að segja á T, það gæti verið kallað T1000,
þúsund ticks síðar.
En punkturinn er að restin af kóða í þessari skrá,
ef einhver myndi strax að framkvæma á meðan node.js
og á meðan the skrá kerfi tölur út hvernig á að lesa
að skrá og fá það aftur til þín.
Svo þú búa til þessa -
svo í raun blekking
af parallelism meðan að láta hægari gangi ferli er ekki
loka á mikilvæga efni, sá hluti sem þjónusta notendur.
Svo, hvernig gera við að vinna þetta?
Þetta er mjög algengt node.js hugmyndafræði.
Og það er leiðin bara að einfalda þetta er að við munum sjá áður eftir.
Ég skoðaði fyrst ef Villa er ekki núll.
Svo, ef það er ekki rangt þá kom villa.
Ég veit ekki hvað það er, kannski skrá er ekki til.
Ég hafði ekki leyfi.
Pathname er rangt.
Allir tala um hlutina gæti farið úrskeiðis.
Fyrir nú, ég ætla að geðþótta skila 500
sem er innri framreiðslumaður villa.
Eitthvað fór úrskeiðis.
Ég er ekki alveg sama að greina það.
Svo, við skulum segja bara notandinn það er brotinn.
Og þá ætla ég að fara að gera res.end,
og þetta er styttingin tákn.
Muna að á síðasta þegar ég gerði res.write
og þá gerði ég res.end.
Ef þú vilt aðeins að senda eina línu af framleiðslu,
þú getur bara gert þetta allt í einu með res.end með rifrildi,
og það er að fara að senda hvað villuboð er
inni í þessum hlut til the flettitæki.
Það var ansi arcing muna fyrir augnabliki.
Ég hef ekki hugmynd hvað þetta þýddi við fyrstu sýn.
En þegar ég óskað skrá sem var ekki til -
oops, þurfum við að keyra the framreiðslumaður aftur.
Þegar ég bað um skrá Það var ekki til, EISDIR,
svo eitthvað um það að vera skrá,
ef ég gera sumir af handahófi band þar,
virðist þýðir að skrá er ekki einu sinni til.
Og það er vegna þess að númerið mitt er einfaldlega að segja að skrifa
út hvað sem Raw Villuboð er,
svo ekki mjög notendavænt en að minnsta kosti ég er að meðhöndla það.
Annars, ef það var ekki Villa Hvað er ég að gera?
Sama og áður spýta út í 200 lagi, látlaus -
text / plain tegund hugur og þá spýta út gögn.
Og það er hvers vegna ég er að fá innihald hello.txt sem bara
til að staðfesta hvort ég horfði á hello.txt,
það er bókstaflega bara halló, heimur.
Og ef ég breytt þessu halló, heimur, vista skrána,
endursýning the framreiðslumaður, endurhlaða síðunni.
Nú fæ ég að útgáfu.
Svo, ég hef í raun bara reimplemented vefþjóni
sem er við lýði í mörgum ár en með node.js.
En við getum gert þetta jafnvel meira hreinlegur.
Leyfðu mér að opna async-1.js.
Nú, eftir ég ætla að bæta annar mát í þetta sinn,
virðist leið mát.
Nú, þetta er góð tækifæri til að líta
á hvaða skjöl lítur út.
Node.js er gögn.
Eins og PHP Ég hugsa er reyndar mjög góður
og blátt áfram.
Ef ég fer til node.js og Google og leita að node.js leið,
hvað þú munt sjá venjulega er bein tengsl til a URL
að ég setti upp hér fyrir augnabliki.
Svo / API er opinber staður að fara fyrir skjöl.
Og hvað þú munt sjá á the toppur
af opinberu skjali hnúturinn er er allar þær aðferðir og
eða eiginleikum inni á þetta tiltekna einingu,
einn sem er kallað ganga.
Og taka þátt er hjálpar virka það er að fara að leyfa mér
að ekki nenna með allar plús-merkjum.
Og það hefur bætt bónus eins og þú munt sjá
frá höfninni er það einnig normalizes leiðir leið.
Svo ef notandi eða hefur punkta eða punktur punktar eða sambland
af þeim tegundum hlutfallslega brautir, meðal upsides
af sameinuðu aðferð er að það er að fara að þrífa allt sem upp
og gefa þér Canonical Slóðin án
þessara punkta eða punktur punktum.
Svo er það gott í almennt fyrir öryggi amk
ef þú ert að haka við skila gildi sem ég er ekki
í þessu tiltekna einfalt mál.
En ég gerði vilt nota það.
Svo, ég búa nú slóðina A lítið meira kerfisbundið
með path.join staðinn hráar samtenging.
Svo, þessi 'a lítill hreinni en áður.
Og nú eftir ég ætla að vera lítið meira greindur frekar
en bara í blindni reyna að lesa hana,
Ég ætla að í raun og veru kalla fs.stat.
Svo, ef þú ert kunnug
með lágu stigi C aðgerðir og C, jafnvel PHP.
A einhver fjöldi af bókasöfnum Þessi aðgerð stat skilar
í raun tölfræði á skrá, the skrá stærð,
heimildir, nafn og svoleidis,
og einnig óbeint ef skrá er til eða ekki,
og ef það er á skrá eða möppu
eða táknræn hlekkur eða eitthvað annað.
Svo nú eftir, ég er starf fs.stat.
Og þá virðist samkvæmt í gögnum,
Ég ætti að fá til baka í villa mótmæla
eða Null fylgt með tölfræði hlut.
En við skulum athuga þetta, node.js.fs.
Hér er skrá kerfi skjöl.
Leyfðu mér að leita að ástand.
There 'a einhver fjöldi fleiri aðgerðir hér.
Úps, þessi stat Sync, fs.stat.
Svo hér er það ósamstilltur ástand (2).
Það er sem þýðir að ef þú muna frá helstu síðum,
kafla 2 á aðalsíðu,
sem þýðir að þetta er bókstaflega bara hnút framkvæmd
af lágmark-láréttur flötur kerfi virka stat.
Svo, svarhringingu fær tvær rök, villa og stat
þar stat er fs.stats mótmæla.
Svo við skulum sjá hvað þetta mótmæla er ætlast til að líta út.
Skulum smella á tengil og ég sé það.
The tölfræði mótmæla inniheldur virðist sumir hjálpar aðferð,
er skrá er skrá, er fullt af öðrum hlutum.
Það er "er" skrá sem ég hugsa um í þessu tiltekna tilfelli.
Svo hér er ég að fara.
Ef það kom upp villa, þá láta mig splæsa bara í þetta sinn
og gera ráð fyrir.
Ef það er villa, og það var líklega 404 skrá finnst ekki.
Það gæti verið eitthvað annað
en ég er að vera svolítið latur hér bara til að leggja áherslu
á fleiri áhugaverðar upplýsingar.
En fyrir notandann er tilgangi, skrá finnst ekki,
ef það væri einhver villa tilgreina skrá.
Annars, láttu mig athuga hvort skrá er örugglega raunverulegur skrá.
Þannig að ef það er ekki skrá, er það.
Það er eitthvað þarna, en það er líklega skrá
eða kannski táknræn hlekkur
eða eitthvað annað sem er angurvær á skrá kerfi.
Hvort heldur sem notandi ætti ekki að sjá það.
Svo nú er ég bara að fara að spýta
út venjulega leyfisleysi 403.
En aftur bara venju,
Ég hefði getað notað eitthvað annað í orði.
Og þá loks, láttu mig reyna að lesa hana.
Svo, láta mig fletta niður.
Og nú eftir þetta er þar kóðann má fá smá subbulegt,
eftir því að ég er að hringja fs.readFile brottför
í sömu leið, sama svarhringingu sem síðasta sinn,
svo fyrri útgáfa.
Og þá ef ég myndi finna -
ef ég finn það ekki, Ég spýta út af 500.
Og ef ég finn það, hvað lína erum við að fara að sjá hér?
Við erum að fara að sjá FS skrifa haus 200 líklega
og res.end senda raunveruleg gögn.
En taka þetta.
Og þetta er ekki sýnileg af versta falli.
En ég hef þetta stat kall hér en ég hef smá dót.
Þá hef ég annað ósamstilltur kalla hér,
svo fleiri inndrátt.
Svo, bara svona framreikna ef þú gætir hér.
Hvaða vandamál hefur tilhneigingu til að koma með tungumálið eins JavaScript
í þessu umhverfi þar sem þú ert ekki aftur gildi
heldur þú ert þessi callbacks.
Og auðvitað, þetta er bara stylistic hlutur þá staðreynd
sem ég halda indenting.
En taka þetta til eðlilegt næsta skref.
Ráð fyrir að það væri einn eða tveir eða þrír aðrar aðgerðir
að ég þyrfti að keyra það voru í eðli sínu ósamstilltur,
og því sem þú bara svona halda indenting að sinna þeim,
að sinna þeim, að meðhöndla þá.
Þú færð konar svarhringingu helvíti eins og fólk kallar það
þar númerið þitt byrjar að fá mjög breiður
og hreinskilnislega mjög erfitt að lesa.
Eins og það er, ég get svona varla segja að þetta er tegund af flæði
sem hefur þessa tegund
af stylistically horn hlutur að fara á hér.
Svo, þetta er ekki hugsjón vegna þetta getur mjög fljótt orðið
ómeðfærilegur, jafnvel þótt tveir ósamstilltur kalla ekki
svo stór samningur.
Svo gætum við forðast þetta, ekki satt?
Þú gætir hafa glittir að Ég misclicked fyrir augnabliki.
Í skjölum, þú veist, það lítur út eins og það er statSync.
Og statSync tekur ekki svarhringingu sem rök.
Það tekur bara leið vegna það þýðir greinilega hvað?
Það skilar dæmi af fs.stats.
Þannig að þetta gæti verið þinn Fyrsta eðlishvöt, ekki satt?
Sérstaklega ef svarhringingu virka
og asynchronicity er lítið nýtt þér hreinskilnislega,
auðveldasta aðferð er líklega bara forðast vandamál allt
saman, fara til baka til að raða af CS101 stíl forritun
þar sem þú hringir virka eða aðferð, skilar gildinu,
kalla virka, skilar gildi,
virka, skilar gildinu.
Og ég gæti notað því fs.statSync
sem er bókstaflega sama en það er samstilltur útgáfa
sem þýðir að það skilar gildi.
Það stenst ekki að gildi við svarhringingu.
En hvers vegna vildi að líklega verið kjörhitastig lausn að grípa
til samstilltur virka?
Já?
[Inaudible Athugasemd]
Nákvæmlega, það tekur langan tíma.
Þú ert bara að hægja allt niður.
Því mikið eins Shake Shack eða Tasty Burger, ef þeir got losa
af þeim buzzera og gert þér, viðskiptavinurinn standa í framan
af línu þar maturinn er tilbúinn áður jafnvel að taka pöntunina
á mann á bak þú augljóslega
gegnum Put hægir.
Fólk að tínast, þú draga svoleiðis pakka.
Þú getur gert hvaða númer af hliðstæður hér.
En í stuttu máli er það sennilega ekki gott
fyrir viðskipti eða fyrir þjóninn.
Svo ósamstilltur kóða er yfirleitt góður að minnsta kosti
í þessu tilfelli, en það ákveðið byrjar að valda einhverjum angst.
Og í raun ég þora að segja þegar fyrst að skrifa þetta dót,
það mun taka smá hluti af að sættast við.
Svo, við skulum byrja að búa þú með einhverjum bókasöfnum
og aðferðir til að gera þetta svolítið auðveldara.
Svo er einn af algengustu bókasöfn eru vinsælar bókasöfn
þessa dagana, þetta einn heitir async.js.
Og eins og a einhver fjöldi af node.js bókasöfn eða einingar,
þetta eru allt opinn uppspretta.
Þeir lifa nánast allar og fá Ás geymsla sem er góður
á að verða í reynd staðurinn til að geyma þessa hluti.
Og þá er það heild innviði
fyrir að setja þetta heitir NPM, Hnútur Package Manager
sem ef þú ert kunnug með EvanTube er góður
af eins app eða app fá.
Ef þú ert kunnug með Red Hat og Fedora
eins í tækið, það er eins Yum.
En það er hnúturinn - það er pakki framkvæmdastjóri bara
fyrir þessa tilteknu umhverfi.
Svo getum við sækja og setja hluti eins og async bókasafn
og einnig annað sem kallast undirstrika bókasafn eða mát.
En þessi eins langt FS, HTTP, slóð,
þeir eru allir að koma byggð á hnút.
Þannig að ef við förum til API docs, þú munt reyndar sjá að byggð
í hnút sem þú færð ókeypis allt fullt af einingum.
En fullt af fallegu fólki á Netið hefur gert heilmikið
ef ekki hundruð önnur bókasöfn
að gera hlutina betur eða á annan hátt.
Svo, láta 'taka a líta á hvernig þetta bókasafn virkar.
Svo, af þessum kóða er eins í bili.
Ég er með slóð tilvera búin upp efst.
Og nú er ég að hringja async.series.
Svo async bókasafn, það er bara bókasafn sem leyfir þér
að fara eða hækka yfirleitt um aðgerðir til að fá kallað einn
á eftir öðrum bara að eins konar forðast að innfærslu mál,
og í raun bara andlega Angist sem mun ávallt koma
að minnsta kosti þegar þú fyrst sökkva sér inn í þetta á eigin spýtur
með forritun asynchronously.
Eins og í hliðar, ef þú hefur tekið 161 og þú hefur brugðist við lásum
og hækka skilyrði og allt þess, ósamstilltur kóða
og umhverfi eins og node.js er í raun miklu,
miklu einfaldara að öllum líkindum
en í raun og veru að skrifa multithreaded kóða.
Hvenær sem þú ert multithreaded númer,
þú þarft hækka skilyrði.
Þú þarft að hafa áhyggjur af tveir þræðir sem innihalda
fyrir sömu auðlindir diskur eða minni.
Fegurð JavaScript
í node.js er það er bókstaflega bara einn þráður,
sem þýðir að vafra
eða miðlara getur aðeins gera eitt í einu.
Það er bara komið að þér, forritari
að halda andlegu líkan fyrir hvernig þú biðröð tegund af hlutur
og reikna út hvernig að panta kóðann þinn.
En þú þarft aldrei að hafa áhyggjur um hækka skilyrði
í alveg sama hátt í síst með Raw kóða eins og this.
Svo, það er lítið erfitt að grack hér.
En - Svo láta mig opna læknarnir fyrir réttlátur a augnablik.
The async.js bókasafn sem Á sama hátt er mjög Googleable,
það býr í GitHub repot eins mikið af þeim.
Held ekki það er sketchy, er það ekki.
Leyfðu mér að fletta niður til lesa mig hér.
Svo, async bókasafn veitir heild búnt
aðferða innan þess.
Til dæmis, það er aðferð sem kallast hvor,
sem ef ég smelli þetta bara að sjá docs sínum um stund,
þetta er fall eða aðferð sem leyfir þér að gera eitthvað
eins og fjögurra hvert en á samfelldan hátt.
Þeir eru allir að fara að gerast hugsanlega á samfelldan hátt.
Og aðferðin hvor er aðeins að fara til baka til þín þegar allt
af endurtekningum eru lokið.
Svo kannski þeir gerast hvert á eftir öðru.
Fullkomlega, gerast þeir í meginatriðum á samfelldan hátt.
En aðferðin er ekki hringja í þig til baka.
Það skiptir ekki færslurnar þínar buzzer uns allt
af þeim þáttum sem þú hefur áréttuðu eldri hafa lokið.
Svo, það er bara ágætur vegur
forðast að nota einfalda fjögurra lykkja
en í raun að gera eitthvað asynchronously.
En nú meira beint í tengslum við þetta dæmis,
eftir því að það er þetta röð aðferð.
Og láta mig draga bara upp einfalt Canonical dæmi.
Svo async bókasöfnum, röð aðferðin tekur í eins og fólst í
af hornklofum í array.
Hvað eru gögn gerðir af þeim þáttum
í þessu fylki byggir á einfalt dæmi?
Þetta er fjölbreytta valkosti.
Svo í C, myndir þú kalla þá virka ábendingum.
Í JavaScript, það eru fleiri almennilega tilvísanir til aðgerða
eða nafnlaus virka.
Og þetta þýðir bara, fylki
auðvitað eru pöntuð frá núll upp.
Svo, þeir hafa haldið fyrirmæli sem er gott
fyrir röð, af því að röð Auðvitað þýðir að gera eitthvað
í stað þess á samfelldan hátt.
Svo er þetta bara þýðir að þetta aðgerð mun fá fram,
þá er þetta einn, þá er þetta einn, this einn, þá er þetta einn,
þó margir það eru
þar til að lokum valfrjáls svarhringingu er kallað.
Svo, eftir hugmyndafræði hér.
Og jafnvel þótt það er bókasafn einn gaur er,
það er dæmigert fyrir mjög algengar JavaScript hugmyndafræði
af aftur með callbacks.
Svo, eftir hvað þú gerir hér.
Í fyrsta virka að vera samþykkt í gegnum þetta fylki,
þú skilgreint nafnlaus virka bara með virka.
En tilkynning sem virðist samkvæmt þessum gögnum,
sem nafnlaus aðgerð ætti taka rök svarhringingu.
Sem er að fara til vera a bendiprik eða vísun í aðgerð
að þú ættir að hringja þegar þinn númerið er tilbúinn til að skila gildi.
Svo aftur, ólíkt fyrir aðeins venjulega málsmeðferð forritun
þar sem þú ert að nota til að aftur gildi strax
að sá munur með nota bókasafn svona
í ósamstilltur forritun meira almennt, er þegar þú ert tilbúin
að skila gildi frá gagnagrunni, úr skrá,
frá stærðfræði tjáningu, það er komið að þér
til að hringja í svarhringingu virka.
Og ágætur hlutur um þessu bókasafni
ef við lesið docs meira vandlega er þessi,
ef og aðeins ef öll á callbacks svæði sem heitir
án villa mótmæla, verður að heild hlutur að ná árangri?
Svo í öðrum orðum, ef það eru 2,
ef það eru 10 nafnlaus aðgerðir
í þessu fylki því í þessari röð,
Aðeins ef öllum þeim árangri,
mun endanleg valfrjálst svarhringingu talist vel?
Ef einhver af þeim mistakast, hvert hlutverk
eftir það verður ekki jafnvel að framkvæma.
Svo, það er ágætur vegur af tegund að hafa Daisy keðju
sem hætta við leit snemma ef eitthvað fer úrskeiðis.
Svo til að sjá þetta í samhengi, hér er hvernig við gætum aftur innleiða
að fyrri áætlun.
Ég fæ leið og áður, þannig að þetta er auðvelt að hluta.
Ég afrita límdu þennan beinagrind númer
frá gögnum þar async.series opinn sviga,
opna ferningur krappi.
Og nú eftir að ég hef einn virka í þessari byrjun
úr sekúndu, munum við sjá þar sem við förum frá þessu.
Og nú eftir, það er lítið flókið í fyrstu
en einblína bara á hann línu fyrir línu.
Fs.stat þýðir að fá tölfræði eða hvað ekki af þeirri braut.
Kalla þetta svarhringingu þegar tilbúin.
Þessi kóði er það sama og áður.
Ef það er villa, það er einn munur núna.
Aftur, mjög algengt mynstur í node.js forritun er
ef eitthvað fer úrskeiðis og svarhringingu þarf að vita
að með því að venju, fyrsta rök til svarhringingu er að fara
ekki vera, ef allt er vel eða tilvísun til villu hlut,
höfuðborg E. Það er eins og að Villa klasa sem eru á heimsvísu
en meira um það seinna.
Svo með því að gera þetta, ef það er villa, hvað er vísbendingu?
Vel miðað við það sem ég sagði röð gerir,
er ef eitthvað fer rangt, bara að við svona viljum
hætta við allt röð nafnlaus virka símtöl.
Svo, nægir það fyrir mig að bara aftur svarhringingu brottför
í villa mótmæla.
Vegna þess að ef stat gaf mig aftur villa,
Ég gæti búið til nýjan Villa Object mína eigin,
en ég er ekki alveg sama til,
Ég vil bara að fara hvað sem villa er sem raunverulega gerast
svo ég get gefa það við þessa svarhringingu.
Og bara til að vera skýr, aftur er ekki brýna nauðsyn.
Ég vil fyrst og fremst að gera þetta en ég vildi gera núna "aftur;
/ / Svo að ekki meira code here keyrir ".
Svo aftur annað algengt venju í JavaScript,
jafnvel þó þú sért ekki aftur inn gildi í sjálfu sér,
þú vilt fara á verðmæti til svarhringingu virka
en þá sem þú vilt til að stöðva framkvæmd
af virka þú ert í, léttvæg vegur
til að gera þetta er bara að hringja aftur hingað.
En það er ekkert rangt,
við erum bara að gera aftur svarhringingu villa jafnvel þó að það er að fara
til að fara aftur í óskilgreindu gildi.
Allt í lagi, þetta er ekki skila gildi líklegast.
Allt sem ég hugsa um er að borð frekari framkvæmd.
Svo conflation mín af þessum tvær línur er bara stylist
að venju bara til hafa fjölda línu
af kóða ég skrifaði bara 2-1.
Svo hvað annað?
Ef það er ekki villa -
reyndar að vera skýr Ég gæti einnig forðast
að með því að gera ef annar.
En aftur, annar sameiginlegur hugmyndafræði er stöðva
fyrir villur þinn upp efst og þá bara aftur frekar en að halda áfram
til að draga númerið þitt með elses og elses og elses.
Þannig að ef það er ekki skrá, nú, þú veist,
Ég vil að höndla þetta smá sérstaklega.
Svo hér eins og í Java eða C + + eða nokkur önnur tungumál,
hér er hvernig geta tilvik af hlut að slá villa brottför
í sjálfgefnum skilaboðum af ekki skrá
og þetta er bara nokkuð handahófskennt.
En ég er að merkja villa á mína eigin.
Og hvað er þetta síðasta lína væntanlega signify?
Allt er vel.
Ef þú fara í null fyrir villa breytu, sem bara meina
með venju allt er vel.
Svo, sem þýðir það mun gerast rökrétt?
Ef null er liðinn til svarhringingu
sem þýðir að þetta nafnlaus aðgerð hefur tekist
svo að segja.
Svo, hvað ættir röð aðferð undan og nú gera miðað
á munnleg skýring minn áðan?
[Inaudible Athugasemd]
Hreyfa á til the næstur einn, ekki satt?
Ef það hefði skilað er ekki núll gildi, það myndi bara hætta
og ekki meira nafnlaus virka myndi fá kallað.
En vegna þess að það hefur ekki, þá þetta mun verða kallað næst.
Svo, rökfræði hér er laglegur mikill the sami eins og áður
og við munum sjá hvernig á að þrífa þetta upp frekar í smástund.
Ég geri mér grein þetta er góður af a einhver fjöldi
að gleypa allt munnlega og sjónrænt.
En nú eftir, annað nafnlaus aðgerð sem ég vil
að framkvæma í röð er til að reyna að lesa hana.
Kalla þetta svarhringingu þegar þú ert tilbúin.
Ef það er villa, bara merki það við vegur af the svarhringingu
þannig að restin af þetta dót hætta við leit.
Annars aftur null.
En hvers vegna er ég liggur í tveimur rökum?
Jæja þetta sinn ef ég las skráin og fá til baka
sem breytu sem heitir gögn,
Ég vil ekki bara signify allt er vel með aftur null
fyrir fyrstu rök.
Ég vil fara aftur í raun gögn sem seinni rök.
Vegna þess að ef ég las lengra í skjölum,
taka þetta síðasta klumpur af kóða ferningur krappi þýðir það er
lok röð.
Það voru aðeins tvö nafnlaus virka í þessari röð.
Ef það kom upp villa hér, þá Ég veit að einn af tenglunum
í þessari keðju svo að tala mistókst.
Svo í öðrum orðum, this villa er að fara að vera villa mótmæla
sem er núll ef einhver þessir gaurar mistókst.
Og ef það er málið, ég er bara fara að tryggingu út og ég ætla
að segja 400, sem þýðir beiðni mistakast,
það er mjög almenn villuboð.
Og þá ætla ég að prenta út villuboð.
Svo, ég er ekki að angra til vera frábær endaþarms þetta sinn,
Ég ætla ekki að greina milli 500 og 404 og 403,
Ég er bara svona blindni veifa hendinni minn
og segja eitthvað fór úrskeiðis.
En ef ekkert var að fara úrskeiðis,
Ég ætla að senda þetta res.end brottför þessi gögn.
Nú lítur þetta svolítið dulinn.
En aftur, ef ég las skjölin,
Seinni rök að þetta endanlega, endanlega svarhringingu,
gaurinn sem er aðeins keyrð Þegar röð er gert
framkvæmd eða hluti þar af, þetta er að fara að vera fylki
af öllum öðrum rökum
sem voru samþykkt til svarhringingu.
Nú kemur í ljós að aðeins hlekkur í þessari röð
að í raun að fara aftur sekúndu rifrildi er þetta hér.
Þannig að ég ætla að raða á á á áræðni nota einfaldlega Segjum
fyrir stundu að síðasta er aðferð
sem gefur þér síðasta Stök fylkis.
Vegna þess að þetta array sem er verið að fara framhjá
mér hefur tvær Tölur, núll og einn.
Það er bara núll hefur ekkert gildi því þetta strákur skilar -
ekki fara í annað rök en þessi strákur er.
Svo niðurstöður krappi núll er ekkert,
Niðurstöður krappi einn inniheldur það,
ef þú hefur verið að fylgja eftir allt að þessum tímapunkti?
Skrárinnar, halló, heimurinn efni væntanlega,
svo er það hvernig ég reyndar prenta það.
Og láta mig klára eitt smáatriði hér.
Ef ég gera þessa tegund af gamla skóla, ef ég vil fá
á síðustu þætti, ef ég gæti gera Results [results.length-1],
sem er tegund af gamla skólanum
þess að opna síðustu þætti í - eða núll vísitölu array.
En eins og í hlið, muna að ég hefði þetta safn
upp hér undirstrik sem eftir Samningurinn er bara kallað
bókstaflega undirstrikanir eðli sem er ekki sérstakt,
það lítur bara flott eins og dollaramerki er fyrir jQuery.
Þetta er bara hjálpar aðferð undirstrika punkt síðasta
sem er nákvæmlega sama.
Og ef þú hefur aldrei notað það áður undirstrika JS bæði
fyrir viðskiptavinur hlið erfðaskrá
og miðlara megin er frábærlega gagnlegt bókasafn
að sem flestir lýst það eins og jQuery inniheldur allt
af þeim aðferðum sem, fólk óskuðu kom með JavaScript sig.
OK.
>> Svo, eins og nokkuð við mig og Ég var að horfa í röð,
þú ert eins svarhringingu sem rök?
>> Já.
>> Eins og svo þegar þú reyndar eins og ýta þessi í,
og eins og það gerir það meina þegar þú ert bara
eins svarhringingu og þá gera eins og -
[Inaudible Athugasemd]
>> OK, góð spurning.
Svo, láta mig draga upp async helstu síðu hér
eða skjölum um GetHub.
Þannig að þetta er Canonical uppbygging.
Ef þú ert að hringja með því að nota þetta tiltekna aðferð röð,
það er tvö stór hlutar til það.
Eitt er fylki af nafnlaus virka
og tvö er endanleg svarhringingu fall sem er í raun
keyrð á mjög lok röð.
Nú, ef við zoom í smá nær á fyrsta
af þessum stóru hlutum, array af nafnlaus virka
með kröfu um þetta skjöl gaur hefur
að vera nafnlaus fall sem tekur
í Ein rök sem heitir svarhringingu eða foo eða bar, það skiptir ekki máli
en hann er að kalla það svarhringingu.
Og þetta er tegund af buzzer þinni að hrista Shack hendur þér.
Þetta er með hvaða hætti þú getur skila gildi
til viðskiptavinar vegna þess að þú getur ekki bara aftur bókstaflega.
Þú þarft að gera það með því vegur þessarar svarhringingu.
Vegna þess að ef inni í þessu virka er einhver hægur í gangi
númer eins og fyrirspurn gagnagrunn, lesa skrá úr skrá kerfi,
þú vilt ekki að bíða þar og loka öllum öðrum,
þú vilt hringja í svarhringingu.
Svo, þetta er bókstaflega nafn rök.
En eins og í C, þú hafa virka ábendingum.
Í Java sem þú hefur viðmiðunarkerfinu aðferðir
og sama hér í JavaScript.
Þetta er breytilegt en gerð þess er fall.
Svo einfaldlega með því að skrifa nafn sitt hvort svarhringingu eða foo
eða bar, þá opna sviga og loka sviga,
þú ert að framkvæma sem á að virka.
Og brottför a null sem þýðir null villa og einn
sem þýðir að þetta er gögn sem mig langar að fara inn
Og þá klumpur til að vera skýr, þetta er annar svarhringingu.
Og það er ekki kallað svarhringingu,
það er bara eðli er svarhringingu aðferð virka
vegna þess að það er kallað samkvæmt skilgreiningu
bókasafns þessi höfundur er þegar allt röð hefur lokið
eða hlutmengi þess ef villa hefur gerst fyrr.
Svo, nafn svarhringingu virka, starf svarhringingu virka,
Nafn svarhringingu virka, starf svarhringingu virka,
mismunandi svarhringingu virka allt saman.
>> Við höfum nú eins og skilgreina svarhringingu?
>> Nei, vegna þess að þetta strákur mun fara inn í array þinn
nafnlaus föll,
bendi á númerið hann vill framkvæma.
Einmitt, allt í lagi.
Svo skaltu segja að númer fær lítið einfaldara.
Svo getur það.
Og ef þú ert eins og mig, taka huggun í að minnsta kosti vita,
það tekur tíma að venjast þessu.
En við getum hreinsa þetta upp svolítið,
ekki að kasta of mikið í þér en hér er annað tilbrigði
og þess að nota aðra aðferð
í sama safni kallað foss.
The kosti sem er ólíkt röð þar sem hver
af þeim nafnlaus aðgerðir framkvæmdar í raun
óháð hver af öðrum.
Foss eins og nafnið benda til gerir efsta Aðgerðir
að eins konar fara í gildi að neðri virka,
tegund af eins og a Cascade af vatni.
Svo kosti af þessu er að ég get góður
af nota þetta til að nýta mér.
Í async.waterfall, tilkynningu á eftirfarandi.
Ég get bara hringja fs.stat liggur í götunni
sem ég vil fá hagtölur um.
Og man þá áður en ég hafði nafnlaus aðgerð
sem hafði tvö rök skjátlast,
esults og þá kallaði ég á svarhringingu virka handvirkt?
Í annað orð er bara að vera ljóst, muna að fyrr
í async 2, gerði ég allt af þessari viðbjóðslegur vinnu.
Ég hringdi fs.stat samþykkt í P,
lýst eigin nafnlaus minn virka.
Ég skoðaði þá ef villa er ekki null síðan ég gerði þetta,
annað sem ég gerði það, alla fegurð eftirfarandi flokkun
eins og í node.js er að svarhringingu aðgerðir almennt er ætlað
að taka að minnsta kosti eitt viðfang, error mótmæla fylgt með núlli
eða fleiri gagnlegar gildi.
Svo eftir hugmyndafræði hér,
þetta svarhringingu virka er ég lýsa þannig nákvæmlega
hugmyndafræði að þessi strákur er async bókasafn gerir.
Sem er að segja þetta, hvers vegna er Ég innleiða eigin svarhringingu minn
aðferð þegar höfundur þessa Bókasafnið er bókstaflega fötlun mér
á fati svo að segja, að svarhringingu virka sem ég get notað?
Svo get ég bara fara í tilvísun hann er gefið mér
þannig að strax, mín nokkrar línur
af kóða verða ein lína af kóða.
Nú, þar sem við förum með þetta?
Næsta virka sem Ég vil að framkvæma,
næsta nafnlaus virka í þessu fylki
aðgerðir er eftirfarandi.
Tilkynning fyrsta stat er fyrsta rifrildi.
Svo hefur eitthvað breytt þegar.
Nú, þessi strákur sem skrifaði bókasafn -
og ég er að segja strákur því það er gaur.
Þessi strákur sem skrifaði þetta safn er gögn ábyrgðir
að ef þessi aðgerð hér fer ég aftur að villa mótmæla
eða null fylgt eftir með dá aðskilin lista yfir önnur gildi,
hann mun ganga úr skugga um að þeir önnur gildi eru afhent
í þessa nafnlausa virka í röð frá vinstri til hægri.
Og hvað er notað til að vera bara svarhringingu virka einn einfaldlega
verður síðasta svo rök.
Nú, ég veit ekki hver ég er með áherslu á bara þú veist.
En nú, hvað er taka í burtu hér?
Svo við vitum af skjöl
eða áður par af dæmum
að fs.stat endanum ráð svarhringingu með tvö rök,
The villa mótmæla sem er Villa Object eða null fylgt
með vísan til ástand mótmæla.
Þannig að ef ég hugsa um það, Villa Object dá ástand mótmæla,
sem passar í hugmyndafræði bókasafns þessa manns.
Svo get ég einfaldlega segja vegna Ég ekki annað rifrildi
að það er - það er að fara að vera samþykkt af fs.stat
til svarhringingu er skjátlast, tölfræði með því að skilgreiningu á þessu safni,
Ég get sett sekúndu Nafn rök er hér
eða hvað ég get endurnefna það
ef ég vil fylgt með svarhringingu hér.
Svo get ég framhjá einn gildi frá hér að hér.
Nú, allt þetta kóðann þó að vísu nokkuð dulinn er
amk afrita líma fyrir að mestu úr áður.
Eini munurinn er tilkynning hér er ég að lýsa yfir Villa
mótmæla og nú vil ég að fá smá áhugamaður.
Ég vil í raun að vita hvað villa var, þannig að ég ætla
að brot innan þessa viðfanginu eign geðþótta kallað númer
þannig að ég veit að þetta er ekki skrá
sem ætti að vera óviðkomandi, það er HTTP 403.
Leyfðu mér að muna að áður Ég standast villa mótmæla
til svarhringingu.
Og þá loks að reyna að lesa skráin, þannig að í þessu tilfelli,
Fossinn, ég hef brotið kóðinn frá tveimur stórum skrefum
í þrjá smærri skrefum.
Takið eftir fegurð hér,
Ég get hringt fs.readFile liggur í götunni.
Og þá harður hluti andlega, er ég fara bara
í svarhringingu gaurinn er.
Málið er hann lætur mig, ég er að fara að fara til fs.readFile.
Vegna þess að við erum öll tolla til sömu samninga,
fyrsta rifrildi við svarhringingu er error hlut eða null fylgt
með því að dá eða aðskilin listi af gagnlegur efni.
Svo, hvað það þýðir nú og ef ég lesa skjöl ég veit
þetta er mjög síðasta svarhringingu, þessi strákur hér úti
af hornklofum er að fara til að fara framhjá í villa mótmæla
eða null sem ég ætti að athuga fyrir Eins og alltaf með þennan kóða hér.
Og þá við skilgreiningu þessarar aðferðar
í skjölum gaurinn er, síðasta gildi aftur
af því sem síðast aðferð nafnlaust fylking minn -
array mitt nafnlaus virka.
Svo, hvað þýðir lesa skrá aftur
og ég er að nota aftur lauslega núna.
Ég meina hvað er að lesa skrá framhjá sem rök
til svarhringingu aðferð hönd hennar?
Tvær breytur, fyrst er error hlut eða null,
það er nánast alltaf fara að vera svar.
Og seinni hlutur er að fara að vera það til að lesa skrá?
The innihald af the skrá, gögn eins og við kölluð það áðan.
Svo, með því einfaldlega að lýsa skjátlast, leiða,
og athuga fyrir mistök þessa er tegund af leiðinlegur núna.
Annað, ég res.end liggur í því kjölfarið.
Þetta mun án efa ekki sync í fullkomlega
þar til þú raunverulega skrifa það sjálfur.
En nú, taka í burtu að minnsta kosti sú staðreynd
að það er greinilega þetta sameiginlegur hugmyndafræði, þar ef við
og höfundar bókasöfnum allir tegund af stafur
samningi þessum af aðferðum hringinga.
Og fyrsta rifrildi er error hlut eða null.
Og öðrum og þriðja
og fjórða hlutir eru hlutir annt um og við raða
af fylgja reglum og skjöl.
Við byrjuðum með kóða sem heiðarlega er ansi ljót.
Og jafnvel þótt nýjustu dæmi er satt konar erfitt
að vefja huganum kring, það er að minnsta kosti sjónrænt,
lítur út eins og það er miklu strangara.
Og þegar þú færð ánægð með það, það er svo miklu auðveldara
og það er svo mikið minni tilhneigingu til galla en að fyrri dæmi.
Svo, láta mig sýna Einn síðastur hlutur hér.
Þetta er útgáfa þriggja.
Og - Nei, við skulum láta þetta eitt sér.
Leyfðu mér að fara inn í a par af Á síðasta atriði sem styttingu.
Allt í lagi, svo í miðlara 2.
OK. First, einhverjar spurningar, Ég veit að þetta er mikið
en þú vildir meira leiðbeiningar, svo?
Þú varst ekki að segja gott kennsla endilega.
Já?
[Inaudible Athugasemd]
Rétt, þú ert í raun mildi að stýrikerfi
að reikna út hvernig á að juggle öll þessi boltum í einu,
lesa úr skrá lesa úr gagnagrunni.
Og það er þetta JavaScript Server sjálft sem er einn snittari.
Og í raun og í raun,
það er ein mynd Ég vissi ekki ælt
og það er ekki endilega allt sem uppfræða
en kannski munum við gefa þú andlegt líkan.
JavaScript sjálft og hnútur
sér í lagi hefur þetta svokallaða atburður lykkja.
Þar er hægt að hugsa af node.js, the program,
er bókstaflega eins og óendanlega lykkju.
Það er bara villt lykkja, bíða og bíða og bíða,
leita fyrir verkefni til að ljúka.
Og verkefni gæti verið, fara ná eitthvað úr gagnagrunni
eða hér er gildi frá gagnagrunnur eða fara fá þessa skrá
af diski eða hér er farið fram frá notanda.
Hvers konar atburði, rétt eins og vafra atburður ekið,
svo sem miðlara hlið atburður ekið.
Og eitthvað af þessum hlutum eru viðburðir.
Svo einhver í node.js, bara skrifaði óendanlega lykkju,
stór villt lykkja, bíða fyrir efni til að gerast.
Og eins og efni gerist, það endar í biðröð, ekki satt?
Vissulega, gagnagrunnur gæti skila gildi.
Og skrá kerfi, stýrikerfi kerfi gæti skila gildi
á svipuðum tíma En það er líklega að fara
að vera einhvers panta til þeirra.
Og node.js er að fara að hafa fyrst og fremst á biðröð
eins og stór fylki eða nokkurs vektor, sumir gögn uppbygging
sem minnkar allt af þessum hlutum.
Vegna þess að það getur bókstaflega aðeins höndla einn af þeim í einu.
Svo, þegar þú, framkvæmdaraðila,
skrifa ósamstilltur JavaScript kóðann með ósamstilltur
virka, þú ert að leyfa þetta svokölluð atburður lykkja til að fara
á næsta merkið, ekki satt?
Svo lengi sem þú strax aftur eins og allir
þessara ósamstilltur aðferðir gera eins lesa skrána og stat,
þeir aftur strax vegna þess að svarhringingu lokum
fær aftur.
Um leið og þú kemur aftur,
sem þýðir að einhver annar getur fá smella af lager hér
eða að það er hægt að fá smella burt framan biðröð hér.
Og svo, það er í staðreynd Serialization
af öllu sem er að gerast,
jafnvel þótt allt þetta dót getur verið að gerast samhliða
á multithreaded kerfi.
En node.js sig og Miðlarinn hlupuð
sem einum þræði.
Og niður hlið sem er T þú gerir ekki endilega hámark
út tölvunnar hæfileiki er eins sérstaklega
ef þú ert með 16 kjarna eða jafnvel 2 algerlega tölva
og þú ert bara að keyra Eitt dæmi um hnút.
En ef þú hefur aftur tekið eitthvað eins 161,
þú forðast mikið martröð af höfuðverk þegar það kemur
til kynþáttar skilyrði og lokka og Semaphore
og skrifa sannarlega multithreaded númer,
svo upsides og downsides.
OK. Svo aftur til kóðann hér, láta mig leggja til að við byrjum
Til að einfalda hlutina svolítið.
Við sáum Server Einn svolítið síðan sem leit svona út.
Svo, það er að öllum líkindum frekar einfalt.
En rétt eins og í heiminum PHP eru ramma
eins Laravel og það er hluti eins Teinn og Django,
sama í node.js heiminum.
Og við munum eyða meira tími á þetta á miðvikudag
og í næsta verkefni.
En ef ég fer inn á miðlara 2 Directory,
taka nokkrar málin hér.
Svo er þetta - það að fara til að vera jafngilt dæmi
en það er með ramma sem kallast express.js,
sem er frjáls opinn uppspretta hugbúnaður eins Teinn og Django,
eins Laravel, sem er bara á endanum að fara
að vera metin að verðleikum í dag Því við höfum verið að skrifa
svo einföldum dæmum.
En treystu okkur.
Þetta mun mjög fljótt verða vinur þinn
því það mun spara þú a einhver fjöldi af TDS kóða.
Og sameiginlegt fyrirmynd fyrir að express.js umsókn er
að hafa app.js eða server.js skrá sem inniheldur rökfræði
af forritinu eða kosti innganga benda.
Hægt er að hafa margar skrár.
A hnútur mát subdirectory sem hefur bókasöfnum
sem þú hefur sótt eins async
og tjá sig í öðrum.
Og þá package.json, package.json lítur svona,
og þú getur búið það handvirkt eða verkfæri búa hana til fyrir þig
og það er bókstaflega a JSON skrá
Og áhugaverður hluti er ósjálfstæði hér.
Rétt eins og í Laravel, þú hafði þessi seljandi skrá
og þú þurftir að hafa áhyggjur um pakka og gera -
reyndar að uppfæra með Artisan eða svipuð skipanir,
bókasöfn þú hefur sett upp,
álíka með package.json hér og þú stjórna bókasöfnum
og útgáfur að þér er annt um.
Svo ef ég hef package.json, Ég get einfaldlega ekki NPM,
Hnútur Package Manger setja, það er að fara að sjálfkrafa líta
á þeim package.json skrá.
Líta og sjá, ég hafa nýjustu útgáfu
af öllum söluaðilum einingar
í hnút undirstrika einingar Listinn hér eða kannski
í sumum foreldri eða forfaðir skrá.
Og ef ekki, er það að fara að sækja þá
og þú munt sjá a heild búnt
HTTP efni að fara yfir vír.
Svo til dæmis, láta mig sýna þér innihald
tengipunktur mát bara að tjá.
Láta mig fara á undan og djarflega eyða hnút mát
þannig að allt sem ég hef nú er þetta.
Og ef ég setja NPM, þú munt sjá að það er að fara að lesa
að package.json skrá og við höfum séð framleiðsla svipað
að þessu í Laravel heiminum.
Það er að hlaða niður í heild fullt af dóti og það er
því tjá síðan veltur á a heild búnt
af öðrum þjóðum bókasöfnum.
Svo eru allar þessar konar sóttar endurkvæmt.
Þangað til nú, ef ég geri LS aftur,
það er hnútur einingar mínar Listinn baka
og tjá eins aftur.
Svo það er bara leið til að einfalda pakki stjórnun.
Nú, ef við skoðum það app.js skrá, þetta er að fara
að vera afturhvarf til Elstu okkar vefþjóni
þar sem við spýta bara út "halló, heimur".
En taka eftir margbreytileikanum hér,
fyrst við krefjast þess að tjá mát, þá höfum við þessa línu
af kóða sem þú veist frá gögnum.
Þú ferð bókstaflega að breytu mát er sem fall,
svo opinn sviga nálægt sviga þýðir framkvæma það.
Það er að fara að greinilega aftur eitthvað sem við erum að fara
almennt kalla app.
Hvernig það virkar?
Ég í raun ekki vita.
Ég læt einhvern annan, þú veist, í Express heiminum skrifa það.
Ég ætla að nú standa á axlir hans eða hennar svo sem
til að gera forritið mitt keyra svolítið einfaldara.
Hérna, ég er að fara að hlusta á þessi sérstakur höfn
sem gæti verið mest nokkuð.
Og hér er númerið sem er kannski meira minnir nú
af Laravel og routes.php.
Svo er þetta kvöldmatartíma einfalt, ég er bara að fara að tilgreina leið
fyrir slash stjarna, svo allt er að fara að vera niðursokkinn
með þessari beiðni dýraþjálfari.
Hugmyndafræði fyrir beiðni dýraþjálfari er nafnlaus hlutverk hennar
með beiðni rifrildi
og svar mótmæla bara eins og áður.
Og res.send í tjá hætti þú sendir kóðann fylgt
með hvað sem þú vilt senda.
Og auðvitað, þú getur gera eitthvað áhugamaður
því í raun að senda skrár eða HTML
eða breytilega mynda efni.
En nú, allt sem við gerðum var spýta út Halló, heimur.
Ef við förum inn í miðlara þrjú, þetta er jafnvel áhugamaður bara
til að sýna þér nokkur virkni.
Og við munum sýna þér jafnvel sexier útgáfa
þetta á miðvikudag.
En ef þú hefur einhvern tíma heyrt fals IO Kannski,
þannig að ég held að Jonathan eða einhver sagði áðan,
einn af þeim hlutum hnútur er í raun þekkt
fyrir er raunverulegur tími til þess hegðun, ekki satt?
Hugsaðu um PHP í MySQL, ef þú voru að innleiða spjall miðlara
í PHP þar sem tveir menn gætu opna glugga til foo.com
og þá byrja AIM; hvert annað, Alice í einum glugga,
Bob í annan þannig að hver þeirra sér hann
eða skilaboð hennar í hinn glugga.
Hvernig myndir þú gera þetta í PHP og MySQL?
Nota eða nota ekki Laravel konar af óverulegt, getur þú hefur
eins og index.php skrána.
Og þú verður að hafa - í sumum tilvikum er got að spýta
út af mynd, þannig að það er að fara að vera í HTML formi
sem sennilega skilar ekki um venjulegt útfylling
en Ajax sennilega, ekki satt?
Svo, á senda sýnandi, svo þú slærð inn í textareitinn,
þú högg koma inn og þá fær það send til miðlara gegnum Ajax.
Hvað gerir þú þá gera á þjóninum?
Svo, hefur þú fengið index.php
eða eitthvað punktur PHP sem er fékk í HTTP breytu
frá notanda, Lísa eða Bob augnablik skilaboð, hvað gerir þú
með það í því skyni að breiða það Bob eða Alice, í sömu röð?
Ég meina þú bókstaflega hafa tæki sem
að gera þetta í mín þínu.
Svo eins og hvað myndir þú gera?
Þú hefur eina mínútu til framkvæma þessa áætlun.
Já?
[Inaudible Athugasemd]
Fullkominn. Rétt, svo þú hefur fengið að gagnagrunninum.
Við vitum lítið hluti um MySQL.
Svo, þú hafa a borð það er skilaboð,
Kannski er það sinnum stimpill, notandi auðkenni,
í meginmál skilaboð sjálft búið að
uppfærð það og allt það.
Svo, þú geymt í gagnagrunni.
Og geri ráð fyrir Alice sendir fyrstu skilaboðin, hvernig virkar Bob fá
að skilaboðin nú úr gagnagrunninum?
>> Það gæti verið einhver Ajax svar sem er stöðugt að fara
aftur í gagnagrunn Top fá [inaudible].
>> Einmitt.
Svo Bob kóða sem er númer er það sama og Alice er bara tegund
af samhverft samband,
Vafrinn Bob hefur einhverja Ajax númer það er líklega kannski hverjum 30
sekúndur draga framreiðslumaður um Ajax sync,
eru ný skilaboð?
Eru ný skilaboð?
Á 30 sekúndna fresti er að fara að vera góður á ófullnægjandi
vegna þess að hann þarf að bíða jafnvel
ef Alice bókstaflega bara sendi skilaboðin.
Svo, vafrinn Bob gæti annað hvert högg á miðlara.
En það þýðir Lísa Vafrinn er hitting á miðlara
hverri sekúndu.
Hvað um Charlie [Ráð stafsetningu]
og David [ráð stafsetningu] og Edward [ráð stafsetningu]
og annan hvern bréf stafrófsins?
Hvað er vandamálið þessa nálgun?
A einhver fjöldi af hits óhófleg -
Ég meina þú ert bara í raun Skömmtun eigin augum þínum
eða DDOSing, Úthluta Synjun Þjónusta Attack
á eigin síðuna þína, með því að hafa alla
af þessum notendum keyra JavaScript kóða sem er bara smellur á
Heck út af miðlara jafnvel þótt handahófskennt númer,
80 prósent af þeim tíma enginn hefur sagt neitt
í spjallinu herbergi.
En þú ert bara að skoða að ganga úr skugga um slíkt.
Svo PHP í fullt af tungumál eru bara ekki gott
fyrir alvöru samskipti tíma.
Vegna þess að í PHP muna það er enginn miðlægur minni, ekki satt?
Þú hefur fundur hluti sem skapar þá ímynd
Mið geymsla en sem er á hvern notanda fyrir sig.
Þú þarft ekki alþjóðlegt minni eins og þú gerir í Java Servlet
í kunnuglegt eða í öðrum ramma virkar svona.
Node.js þó, þú þarft alþjóðlegt minni því þú ert
einn framreiðslumaður og það getur man hvað það vill
um alla notendur.
Og þú gætir samt hafa gagnagrunn.
En ágætur hlutur óður node.js of er að það er miklu betra
en eitthvað eins og PHP og skapa tálsýn
um að annast marga hluti í einu.
Og í raun eins og í hliðar, þú getur innleiða spjallþjóna í PHP,
en þú myndir gera venjulega eitthvað sem kallast löng Fræva
þar sem þú ert smellur ekki Miðlarinn hverri sekúndu.
Þú smellur á miðlara, miðlara ekki svara þér
fyrir upp á 30 sekúndur, situr það bókstaflega
í lykkju bíða og bíða.
Og miðlara eftirlit ef það er ný gögn í gagnagrunni
og aðeins einu sinni það sem þú sér, "Ó, hér er skilaboð frá Bob, "
er það svara HTP miðlara?
Svo áhrif í vafranum þínum er að IE helgimynd eða Mozilla
eða hvað sem bara heldur spuna í 30 sekúndur í senn.
En kosti er, finnst þér ekki hafa 30 beiðnir um tengingu
í 30 sekúndur, þú einn.
Svo það er kallað lengi fræva.
En jafnvel betra í nútíma vefnum vafrar er eitthvað sem kallast
WebSocket, sem þú tekur CS143,
þú getur í raun gera TCP tenging frá viðskiptavinum
eins og vafra á miðlara og þá hanga á henni
án þess að nota næstum eins margar auðlindir
sem HTTP gæti jafnan gera.
Og Socket IO er A node.js bókasafn
sem gerir það mun auðveldara að gera fals tengingar
eða Illusions úti á fyrir gamla vafra
þannig að þú getur innleiða þessa rauntíma virkni er.
Svo, hér er dæmi.
Þetta efni upp toppur fær að svolítið flóknara
en það er að mestu leyti að afrita og líma frá gögnum socket.io s '.
Hér er nú meira nákvæm beiðni dýraþjálfari.
Ef notandinn Beiðni um rista, hvaða skrá er ég að fara
til að vera greinilega þjóna upp til þeirra?
Index.html.
Og það er einhver nýr efni hér straumi
sem ég mun sýna þér á aðeins augnablik.
En þetta er bara önnur leið
grabbing skráar sem lítið skilvirkari
en bara að gera fs.readFile.
Það er lítið betri sérstaklega fyrir stór skrá.
Svo löng saga stutt, Þessar línur bara til að þjóna
upp skrá sem kallast index.html
sem nú ráð inniheldur HTML formi sem Alice
og Bob gæti intercommunicate.
Loksins, io.sockets.on, þannig að þetta kemur frá þessari línu upp hér.
Svo er ég bara að lesa skjöl io.socket gefur mér
aðgang að svokölluð WebSocket með vafra,
milli vafra og miðlara.
Ég er að hlusta á sérstakt atburður tengingu sem þýðir
þegar notandinn fyrst hits the framreiðslumaður reyna
til að opna þessa tengingu, ég er að fara að kalla þetta símtal til baka.
Og nú ætla ég að fara að gera eftirfarandi.
Á fimm sekúndna fresti, hvað ég ætla að gera?
Ég ætla að gefa frá sér eða útvarpsefni ef þú manst klóra,
myndræna tungumál myndi að útvarpsdagskrá blokkir?
Svo, þú ert að fara að gefa frá sér
eða kalla fram atburði sem kallast geðþótta frá þjóninum.
Og það er að fara að innihalda skilaboð Ping
og núverandi dagsetning.
Svo, þetta er í raun spjall miðlara sem Alice
og Bob getur notað, en það er tegund sjálfvirks spjall miðlara
þar sem skilaboð eru bara tegund Sonar smellur.
Það er bara dagsetning á stundum sem eru send á fimm sekúndna fresti.
Svo, ef ég hlaupa í raun þetta hlutur - og það er það.
Til að vera skýr hérna, tilkynning þetta er bara að skrá þig niður hér.
Svo, láta mig snúa blindur auga til.
Leyfðu mér að gera hnút á app.js.
Láta mig fara að vafranum mínum.
Endurhlaða heimasíðuna hér.
[Hvíla]
Og láta mig loka eftirlitsmaður.
Á fimm sekúndna fresti, ég er með sýning þótt ekki
gagnvirkt til manneldis
um eitthvað sem er gerast asynchronously.
Í vafranum fyrirvara, það er engin spuna helgimynd.
Það er með áhugamaður lögun Króm í nútíma vöfrum
viðhalda fals tengingu undir hetta
og það er það sem er kallað yfirleitt pub / undirtegundar,
birta / áskrift líkan, þar sem við höfum ekki gert
sem alveg skýrt hér.
En hvað er gott um þetta almenn pub / undir fyrirmynd er
að þú getur haft eins útgefanda.
Í þessu tilviki er miðlægum miðlara og allt
einstaklingsins vafrar eru viðskiptavinir.
Alices og Bobs hins heimurinn getur gerst áskrifandi,
svo þú getur gengi skilaboð meðal hvaða fjölda notenda.
Og jafnvel þó aftur að við erum ekki að sjá gagnvirkni,
við höfðum kannski 12 línur af kóða bara til að gera þetta.
Og það er líklega ekki hlaupár að ímynda sér hvernig þú gætir svipa
út index.html skjalið sem hefur sannkallað HTML formi,
lítill hluti af jQuery kóða með Ajax sem ekki senda dagvinnu
en bara sendir hvað Alice eða Bob gerð til miðlara
og þá þjóninn mun gengi það út.
Og ég lofa að svipinn á Einn síðastur hlutur bara
að stríða þér með þetta.
Ef við förum inn í straumi núll og einn,
þú munt sjá kóðann sem er bara svolítið öðruvísi hér.
Bara svo þú hafir séð það, Þetta er val
við það sem ég kallaði fs.readFile Aðferð fyrr, þar sem,
þú getur sagt node.js, "Go lesa þessa skrá inn í minni.
En ef það er stór bara gefa mig klumpur í einu. "
Og þú gætir vita frá CS165
eða 161 sem skrá kerfi hafa mismunandi
flutningur eiginleika.
Þú vilt kannski að lesa í blokkir af 512 bæti
eða 2 kílóbæti eða hvað.
Þetta er hagræða leið til þess að að komast aftur á skrá iteratively
þannig að þú getur spýta hann út a lítill fleiri fljótt
að vafra eða hver endirinn viðskiptavinur er.
Svo mikið magn af efni í dag og við erum að fara að kafa
inn í fleiri smáatriði á miðvikudag með Tim [ráð stafsetningu]
einkum að horfa á hvernig við getur þýtt nokkrar af þeim hugmyndum
frá fyrri hluta ársins Auðvitað Laravel og módel
í bókasafn sem hann sjálfur skrifaði heitir Bookshelf.js
sem er orðið æ vinsæll í samfélaginu
því það gefur þér mest af því,
ef ekki meira en virkni mælskur
sem muna er að bókasafn innsýn Laravel,
svo meira um það og meira hvernig
að þróa fullur viðvaningur forrit á miðvikudag.
Við sérðu þá.