>> Kevin Schmid: Saluton al ĉiuj.
Bonvenon al la CS50 seminario sur Node.js.
Mia nomo estas Kevin.
Mi estas CS50 TF.
Kaj mi estas speco de kiel vere ekscitita pri tiu seminario.
Mi kredas Node.js estas tre cool.
Mi esperas ke tiu seminario povas esti uzata kiel bona, mi supozas, saltotabulo por
iuj viaj fina projektojn se vi interesiĝas uzi
iu kiel Node.js.
>> Ni speco de komenci la seminarion off por nur parolas iomete de la
ia fono amplekso perspektivoj de Node.js, kaj poste
ni movi al iu kodo ekzemploj.
Kaj mi havos la kodon sur paĝaro, kaj vi povas rigardi la kodon.
Kaj post la seminario, mi ordigi de Diskuto pri kiel vi povas agordi Node.js
sur via komputilo.
>> OK.
Do ni komencu.
Do mi supozas ke mi simple deziras rakonti retserviloj, vere, unue.
Kaj por komenci tiun diskuton, mi esence havas diagramon, kiu estas de
La lernolibro uzata por CS61, kiuj esence montras la interago
inter kliento procezo, kiel via retejo retumilo aŭ kiel via celo kliento aŭ
io simila al tiu, kaj ret-servilo.
Do ĉi tiu speco de aspektas simila al la bildo ke vi vidis en prelego pri
Merkredo kie esence ni havas kelkajn kliento procezon kiel Google Chrome.
>> Kaj tiam paŝon unu estas la kliento sendas peton.
Do kiu povas esti io kiel bone ni viziti, mi ne scias, CS50.net.
Do ni elsendos tiu peto.
Kaj ĉu iu memoras la nomon de la protokolo kiu precizigas kiel tiu
peto devus strukturi?
Yep.
>> Spektantaro: [inaudibles].
>> Kevin Schmid: Ekzakte.
Do gxi estas kiel HTTP, ĉu ne?
Do esence la specifo por kiel ke peto devus vere esti metata
ekstere, ĉar fine de la tago, ke peto estas vere ĝuste kiel
ŝnuro kiu esence Diras mi volas tion.
Kaj la specifo cxar tio estas HTTP.
Do jen kiel protokolo.
>> Do tiam la servilo ricevas ke peton.
Do you guys havas ttt-servilo instalita en la CS50 aparaton.
Ĝi estas Apache.
Kaj ĉi tiu semajno kiam vi laboras en tiu problemo starigis sep, vi vere laboros
kun tiu ttt-servilo.
Do la servilo ricevas tiun peton, kaj tiam ĝi havas al speco de skrapi lian
kapon kaj diru kiel bone kion cxu mi faru tion?
>> Do surbaze de kio decidas fari, tiam eble devos kontakti ian
de rimedo.
Kaj tiu rimedo povus esti multajn malsamajn aferojn.
Por unu, ĝi povus esti simple kiel statikan HTML-dosiero.
Do ĝi povus esti simple kiel iuj HTML kiu estas kiel por
via persona retejo.
Ĝi povus esti statika dosieron kiel bildo aŭ kiel filmo kiun vi havos.
Ĝi povus eĉ paroli al ia datumaro
kiel MySQL datenbazo.
Do ĝi ne ĉiam devas komuniki per rimedo, sed en
iuj kazoj, ĝi povis.
>> Tial do kio okazos al fari post ĝi estas tiu, tuj
redonu la respondo.
Kaj la respondo por ĉi tiu estas Ankaŭ precizigita per HTTP.
Do tiam la kliento povas ricevi ĝin.
Ĝi povas disŝiri ĝin aparte kaj prilabori ĝin.
Kaj tiam vi ricevas retpaĝo kiel Google aŭ CS50.net aŭ
kion ajn vi iris.
OK?
>> Do tiu estas la baza interago kiu Ni tuj estos kontraktanta kun.
Kaj ni preskaux tuj estos enfokusigante ĉi tiu parto de la
interago, la servilo.
OK.
Cool.
Iu ajn havas demandojn ĝis nun?
OK.
>> Do kiel ni diris, la TTT-servilo ricevas tiu HTTP-peto kaj tiam elsendas ĉi
HTTP-respondo.
Kaj kiel ni parolis pri antaŭe, la CS50 aparato ttt-servilo estas Apache.
Do kiam vi uloj laboras sur P starigis sep, vi iras labori kun la
Apache ttt-servilo.
Vi neniam devas vere labori kun Apache rekte tro multe.
Vi ian agordi Apache iom kiam vi specifas la virtuala gastigantoj aŭ
la v Cebaot, kaj ni akiros por ke en iom.
>> Sed esence, la Apache ttt-servilo decidis labori kun PHP speco
de ekstere de la skatolo.
Do kio vere okazas estas, kiam vi iros al unu el viaj retejoj kiel, ekzemple,
loka gastiganta oblikvo index.php aŭ ion, Estas via retumilo ordonas ke
peto, kaj tiam Apache sidas tie kaj ciferoj, por fari per ĝi.
Tiam la ago estas ekzekuti ke kodo index.php kaj
tiam sendu ĝin reen.
Do tie estas tio.
Do ni ia parolis pri tio.
Do ĝi povus simple servas statika dosieron aŭ kuri iom PHP-kodo kaj do afero
la respondo.
>> Tial do komuna demando kiu povas veni ĝis estas bone, kial ni vere trakti
kun havanta plurajn uzantojn en la sama tempo?
Do imagu, se vi skribas retejo servilo, se vi havis ttt-servilo ke
vi provis skribi en io kiel C aŭ io kiel tio,
esence vi povas pensi pri kiel tie povus esti ia kodo, ke
ricevus la peton, sed tiam ĝi devas vidi la tutan tiun verkon sur ĝi.
Ĝi povas havi al, ekzemple, kontakti la datumbazo aŭ io kiel tio.
Ĝuste?
Kaj tiam ĝi farus tian de prilaborado kaj poste
resendis la respondo.
Do jen kiel la altan nivelo superrigardon.
>> Sed ĝi ne estas tuj evidente kiel vi povas tion fari tiel, ke du personoj aŭ
eĉ 1.000 homoj povis labori per viaj ttt-servilo samtempe.
Do la solvo kiun Apache uzas nomas fadenoj aŭ procezoj.
Do eble vi aŭdis de tiujn terminojn antaŭe.
Estas bone se vi ne havas, sed simple opinias pri fadenoj aŭ procezoj kiel manieroj por
mastruma sistemo aŭ uzanton programo aŭ io simila aŭ ttt-servilo
por speco de ekzekuti multnombraj aferojn samtempe.
Do vi eble auxdis la terminon kiel fadenoj de ekzekuto.
Do ĝi estas speco de kiel vi estas speco de multitasking.
>> Kaj se vi vidis sur la skatolo de via portebla komputilo, aŭ ion similan,
multicore, kion vi povas fari estas vi povas kuri du malsamaj fadenoj pri diversaj
partoj de la CPU tiel ke ili povas reale okazi samtempe.
Do tiu estas vere potenca.
Kaj ĉi tiu estas speco de Apache estas solvon al tiu problemo.
>> Do, tie ili estas speco de kiel ajn temoj kun tiu alproksimiĝo kvankam?
Do mi supozas ke mi specon de skribis ilin tie.
Sed ambaux ian uzi multan memoron.
Ĝi estas tre multekosta por krei fadenon aŭ procezo.
>> Kaj parto de la rezonado estas ke nur kiel kiam vi uzas C-programo
kiel via ĉefa kaj do ke alvokojn alian funkcion, kiu havas
ia pilo.
Do fadenoj ankaŭ postulas tute apartan stako kiu
povas esti sufiĉe granda.
Kaj se vi povas imagi havanta tunoj de uzantoj en via retejo, vi havus
multe da malsamaj fadenoj.
Tio estas multe da piloj al administri kaj subteni.
Do estas granda konsumo de memoro.
>> Kaj tiam, ankaŭ, diru vi havas nur CPU, aŭ ni diru vi havas
pli fadenoj ol vi havos tiuj multicores.
Ĝuste?
Do diru al vi havis 10 fadenoj kaj vi nur havis kvin CPU.
Vi speco de devos fari tion kie vi sxangxi inter la nuna
kiu kuras, ĉar vi ne povas kuri ĉiuj 10 senprokraste.
Kaj tiu nomiĝas kuntekston ŝaltilon.
Kaj tiu termino vere havas kelkajn diversaj kuntekstoj, sed ni nur
pensi pri tio kiel switching inter du fadenoj.
Tio povas esti bela multekosta ĉar esence tion, kion vi devas fari, estas vi
devas ĉesi kion vi faras, krom la stato de tiu kuranta fadeno, kaj
tiam ŝanĝi al iu alia loko.
>> Do ne ĉiu speco de vidi la motivado de kial fadenoj kaj
procezoj povus esti iom dikigitaj?
Kaj ĉu vi havas demandon?
OK.
Cool.
Iu ajn havas demandojn?
OK.
>> Do, se ni prenas retropaŝon por la dua, tie estas iom kiel
observo, ke ni povas fari pri multajn ttt aplikoj.
Kaj tio estas vere ke multe el ili efektive ne faras tion multe utila
labori ene de fadeno.
Do estas iu komencis la P starigis sep cxe cxiuj?
Do ĉu vi volas eble priskribi kelkaj el la partoj?
Ĉu vi prilaboris ensaluto aŭ io simila?
>> Spektantaro: N-ro
>> Kevin Schmid: okej.
Neniam menso.
Pardonon.
Sed esence, en la P aro, vi estas tuj konvinkos multajn ian
pridemandojn al datumbazo por akiri iun informoj de tiu datumbazo.
Kaj kion via kodo tuj estos faranta, kion tio Apache procezo aŭ
ke Apache fadeno tuj estos faranta dum ĝi devas kontakti la
datumbazo estas ĝi estas speco de tuj estos tie sidis kaj ĝi tuj estos
atendante la datumbazo por respondi.
>> Nun, ke eble ne sonas simila al tiu granda estu trakti ĉar la datumbazo estas en via
CS50 aparaton, ĉu ne?
Sed estas iu speco de reto latenta tie ĉar nun la TTT
servilo devas elsendi lian propran peton al la datumbazo por komuniki kun la
datumbazo kaj poste atingi tiun informoj dorso.
Do nun estas kiel bone atendu min, mi estas tuj iros akiri ion el la
datumbazo kaj tiam tie estas multe da atendado pasis.
Ĉu tio havas sencon?
>> Kaj por kelkaj aferoj ne estas tio malbona.
Se ĝi nur havas al, ekzemple, aliro memoro, kiu ne estas kvazaý
horora / Aŭ latenta.
Kaj kiam mi diras, I / O latenta, kia mi estas raportante al Estas kiel iu ajn speco de kiel
input output.
Sed por aliri dosieron sur la disko, kiel se mi volis servi la statika HTML
dosiero kiu estis sur mia retpaĝo aŭ io simila, mi specon de devos
halti por iom, legi, ke la dosiero en de la disko, kaj poste en
ke procezo mi atendas.
Mi ne faras utilan laboron.
>> Ĉi tio ne estas vera de ĉio, sed estas komuna en aplikoj kiel P aro
sep kaj multajn aplikojn ke vi ne
efektive faras multe pensante.
Kaj kiam mi diras pensado, mi volas diri kiel komputila laboro.
Do komputa laboro povus esti io kiel, ekzemple, vi volis
skribi ret-servilo kiu egala komputita la n-a fibonaĉi-nombro.
Tio ne sonas kiel aparte amuza ttt-servilo.
Kiel mi ne atendas ke ejo estos la sekva Facebook, sed tio estas iom
speco de komputa laboro.
>> Kaj vi povas imagi anstataŭante ke kun alia speco de interesaj
komputa laboro.
Imagu ke vi skribis ion kiuj kalkulis la gradoj de
disiĝo inter du personoj aŭ io kiel tio.
Do kiu faras engaĝi ian de kalkulo, ĉu ne?
Kaj eĉ tiam, por fari ke vi ankoraŭ havas fari multajn atendante eble
vi havas demandojn datumbazon rigardi supren kiuj estas amikoj kun kiu aŭ
io kiel tio.
Do tie estas tia nocio de komputa laboro.
Ĉu tio havas sencon?
Ĉu iu havas demandojn?
>> Ho, kaj mi supozas ke mi metis babilejon serviloj tie ĉar babilejon serviloj estas speco de
alia bona ekzemplo de tio.
A babilejon servilo ne devas fari multe pensante.
Ĝi nur devas atendi por homoj sendu mesaĝojn kaj tiam kiam
ili, sendu ilin.
OK?
>> Do apenaŭ al Recap denove, Apache kaj simila retserviloj ŝatas ke forko a
multaj fadenoj kaj procezoj kiuj povas esti speco de malŝparema.
Do mi supozas ke la demando kiu povus veni el kiuj estas ĉu ni bezonas havi
multnombraj fadenoj kaj procezoj?
Kio, se ni nur havis unu?
>> Do ni ia pentri bildon de kio estas tiu devus aspekti.
Do ni uzu nur unu fadenon.
OK?
Do imagu tion kun unu fadeno.
>> Ni supozu ni ne vere faras ke tre utila - kaj kiam mi diras
utila, mi volas diri komputa laboro -
en tiuj multnombraj fadenoj antaŭe.
Do ni ia solidigi ĉio en unu fadeno.
Do kio se ni havis unu fadeno kiu speco de ĵus ĉirkaŭiras en la buklo kaj
senĉese ĉekojn faris ion nova okazos.
Do ekzemple, iu nova okazis povus signifi Mi akiris ion el
la datumbazo, aŭ iu sendis mi novan HTTP request.
Do tiuj estas speco de eventoj kiuj okazas, ĉu ne?
>> Kaj tiam tion, kion mi povas fari, kiam tiuj novaj aĵoj okazas estas en ĉi tiu sama fadeno
de ekzekuto, tio sola fadeno ekzekuto, mi povas nomi iun kodon kiu
devus manipuli tiu aparta afero.
Do ekzemple, se mi havas ion reen el la datumbazo, mi povus kuri mia
malgranda komputa parto de ĝi ke fakte ĝuste pretiĝas la afero
redonu al la uzanto.
Do faras tian sencon?
>> Sed kio vere estas la implicojn de tiu?
Ĝuste?
Ĉar ni skribas multon de kodo ke -
kaj mi simple tuj salti antaŭen en la diapozitivoj, se tio estas en ordo.
Do se vi ne gravas, mi estas nur tuj prenos retropaŝon.
Do ĉi tiu speco de afero estas nomita evento buklo.
OK?
Kaj ĝi estas speco de la bazaj ideo malantaŭ Node.js.
>> Do kio Node.js estas vere faras kiel ttt servilo estas tie estas sola fadeno
ke estas esence irante ĉirkaŭ en buklo kiel dum unu speco de sub
la kapuĉon de Node.js tio konstante checking, ni ricevos novajn aferojn?
Kaj tiam ĝi kuros kodogrupo except ke vi starigis.
Sed bona demando demandi estas, kiel ni povas fari ĉi okazi
kun ekzistantaj aĵoj?
>> Do mi metis linion de C kodo tie esence aspektas kiel ĝi estos malferm
fajliloj, ĉu ne?
Mi Ŝi apenaŭ eliris kun albumo.
Do mi devis malfermi sian novan dosieron.
Do la vojon nian C-kodo por operacii -
kaj mi supozas ke la kialo mi elektis dosierojn estis ĉar ĉi tio estas speco de la mezuro
de la I / O laboro kiun ni faris en C en sento ke ekzistas input output.
Do ni nomas ĉi-kodon faras ĉi f malfermita.
Kaj poste la sekvantan linion de nia programo, ni povas nun laboras kun f.
>> Do tio estus ekzemplo de io ke estas kvazaŭ síncronas aŭ
blokanta ĉar sur tiu unua linio tie ni atendas gxis ni
akiri la dosiero malfermita.
Tial en la dua linio, ni scias, ke ni povas labori kun f, sed tio signifas, ke
ke dua linio ne povas vere kuras ĝis la unua linio estas farita.
Ĉu tio havas sencon?
>> Do tio estus malbona por meti en okazaĵo traktilo.
Kaj la kialo estas, ke tiu speco de atendu, ĉu ne?
Do tiu revenus ni reen al la sama afero.
Kaj nun ni ne eĉ havas la profito de multnombraj fadenoj aŭ
procezoj, ĉar ni ricevis unu fadeno en Node.js.
Ĉu tio havas sencon por ĉiuj?
>> Spektantaro: Atendu.
Do kio estas la anstataŭigo?
>> Kevin Schmid: Oh, tiom jes.
Do mi tuj alvenos al la anstataŭigo.
OK.
Do kio se ni havis ion kiu aspektis kiel tiu?
Do kion se nun mi redaktis f malfermi iom?
Do mi pasante en la sama du argumentoj, kiel antaŭe.
Mi ankoraŭ amas la nova kanto ke ŝi eliris kun.
Sed mi pasante la trian aferon, kiun Estas ĉi variablon nomitan kodo.
>> Sed kia estas kodo reale en tiu kunteksto?
Ĉu ĝi kiel regula C variablo?
Ĝi estas funkcio, ĉu ne?
Kaj tio povas esti iomete stranga ĉar Mi vere ŝatas nun pasi
funkcii en alian funkcion.
>> Do kelkaj aferoj noti pri ĉi tio.
Unu, mi ne vere vokante La kodo de funkcio.
Do vi ne vidas kodo kun la forlasis paren, dekstra paren.
Mi simple pasante en kodo.
Kaj en C, kio tio efektive fari estas doni al mi montrilo por ke efektiva
kodo, kaj tiam tiu povus ruli ĝin.
Sed pensu pri tio, kiel vi estas Ol la kodon por funkcii kiam
ke dosiero estas malfermita.
>> Sed kion tio signifas, ke nun la resto de mia programo, kiu povus fari
aliajn aĵojn, povas daŭre fari aliajn stuff dum ni, ne vere atendas, sed
simple devas en la malantaŭo de nia kapoj kiuj kiam tiu dosiero malfermita, run, ke
kodo ĉe la supro.
Ĉu tio havas sencon?
>> Kaj nun la ideo malantaŭ Node.js estas ke La kodo en la Do stuff kun f
parto estu sufiĉe mallonga kaj simpla kaj rekta kaj ne estos vere
tre kompute intensiva.
Ĝi povas havi por malfermi alian dosieron, sed kiuj devus ankaŭ esti bela rapida
ĉar tio devas simple diri faru alian f malfermi kaj tiam nomas tiun alian kodon.
>> Do simple por esti tute klara, la f malfermu, kiu faras la novan Katy Perry kanto
done mp3, ke tuj bela multe revenu tuj.
Kaj tiam ni povas nur daŭre fari aliaj aferoj pro ĉio, kion nun f
malfermita alvoko ne estas diri baze la suba f malferma kodo malfermi ĉi dosieron
kaj kiam vi finos malfermante ĉi dosiero aŭ kiam vi enretigos ĝin reen,
tiam kuras tiu kodo.
Sed ĝi ne vere kuras tiu kodo.
Kaj vi havus demandon?
>> Spektantaro: Vi ŝajnis implici kelkajn fojoj ke aldonante kompute
intensivaj kodo ia rompi la [Inaudibles] pelita sistemo.
[Inaudibles]?
>> Kevin Schmid: Tio estas bonega demando.
Do mi efektive havas ekzemplon de kiel vi povus integri kompute
intensivaj kodo en iomete.
Do kiam ni atingos la kodo ekzemplojn, Mi estos certa tiri tiu.
Ĉu tio estas OK?
Dankon.
>> Kio estis via nomo?
>> Spektantaro: Aaron.
>> Kevin Schmid: Aaron alportas supren tre bona punkto, kiu estas, ke se mi havis
iuj kompute intensivaj kodo La fari aferojn kun f parton, la ceteraj
mia programo ne povas funkcii kaj ne povas aŭskulti por novaj petoj aux ion ĝis kiam ĉiuj
Okaze estas finita.
Do se mi skribas Nodo kodo ĝenerale se ni ne faru ion kiel Mi iras
sugesti poste kiam ni rigardas la kodo ekzemploj, mi devas esti certa, ke
mia kodo ne ligi tiu evento buklo.
Ĉu tio havas sencon?
OK.
Cool.
>> Do Node.js proponas ĉi kadro, ke vi povas konstrui tiujn evento gvidita
servilojn kun.
Do ĝi havas tiuj tipo de asincrónico ne-blokado / el bibliotekoj, dum
la normo C bibliotekojn kiujn ni vizitis laborante kun, kiel se vi nur
uzi ilin en la sama vojo, kiun ni estis uzante ilin kun f malfermas kaj
stuff, tiuj blokas ĉar vi fakte devas atendi
ke dosieron por malfermi.
>> Sed Node.js donas al vi, ke kaj esence ligas al Google-V8
Javascript motoro kiu estas la kialo ke Chrome estas tiel rapida ĉe prilaborado
Javascript ĉar ĝi havas ĉi V8 motoro.
Do mi scias, ke sonas kiel unu el tiuj, WWDC developer konferencoj afero
kie oni simple jxeti faskon de la letero nombro aferojn por procesoroj
kaj tion diras estas tiel malvarmeta.
Sed ĝi estas malvarmeta, ke ili faris ĉar JavaScript -
aŭ eble se vi ne estas familiara kun JavaScript ankoraŭ ĉar ni ne havis
la prelegoj pri ĝi -
sed JavaScript estas interpretita lingvo.
>> Kaj tio estas grava punkto tro.
Do estas grava por nia retejo serviloj por esti rapida, ĉu ne?
Kaj se ni nur kurante JavaScript kodo kiu interpretis kun nur
iu malnova interpretisto povus esti malrapida.
Do Nodo profitoj de havanta ĉi super fast V8 interpretisto.
Kaj mi ne scias se ili nomis ĝin ĉar la V8 vangofrapo en la frunto
aĵo, sed en ordo.
>> Do mi preparis kelkajn ekzemplojn en ĉi tiu retadreso.
Post la seminario, mi ian tuj paroli pri tio, kiel vi povas akiri Nodo aro
supren, sed nuntempe, mi nur ia volas marŝi tra iu kodo ekzemploj.
Do se vi volas sekvi kune, ĉiuj fontkodo estas havebla tie.
OK?
>> Do mi devos forlasi ĉi retadreso ĉe iom.
Kaj tiam mi simple tuj ŝalti en la terminalo.
Ĉu ĉiuj bone kun ĉi retadreso?
Do mi tuj ŝanĝas super al mia fina tie.
>> Do jen la kodo kiun Mi havas hodiaŭ.
Kial ne ni komencos kun simpler.js dosieron?
La alia afero estas ke ĉio ĉi kodo tuj estos skribita en
Javascript kiun vi povas nek povas ne esti familiara kun.
Mi supozas paron aferoj estas, ke multo de JavaScript kodo estas la speco de
sintakso kaj strukturo estas tre simila al C, do vi povas speco de repreni ĝin kiel
vi iru kune.
Mi provis skribi multon de la komencante kodon por tiu en maniero kiu estas
simila al C tia ke ĝi estas iom pli legebla.
Sed kiel ni progresos, mi estos pruvante kelkaj el la aldona
trajtojn de JavaScript ke estas speco de malvarmeta.
>> Sed ni rigardu tiun specimenon programo.
Mi supozas ke ĉiu'S detrancxis tie.
Mi simple tuj ripari ke reala rapida, se tio estas OK aŭ ne.
Mi ne scias kio estas tiu tuj faros.
Ĉu tio estas iom pli bona?
Ĉu vi povas vidi la var kaj aĵoj?
OK.
>> Do la unua linio estas kiel la Javascript versio de variablo
deklaro.
Do nur por reliefigi kia farus aspektas kiel en C. Do tiu estas nur kvazaŭ
mi jene indekso egalas tri aŭ io kiel tio.
Do mi ne specifi la tipon.
Javascript ja havas tipojn, sed estas tre dinamike tajpitaj en naturo, do
ne havigis ia ajn tipo sur ĝi.
Do ĝi nur havas var.
Tio estas kiel ŝanĝiĝema.
OK?
>> Kaj mi nomante tiun variablon HTTP.
Kaj sur mia dekstra flanko, mi havas la esprimon, kiun mi volas meti en HTTP.
Kaj tion diras postulas HTTP.
Do tiu estas speco de simila inkludi.
Ĝi estas iom pli kiel potenca ol inkluzivi en la senco ke inkluzivi
estus simple kopii kaj almeti la kaplinio dosiero por la funkcio prototipoj aŭ
kio ajn kun la tipo difinoj.
Sed postuli estas reale irante akiri al ni la kodon.
>> Do vi povas pensi pri tio kiel importante iu kodo.
Do ie en la Node.js modulo sistemon aŭ kio ajn, ili ĉiuj havas ĉi
HTTP-servilo kodo do mi simple ricevado ĝin por miaj propraj
persona uzo en tiu programo.
OK?
>> Tial do mi havas ĉi funkcio ke mi skribis.
Kaj rimarkos mi ne devos specifi la reveno tipo aŭ la tipon de la
argumentoj denove.
Do ia loose tajpitaj en tian senton.
Du argumentoj kiuj portas en, peto kaj respondo.
Do tio estas koncepte ia kiel familiara de la bildo kiun ni havis
sur la ekrano antaŭe pro ni atingos ĉi tiun peton, ke ni
havas de la uzanto.
Kaj tiam ni havi respondon, ke Ni povas skribi aferojn.
>> Do la unua linio de tiu faras res.writeHead 200 kaj tiam ĉi
enhavspeco teksto ebenaĵo.
Do ni Peco ĉi krom iom.
Do ni ĝuste enfokusigi res.write por iom.
Do registran estas esence, kaj skribi la kapon, estas nur manierojn ia skribas el
aĵojn al la respondo.
OK?
Do skribi la kapon, se iu memoras de la HTTP-konferenco, do you guys
memori titolaj ĉe la supro de la HTTP-afero?
Do kial mi ne nur demo titolaj reala rapida.
Ĉu tio povus helpi?
Aŭ ĉu ni nur speco de -
OK.
Certe.
>> Do, kiam via retumilo iras al google.com aŭ io kiel tio,
tie fakte iom pli -
ĉi tio estas kiel sekretan -
ekzistas kiel iom pli da informoj kiu venas tra la pipon ol nur
la eta serĉo, kaj ĉio.
Do por montri al vi ĉi tion, mi tuj uzi programon nomitan Curl.
OK?
Do tiu estas io kion vi povas kuri je Mac OSX komandlinio aŭ en la
aparato aŭ kio ajn.
Kaj tial, se mi ne frizas HTTP google.com, Mi iras vidi la HTML.
Kaj ĉi tio estas, juste, nur la HTML kiu ia diras al vi
redirekti al www se via retumilo ne aŭtomate tenantaj
alidirekton.
>> Do tiu estas simple la HTML, sed mi aldoni frizo tiu streketo mi flagon.
OK?
Kaj tion tuj montros mi la titolaj.
Do tiu estas ankaŭ informo kiu venas tra kiam mi ricevas tiun respondon.
OK?
>> Do, je la supro, vi vidas tiun HTTP 301 movi konstante.
Kaj jen estas ia grava ĉar tiu rilatas al la statuso kodo.
Do la 301 ĉi tie estas la statuso kodo, kio estas esence nur entjero
kiu rakontas la foliumilo aŭ kiu ajn estas legi ĉi tion, se vi pretendos ke
vi estas legilo kaj vi nun vidas tion, esence nun se vi rigardas
ke kaj vi vidas 301, vi scias ke mi havas fari ion specialan bazita sur
301, aŭ io speciala okazis bazita sur la 301.
Do ĝi diras kopiis konstante.
>> Kaj tiam, esence, ni havi faskon da ŝlosilaj valoro paroj.
Do ni ricevas la situo Estas www.google.com.
Kaj tiam speco de ĉiuj ĉi aliajn necesajxojn, sed esence, kion la situo estas
proverbo estas la nova situo Estas ĉe www.google.com.
Do nun, se vi iros al google.com, vi ia vidi la retumilo speco de blink
por dua kaj tiam ridirektanta vin dekstra reen al www.google.com.
Do la respondoj povas enhavi tiuj titolaj.
>> Kaj kelkaj aliaj aferoj atentigi.
Do diru ni estis vere sukcesa en viziti retpaĝon.
Do lasu min iri al -
kio estas bona retejo?
Mi malbonas en pensado de bona retejoj surloke.
>> Spektantaro: Vikipedio.
>> Kevin Schmid: okej.
Ni faru Vikipedio.
Do ĉi tie mi estis movita.
Ho atendu.
Mi estis?
Jes, mi estis.
OK.
Do mi devas fari www.
Do mi faros www.
Kaj kiel vi povas vidi, jen ĉiuj la HTML ke la foliumilo devus procesi
por Vikipedio.
>> Sed se mi gardas rulumado supren tien, kion Mi vidos supre -
wow, tie estas multa HTML en Vikipedio -
sed kion mi povas vidi ĉe la supro tie estas ĉi 200 statuso kodo kiel kontraŭa al la
301, kiun mi vidis antaŭe.
Kaj rimarki ke ĝi havas belan amika OK apud ĝi.
Do tiu estas kiel la bona statuso kodo.
>> Ĉu tio 200 numeron aspektas familiara?
Jes, ĉar kiam mi faris simpler.js, Mi verkis 200 tie.
Do tio estas esence dirante diri la retumilo aŭ kiu ajn provas atingi
tio, ke ili sukcesis.
Aŭ tian kiel ni estis sukcesa tro.
>> Kaj tie estas tio ia speciala sintakso en JavaScript por deklari
Mapo de ĉi tiuj klavoj kiel enhavspeco kaj tiujn valorojn kiel teksto klare.
Do, se vi rigardas la respondo, ke ni reunuiĝis el Vikipedia antaŭe, -
Mi tuj provos rulumu ĝis iom pli rapide -
vi havas ĉi tiujn klavojn kiel servilo kaj tiujn valorojn Apache.
Do vi havas klavojn kaj valorojn.
Kaj vi povas indiki tiun en Node kion sendi al dorso.
>> Do tiu estas fakte speco de, en iuj manieroj, kaj en iuj formoj ne estas
vere, sed estas iom malalta nivelo ol la PHP-kodon kiu vi povus esti
skribi por P starigis sep ĉar PHP kaj Apache ia prizorgi iun
pri tiuj aferoj por vi.
En PHP, vi povas nuligi la defaŭltan konduto skribante vian propran titolaj.
Sed por la celoj de cxi tiu, ni preni skribi niajn proprajn kapojn de dokumentoj.
>> Do ne tiu linio havas sencon ĉiuj, la registran kapo-lineo?
OK.
Awesome.
>> Tial do, kion mi faras estas mi finos la respondo dirante saluton mondo.
OK.
Sed tio estas nur funkcio vokis peto traktilo.
Do nun mi vere devas speco de fari ion kun tiu funkcio, ĉu ne?
>> Do jen, kion mi faras estas tie estas tiu linio, kiun faras var servilo egaluloj
HTTP.create servilon, kaj poste mi Iam en la peto traktilo.
Do tiu estas speco de la Nodo maniero de krei servilon.
Kaj rimarki ke mi pasante en la peto traktilo.
Do tiu estas diranta la createServer funkcio, kiun mi volas ke vi faru al mi
servilo, kaj kiam tiu servilo ricevas respondon, mi bezonas vin nomi ĉi
peti traktilo funkcio.
OK?
>> Do tiu lineo pretty much finas tuj.
Do la var-servilo linio estas farita dekstra Post kiam vi faros, ke bela multe.
Mi volas diri, ke ĝi havas starigi kelkajn internajn ŝtata scii, ke vi devus
nomas tiun peton traktilo funkcion, sed ĝi ne estas tuj sidi tie kaj
diru havas la uzanto sendis mi petis ankoraŭ?
Ĉu la uzanto sendis al mi peton ankoraŭ?
Do tio ne blokas.
OK?
>> Do kio estas tiu faros estas ĝi esence nun stokas montrilon al tiu kodo,
tiun peton traktilo funkcio, kaj poste rulos tiun kodo kiam iu
faras peton.
Kaj tiam ni faros server.listen.
>> La 1337 tie estas sufiĉe arbitra.
Mi havis nenian apartan motivon por pluki tiu numero.
Ĝi estis tute hazarda.
Sed tio nur precizigas la haveno.
Do plej retserviloj vi vidos, ke ili uzi haveno 80 ĉar tio estas afabla
de kiel la konvencio.
Do, se mi iras al iu kiel, Mi ne scias, Wikipedia.org,
kaj Mi metis dupunkto 8 -
Oh wow, vi ne povas vidi tion.
Mi bedaŭras.
Sed se mi faras Vikipedio -
Mi skribos ĝin ĉi tie nur por ke ĝi estas klara en la ĉambro.
Sed se mi prenas ĉi enen retumilo kun dupunkto 80, kiu specifas iri
Wikipedia.org ĉe haveno 80.
Do ĝi estas kvazaŭ kiel Usono havas multnombraj havenoj kiel, kie vi povas sxipo
tion al ia.
Do gxi estas kiel iri al tiu aparta meti sur tiu ĉi servilo.
OK.
>> Do mi simple elektis 1337.
Tie estas tuta gamo de nombroj ke vi povas elekti.
Tio ne estis plene speciala.
>> Sed kion mi faros nun Estas Mi tuj kuros Nodo.
Lasu min reale eniri ke paro liniojn malsupren por ke vi povu vidi ĝin.
Mi tuj faros Nodo, kaj mi estas tuj kuru simpler.js.
Kaj ni parolos pri kiel akiri Nodo starigis en iomete.
Sed nun ĝi estas ĵus kuras la servilo.
>> Do unu afero ni povos provi kion may ne esti tiu ekscita estas ni povas reale
provu aliri lin en Curl.
Do mi povas fari Curl, kaj mia Maŝino estas loka gastiganto.
Vi ankaux vidos ĉi skribitaj kiel ĉi foje.
Loka gastiganto kaj 127.0.0.1 estas afabla de kiel via persona komputilo.
Do ĝi estas kiel paroli al via propra komputilo.
OK.
>> Kaj tiam mi povas diri 1337.
Do se mi kuros ĉi linio de kodo, diras saluton mondo.
Kaj se mi volis vidi, ke aĵoj kiuj havis enhavspeco teksto ebenaĵo aŭ
kion ajn, mi povus eĉ meti ĉi tien.
Kaj rimarki ke ĝi dirus okej.
Kaj mi ja havas tekston ebenaĵon.
Kaj tiam tie estas speco de tiu tuta aliaj stuff ke Nodo aldonos en
tie por mi.
Tio ne estas super grava.
>> Mi volas diri, ekzistas ia teknika aspektoj de ĉe kiuj estas afabla
de cool paroli, sed nur por montri vi, mi ankaŭ havas la povon por
ŝanĝi tiujn ĉirkaŭe.
Do mi povas simple aldoni faskon da ŝtofo simila al tiu.
Kaj tiam nun, se mi aspektas en mia eligo, estos tiel.
Do tiuj titolaj signifas certaj aferoj por retumiloj kaj aferojn tiel.
>> Kaj titolaj povas esence rakonti retumilo kiel respondi al io.
Se vi iam aŭdis pri kuketojn antaŭ, aŭ, se vi iam estis tedita
per retpaĝo opcio kuketojn, aŭ ŝaltis kuketon bloko aŭ
io kiel tio.
Vi povas fakte starigis kuketojn en tiuj titolaj.
Do ili rakontu retumilo kiel konduto en iuj kazoj.
OK.
>> Por ke estis simpler.js.
Ĉu iu havas demandojn sur tiu fontkodon dosiero?
OK.
Cool.
>> Do ni forigu la r de tiu kaj rigardi simple.js.
Do tiu estas preskaux la sama programo.
Mi nur skribis ĝin iom alimaniere ĉar mi volis ordigi de kolorigo
iujn trajtojn de JavaScript.
>> Do rimarkos, ke la peto traktilo funkcio tute malaperis.
Ho Yep, ĉu vi havas demandon?
>> Spektantaro: Jes, la argumentoj kiuj preterpasis tiun
funkcio, kio ili estas?
>> Kevin Schmid: Do tiuj estas Javascript celoj.
En la Node.js dokumentado, ĝi esence diras kion metodoj estas
disponebla sur ili.
Ni nur hazarde havas la aliron al ĉi metodo nomata registran kapon kaj fino
kaj da tio.
Sed estas tuta aro da pli metodoj.
>> Kaj ekzemple, kiel unu el ili precipe sur rec, vi povas fari
iu kiel rec.method kiuj volas diru al vi, ĉu ĝi estas http akiri aŭ
HTTP post petojn kaj aferojn tiel.
Do tie estas ĉiaj malsamajn posedaĵoj, sed ili estas ambaŭ
Javascript objektoj, kaj ili havas nur funkcioj alfiksis al ili, ke vi
povas skribi aferojn.
OK?
>> Do rimarkos ke peto traktilo estas plene malaperis.
Sed la kodo kiun mi havis en peto traktilo estas ankoraŭ tie.
Mi ankoraŭ havas ĉi res.writeHead kaj mi ankoraŭ havas ĉi res.end.
Kaj kion tio estas ekzemplo de en Javascript estas jena ideo de
anonima funkcio.
kaj anoniman estas kiel decan nomon por ĝi, ĉar ĝi laŭvorte ne
havi nomon.
Mankas funkcio peto traktilo en tie.
>> Ne havas nomon, sed ĝi ankoraŭ Estas prenante argumento.
Do mi ankoraŭ havas rec kaj rezolucio.
Kaj mi ankoraŭ havas la kodon.
Ĉi tiu estas perfekte bone Javascript-kodo.
Do mi povas deklari funkcio sen eksplicite doni al li nomon.
Ĝi estas iom konfuza en komenco.
Tie estas kelkaj kiel utila aferoj ke vi povas fari kun
tiuj anonima funkcioj.
Ĉu iu havas demandojn pri tio, aŭ ĉu OK simple, por nun,
speco de simple akcepti ke ĝi faros la samon?
Yep?
>> Spektantaro: Chu funkcioj unua klaso en JavaScript?
>> Kevin Schmid: Ili estas unue klaso en JavaScript.
Kaj ĝuste scias ke ĉi tiuj konceptoj pri pasante en anoniman funkcion kiel
tiu aplikas al la Javascript ke vi povas skribi en via fina projekto por
la retumilo tro.
Do ekzemple, en la Javascript en via retumilo, ĝi estas ankaŭ iom okazaĵo
dispelitaj en la senco ke kion vi havi estas kiam la uzanto alklakas ĉi
butono, mi volas ke vi kuras kun tiu kodo.
>> Do ĝi estas la sama speco de ideoj de la kliento flanko kiam musklako aŭ ili
muson super iun bildon sur via TTT-paĝo, kuri kun tiu kodo.
Kiu povas turni sin al serviloj.
Do tio estas speco de kiel la ekscita tial JavaScript estas vere
taŭga aŭ kelkaj homoj kredas ke estas taŭga lingvo por tiu speco de
okazaĵo ŝoforo servilon ĉar vi havas tiuj anonima funkcioj.
Vi havas la tuta ideo de ĉi asincrónico kodo.
OK.
Iu ajn havas demandojn?
>> OK.
Por ke estis simple.js.
Do ni rigardu pli aŭ paro pli.
Do tiu estas sleep.js.
Do estas iu familiara kun la C funkcio dormo?
From eble unu el la fruaj prelegoj aŭ io simila?
>> Do esence vi povas pasi en mi pensas numeron de duaj aŭ se vi uzas U
dormi kelkaj milisekundoj aŭ nanosegundos.
Kaj esence la programo estos simple ĉesi kurante por tiu kvanto de tempo.
Ĝuste?
Kaj tiam ĝi vekos eventuale kaj tiam povos nur daŭrigi kurante
la programo.
>> Do tiu servilo ian donas la impreson de dormante.
Do rimarki, ke ni havas la saman res.writeHead 200 kun la kaplinion kiel
antaŭe, sed tiam ni nomas ĉi funkcio nomita aro-tempolimo.
Ŝanĝu timeout estas ankaŭ havebla en Via retumilo Google Chrome
aŭ Safari aŭ kio ajn.
Kaj esence kio ĝi estas faranta tie Estas ĝi estas prenante en funkcio.
Avizo, denove, ĝi estas anonima funkcio.
Do tio estas speco de cool ĉar ni estas uzante anonima funkcion ene de
anonima funkcio kiu povas esti iom stranga.
>> Sed gxi prenas tiun funkcion, kio estas esence diri - kaj la maniero ĉi
verkoj estas en 5,000 milisekundoj, mi deziras vi ekzekuti tiu funkcio kiu
nur finas la respondo kaj skribas hey.
Do tio donas la impreson de kiel dormante, sed la maniero ĉi reale
verkoj estas ni kuros tra tiun linion tre rapide.
Ni nur skribi ion.
Kaj tiam ni ankaŭ kuras tra tiun linion tre rapide.
Do ni ne reale irante atendi kvin sekundoj.
Ni nur tuj kuri tiun kodon tuj.
>> Kaj tiam tie estas, denove, ĉi iom okazaĵo buklo kiu nun havas tiun aferon
registroj kiu esence estas nur senĉese iras cirkle
kaj rigardante la horloĝon en sola fadeno kaj parolo havas kvin sekundoj
pasis ankoraŭ?
Kaj poste, kiam li vidas ke la dua mano moviĝis kiel kvin sekundoj aŭ
kion ajn, tiam ĝi vekas kaj diras, ho, kion mi devas fari?
Ho mi devas kuri tiun kodon.
Kaj tiam ĝi tuj kuri res.end hey.
>> Do denove, ni neniam atendis tie ĉi.
Do ĝi ne estas ke tiu kodo interne de tiun funkcion tuj prenos kvin
sekundoj por kuri.
Tiu kodo kuros pretty much fulmobatita, almenaŭ rilate al
la kvin sekundoj, ke ni parolis pri pli fruaj antaŭe.
>> Do simple por montri tion en agado, Mi povas fari Node.sleep.js.
Kaj faris mi salaton ion?
Eble.
Pardonon.
Ni vidu, kion ni povas fari por korekti tion.
OK.
Do certe uzos Node.js.
Mi ŝercas.
OK.
Apenaŭ unu sek.
OK.
Mi scias kion ĝi estas.
>> Do la demando estas ke en mia alia langeto ĉi tie, mi kuris Nodo jam sur
tiu sama adreso, 1337.
Do la eraro, ke tiu jxetis, se ni rigardas ĉe ĝi realan proksime, estas adreso en
uzi, EADDRINUSE.
Do mi estis jam uzanta 1337 ĉi tie.
Do se mi fermu ĉi malproksime, kaj tiam mi nun provu kuri ĉi, atendu, ĉio
estos bone.
OK.
Do vi povas havi nur unu aferon speco aŭskulti havenon samtempe.
Alia solvo estus por mi justaj redakti ke programo kaj fari
gxi estu kiel 1338 aŭ io kiel tio.
>> Sed nun dormo estas kuranta.
Do ni vere ĝin provi en la retumilo tiu tempo ĉar ĝi estas
iom unexciting vidi gxi en terminalo.
Do mi simple tuj iros al tiu 127 adreso denove en 1337.
Kaj se vi povos vidi ĝin -
Mi ne scias se vi povas - sed mia foliumilo prenante tre, tre longa
tempo ŝargi aŭ kiel kvin sekundoj.
>> Kaj tuj poste, fine finis la respondon.
Kaj vi ne povas vidi ĝin ĉar la afero estas movita trans iom, sed se mi faras
tio iom pli malgranda, vi povas vidi ĝin diras hey.
Kaj mi acxetis la bona, sed post kvin sekundoj.
Kaj gxi povus esti iom pli puraj, por vidi ĝin ĉi tie je la fina, do mi estas
tuj faros -
ni faros ĉi tie -
ni faru Curl tiu adreso denove kun la 1337.
Kaj mi nur speco de devos sidi tien por kvin sekundoj.
Sed rimarkos, ke la servilo povas akcepti novajn respondojn.
Do ĝi presas hey.
>> Kaj por demo tiu, esence kio Mi povas fari en tiu alia langeto -
do ni diru mi faras tion en alian slipon, Mi tuj faros Curl kaj la sama
afero denove.
Kaj mi tuj provos piedbati tiujn infanoj ĉe la sama tempo.
Do mi intencas fari tion, kaj mi estas irante al la raso super ĉi tie kaj mi
faros tion denove.
>> Kaj ni faru tiel ke vi povas vidi ambaux.
Tiu presita hey kaj tiu presita hey tuta vojo, je -
ni faru ke eksperimento denove.
Efektive, ni uzas ĉi trompi, se tio estas en ordo.
>> Do mi tuj uzos shell afero ke permesu al mi esence kuri du kopioj
de tiu programo en paralela.
Do ĝi kuros la unuan programon kaj la duan programon paralele.
Do nun, se mi premi Enter, ĝi okazas fari ke peto pretty much
fulmobatita samtempe.
Do ni donas ĉi pafon.
>> Do nun rimarkas diras du procezoj.
Kaj se vi estas scivolema, ke 27.000 nombro estas esence la procezo ID.
Kaj tiam rimarkos, ili presas hey samtempe.
Ĝi ne plaĉas ni devis atendi kvin sekundoj por unu kaj tuj poste,
kvin sekundoj poste ricevas la duan.
Do tio estas speco de, en kelkaj manieroj, estas Ne vere evidenteco, sed estas
intuicia evidentigas, ke ĝi estas ne nur kiel atendi kvin sekundoj kaj blokante
la tutan fadenon.
OK malvarmeta.
>> Kaj Aaron demandis pli frue, ke estis, nu kio, se ni faras ion -
Yep?
>> Spektantaro: Atendu.
Kiom estas malsimila printf buffer, kvankam?
Ĉu ne aŭtomate faras tion?
Kial ni devas zorgi pri ĝi?
>> Kevin Schmid: Ho, vi povis diri, ke unu pli da tempo?
>> Spektantaro: Ĉu ne plaĉas printf buffer fari la ĝustan saman aferon?
>> Kevin Schmid: La printf buffer?
>> Spektantaro: Jes.
OK.
Ne estis en unu el la kvizojn ili estis parolante pri kiel se vi rajtas printf
io kaj tiam ili ŝin paŭzi unu la dua, kaj tiam vi havos ŝin buklo dek
fojojn, tio atendos dek sekundoj kaj tiam printf ĉio kune?
>> Kevin Schmid: Ho, okej.
>> Spektantaro: Ĉu fari la saman afero tiam en tiu kazo?
>> Kevin Schmid: Do la demando estis esence en unu el la iama kvizojn
aŭ io, ne estis demando kiu esence, se vi diros print f 10
aferojn samtempe, kaj poste ekdormis kiel en la procezo de presado tiuj eliris,
fine por iu kialo, ŝi volis nur renversi tiujn cxiujn sur la ekrano.
Do tie estas speco de du malsamaj konceptoj tie.
>> Do mi supozas unu afero estas ke, en tiu kazo, ni kontraktanta kun du malsamaj
speco de personoj petante la servilo por aferoj, je la sama tempo.
Kaj la kialo ke la printf speco de atendas kiel tio kaj renversas ĉion
samtempe estas pli rilataj al kiom printf specon de -
tiel la vojon printf estas reale implementado estas esence devas
paroli kun la mastruma sistemo por skribi Okaze de la konzolo.
Do ĝi ne volas fari ĉiujn da ke stuff tuj kiam vi diras printf
iuj kordoj ĉar tio povis akiri multekostan se ĝi devas
faru, ke ĉiufoje.
>> Do, se vi faros printf bona, via programo eble ne vere presi tiun
tuj al la konzolo.
Ĝi povus diri, OK, mi skribis ĝin.
Kaj tiam ia atendos vin por doni ĝin iom pli antaŭ ol reale
skribi gxin por la konzolo.
>> Do la kialo, ke tio estis la kazo -
kaj ĝi estas speco de nerilata al la dormo -
estas, ke la dormo estis speco de simple injektita en tie por pruvi la
fakto, ke ĝi ne skribi ĝi sincronizadamente.
Sed la kialo por tio estas ĝuste agado por ke vi ne devas
faru, ke multaj kontaktoj la mastruma sistemo.
>> Sed ĉi tie, kion ni vere provas fari kun tiu dormo afero estas simple programo
ke kiam ni havos du personoj vizitante ĉi retejo, ĝi ne estas tuj metis
ilin en linio kie ĝi estas dironta Mi devas helpi vin, kaj tiam, kiam mi estas
tute finita helpi vin post tiuj kvin sekundoj, do mi tuj
movi sur la sekvanta persono.
Do la unua persono petita ne ligi tiu evento buklo
se tio havas sencon.
>> Sed ĉi tie estas reale ekzemplo de iu kiu ligos
ĝis la evento buklo.
Do jen hidan funkcio komputi la n-a fibonaĉi.
Ĝi estas laŭvorte la pli malbona maniero vi povas komputi la n-a fibonaĉi-nombro.
Kaj tio estas efektive nur agnoski kie tiu venis,
tie estas reale -
Mi volas diri, vi povas provi iri trovos ĝin - sed ekzistas kiel tre longan blogo
sendi ke iu skribis.
Estas kiel unu el tiuj Reddit aferojn.
Sed iu kritikis Node.js, kaj ili uzas tion kiel ekzemplon.
Do mi specon de volis nur montri al vi du malsamaj perspektivoj simple akiri
ĝenerala kompreno de la konceptoj malantaŭ tiuj du aferoj.
>> Sed tio estas elektita kiel simplan hidaj, horore malkompetenta kompute
intensivaj vojo al komputi la n-a fibonaĉi-nombro.
Do nur kiel flanka noto, kial estas ĝi hidajn kiel en unu vojon?
Yep?
>> Spektantaro: Diru vi komencas evi 1,000.
1.000 splits en 999 kaj 998.
Ĉiu de ĉi disdividas en du aĵojn.
>> Kevin Schmid: Dekstra.
>> Spektantaro: Ĉiuj vojon malsupren.
>> Kevin Schmid: Ekzakte.
Do ĝuste ripeti por la ĉambro, se mi voki fib sur ŝatas 1,000 aŭ io
kiel tiu, ĝi estas evidente ne malpli ol aŭ egala al unu do mi tuj
iru al tiu alia kazo, kaj tiam mi iros voki fib 999 plus fib 998.
Kaj tiam preskaux cxiuj de tiu laboro kiu fib 999 faras estas
speco de ĉe tiu nivelo.
Se vi tien iru, ĝi estas eĉ pli redunda ol tio, sed se vi nur
pensas komputanta fib 998 gets ni belajn proksime fib 999.
Do ni devus vere esti iom pli clever pri kiel ni ia reuzi
ĉi tiuj, sed ni ne reutilizando tion ajn.
Do vi povas imagi ĉi giganta, giganta arbo, kiu estas nur terure.
>> Sed ĉiukaze, OK.
Por ke estis fib.
Ĝi simple prenas tempon kuri.
Yep?
>> Spektantaro: [inaudibles].
>> Kevin Schmid: Ho, vi povis ripetu la demandon?
>> Spektantaro: [inaudibles].
>> Kevin Schmid: Ho tia ĉi estas nur kodo ke tuj estos speco de sur la
servilo flanko.
Do tio ne tuj estos trovita en la foliumilo aŭ nenion.
Ĝi estas esence kion ni havas estas ke kiam la uzanto ĉi tie sufiĉe tre fabrikas
ilian deziron denove, kiam ni ian fari peton, ni tuj voki
ĉi funkcio sur la flanko de la servanto.
Kaj tiam ni ricevos la rezulton reen el nomante tiun funkcion.
Kaj tiam ni nur presas ĝin al la uzanto.
Do la uzanto ne vere trakti kun tiu funkcio tro multe.
>> Estis, ke la demando?
Ĉu tio havas sencon?
OK.
Cool.
>> Do denove, ni faros tiun tutan res.writeHead afero, kie ni presi
la ĉapon.
Kaj tiam mi finos la respondon per farado La magia nombro estas fib 45.
Do ni nur kuri ĉi servilo.
Do mi tuj faros Nodo fib.js.
Do nun mia fib servilo kuras.
>> Kaj tiam tie, mi tuj fari unu el tiuj.
OK?
Do mi simple volis diri, Curl.
Do ĝi estas tuj prenu iom da tempo sed espereble baldaŭ finos kaj
tio estos presi ke 45 Fibonacci nombro.
>> Spektantaro: [inaudibles].
>> Kevin Schmid: Ĝi devus get farita baldaux.
Do ĝi devus preni kvin ĝis ses sekundoj.
Mi ne scias, ke estas nur V8 esti super rapida, sed ĉiukaze, temas pri
tre mallonga ekzemplo kaj intence inelegant de ne-bagatela
kalkulado.
Do post kelka tempo, ĝi ricevas ĉi.
>> Sed nun por kio, se mi faras tion saman specon de eksperimento kiel antaŭe kie mi faros
du petojn samtempe?
Do jen mi iras al buklo sur tiu adreso, kaj mi iros
fari alian Curl.
Kaj memoru, kiam ni faris tion por la dormi servilo, kiam ni esence havis ĝin
post kvin sekundoj, ili bela multe ambaŭ revenis dekstra
ĉirkaŭ la sama tempo.
Do ĝi ne estas aparte ligitaj.
>> Sed ni provu ĝin nun.
OK, do ni havas nian du procezoj.
Memoru tiuj estas la procezo IDs.
Ĉi tuj estos iom mallerta dum ni eniris en perdon.
Do ni nur restu tie kaj atendu.
>> Do unu el ili venu reen post kiel -
OK, do unu revenis.
Sed tiam kial ne la duan unu revenu nur ankoraŭ?
Yep?
>> Spektantaro: La servilo ne povas fari ion ajn dum ĝi komputanta, ke granda nombro.
>> Kevin Schmid: Dekstra.
Do la respondo estis simple, ke la servilo vere ne povas fari ion dum
ĝi estas komputanta ke Fibonacci nombro.
Do nun mi ĵus akiris miajn du aferoj dorso.
Sed mi supozas ĝuste pensi pri la kodo iom pli, kiel ĝi funkcias
kaj ĉiu.
>> Do tiu funkcio ĉi tie estas la kodo kiun Mi jam diris al ĉi tiu servilo kuri kiam
ricevas novajn envenantajn peton.
Do ĝi estas ĝuste tuj kuri tra tiu tutan kodon, kaj tiam ĝi tuj iri
Reen al la evento loop kaj poste daŭrigi kontrolanta por novaj eventoj.
Do esence kion ni okazis Estas la servilo estas
aŭskultante por novaj aĵoj.
La unua persono petu kion 45 estas.
Ni kuras tiun kodon al komputi ĝin.
Tiu kodo prenas proksimume kvin al ses sekundoj por kuri.
Tiam ni revenu al la evento buklo kaj kontrolas por novaj petoj.
>> Do tiu estas ekzemplo de kiel, se vi havi tion, kio estas tn komputi
ligis, aŭ uzi multajn komputa, Ne potencon, sed kiel estas
kompute intensivaj -
Mi supozas ion por diri pri tio ke tiu funkcio faras plene,
plejparte, belaj utila laboro pravas.
La tutan tempon, ke tiu callback funkcio kuris, ĝi estis sufiĉe
multe elspezi grandan parton de lia tempo nur komputado ke n-a fibonaĉi-nombro.
>> Sed ni havis nur unu fadeno trakti.
En la Apache modelo, kiam du homoj faris la peton por akiri fib 45, ni
estus havinta du malsamaj fadenoj.
Kaj tiam la mastruma sistemo laborposteno estus estinta, aux la uzanto nivelo
kodo kiu administras la fadenoj, estus jam estis por tranĉi ke sur la
CPU, aŭ eĉ se vi havis multnombrajn CPU, disdoni ilin pare trans la CPU
tiel, ke ili ambaŭ finas proksimume je la sama tempo.
>> Do nur por montri al vi kiel ni povas ordigi de - kaj ĉi tiu ne estas entute perfekta
solvo, sed speco de kiel ni povas fari revenu ĉi tien kaj fari
iomete pli bone.
Do kion mi havas ĉi tie estas programo nomata Fib C. Kaj ĉi esence uzas
alia de Nodo de moduloj nomata Infano Procezo Modulo.
Do mi inkludis, ke ĉe la supro speco de kiel mi farus funton inkluzivi
infano process.h aŭ io.
Nun mi havas aliron al tiu CP variablo kiuj havas ĉiujn miajn funkciojn.
>> Do nun, kion mi faras en ĉi tiu respondo traktilo estas mi kurante ĉi programo
dot oblikvo fib 45.
Do kion mi faris - kaj mi simple irante eliri de tiu programo por
iom -
estas mi skribis C programon kiu esence komputas la
n-a fibonaĉi-nombro.
Do tie estas nur programo kiun mi skribis en C kiu komputas ĉi.
Mi povas kompili ĝin, kaj mi povas kuri ĝin ĉe la komandlinio.
Kaj tio okazas al komputi la 45 Fibonacci nombro.
>> Do rimarkos ĝin nur prenas preskaux tiel longe.
Mi verŝajne povus esti uzita haltostreko 03 al optimumigi ĝin aŭ io kiel tio,
sed mi ĵus faris kiel regula tradukilo agordojn.
Kaj presas ĝin.
>> Sed nun, kion mi specon de faras?
Ho bedaŭras, erara dosiero.
Do mi faru la samajn aferojn kun la kaplinio kiel antaŭe.
Poste mi faru tion cp.exec.
Do kio estas tiu tuj fari estas ĝi estos tuj kuru ĉi programo.
Sed la maniero ĉi verkoj estas ke ĝi ne estas tuj atendi
ke programo por fini.
Ĝi simple esence diras ekzekuti ĉi programo.
Do esence tajpas ĉi tion en la ordonos prompto ia.
>> Kaj tiam, kiam vi faris kun ĝin, kuros ĉi funkcion.
Do nun ni ia get this tutajn restaŭrita afero de
kiel ni ne atendas.
Ĉu tian sencon?
Yep?
>> Spektantaro: [inaudibles]?
>> Kevin Schmid: Do tio efektive malfermos novan procezon por fari ĝin.
Do tiu estas efektive, en kelkaj manieroj, malbono, ne super malbono, sed estas
grava por diri, ke ĉi tiu estas speco de reironta al, unuflanke, la Apache
modelo kie ni fari fadenojn kaj procezoj por ĉiu peto aŭ
procezojn por ĉiu peto.
Do tiu estas speco de analoga al kio Apache faras.
En kelkaj kazoj, simple uzi novan fadeno, kiu estas iom pli malpeza
pezo ol procezo, sed Apache povis finas forking nova procezo
kio estas speco de tio, kion ni faros ĉi tie implice per farado dot oblikvo fib 45.
>> Kaj tiam en tiu kazo, ni ia fali la samaj elspezoj de procezoj.
Do tiu estas nur unu afero vi povas fari.
Sed nur por montri ĉi speco de kurado.
Kaj ĉi tiu diskuto estas nur vere celas prezenti tiujn speco de programoj kiel
maniero montri malsamaj vidpunktoj pri kiom desegni servilojn tiel.
Do tiu estas kurante, kaj poste nun se mi faras ĉi denove, mi ricevis du procezo IDs.
>> Ni simple paroli pri aferojn atentigi.
Do rimarkos ke ili estas kreskante.
Tio estas malvarmeta.
Ĉar ĝi estis 27.122 antaŭe.
Sed avizo nun, ili venis denove ĉe proksimume la sama tempo.
>> Kaj nun, bonan demandon por demandi pri kial estis ke la kazo estas, kies tasko
estis ĝin nun al ia fari tion speco de ludi foiro kun ĉiu
aliaj, tiuj du ekzemploj de dot oblikvo fib 45 ke mi kuris
aŭ kiu Nodo kuris?
Kiu speco de faras ĝin bela, ke ili ambaŭ get speco de balancitaj tempo de ekzekuto?
>> Spektantaro: [inaudibles].
>> Kevin Schmid: Jes.
Do esence, kiam Mi faros dot oblikvo fib 45 aŭ io tia, nun estas
speco de ĝis la mastruma sistemo por manipuli la runtime de tiuj programoj.
Kaj nun ŝi povas plani ilin pri diversaj procesoroj aŭ ĝi
povas plani ilin.
Ĝi povas tranĉi la tempo, ke oni CPU gets ĝin aŭ ke ili ricevas
kuri sur CPU.
Do tio estas la ideo malantaŭ tio.
Ĉu tio havas sencon por ĉiuj?
Do nun Nodo ne vere ludas parto en dividanta tiujn taskojn.
OK.
>> Do tio estas preskaŭ gxin por ekzemploj.
Mi nur volis montri pli afero ĉar multe de tiu tiel nun estis
ne plene super praktika en kelkaj kazoj.
Mi povas imagi venas hejmen post tio paroli kaj iu kaj diris kiel,
bone mi specon de elvenis de tiu diskuto, ke Mi povas fari Fibonaĉi-servilo por
mia fina projekto.
Do tie estas nur ia unu ekzemplo pli kiuj espereble estos -
eble ne, sed eble - iom pli ia rilatajn al fina projektoj kaj
pensante antaŭen por aĵoj kiel tio.
>> Do tiu estas chat.js.
Do tiu estas speco de like kelkaj specimenaj servilo flanko kodo kiun vi povus uzi por
starigis malgrandan babilejon servilo kiel vi eble vidis en la
Facebook Babilejo aŭ kio ajn.
Do mi ne diras ĉi estas kiel Facebook Babili, sed ĉi tiu estas speco de
kiel bona - eble ne bona, sed eble bona - elirpunkto por la babilejon
servilo por via TTT-ejo por fina projekto.
Do ni rigardu, kio ĝi estas faranta.
>> Do ni ricevas tiu speciala afero ĉe la supro, ĉi var SIO
egalas postulas Socket.IO.
Do tio estas alia afero, ke ĝi ne efektive venis ekestos
Nodo sed vi povas instali gxin.
Estas Nodo modulo.
Do ĝi estas ĵus kiel iuj etendo al Nodo.
>> SocketIO estas efektive vere speco de malvarmeta.
Ĝi estas abstraktaĵo kiu esence kio ĝi estas ĉu vi permesas
havas tiun torenton da komunikado inter retejo
foliumilo kaj reta servilo.
Do plejparte ĝis nun, ni havis ĉi tiuj tre rapida unu aŭ du
dua konektoj inter retejo foliumilo kaj la TTT-servilo.
Do ĝi estas esence iri al google.com, akiru la vazaro, sendu ĝin, kaj poste
ni faris.
Ni neniam parolas denove ĝis la uzanto tajpas en iu alia.
>> Sed kion Socket.IO kaj simila speco de aferoj - kaj SocketIO estas fakte unu
de la aĵoj kiuj estas konstruita sur kiel WebSocket kiu estas speco de haveblaj
kiel parto de HTML5 -
kiu permesas al vi havi ĉi daŭrigi la dialogon.
Kaj tiu estas tre utila en babilejo servilo speco de afero, ĉar ĝi estas
ia kiel daŭra dialogo en iuj manieroj, ĉar se vi babilis
kun iu, vi povas nun nur sendos mesaĝo sube la pipon, kaj tiam la
servilo povas sendi mesaĝon malsupren la pipon al la alia persono vi estas
babili kun.
Kaj tiam vi povas havi tiun interŝanĝi ŝatas tion.
>> Do tio estas speco de kio SocketIO estas bona por.
La kialo ke SocketIO uzas WebSockets kiel unu afero estas, ke en
Krom nur ordinaraj malnovan WebSockets, ĝi ankaŭ faras kelkajn trukojn por esence
fari retumilo kongruaj.
Do retumiloj kiel Internet Explorer bedaŭrinde ne subtenas WebSockets
dekstra el la skatolo.
Do uzu iun alian specon de cool neta aferojn kun Adobe Flash permesi
vi havu krucon retumilo subteno.
Do tio estas vere utila.
>> Kaj vere, mi konas min speco de kurante al tempo ĉi tie, sed CS50
Diskuti, ĉu vi iam vidis ion kiel, mi ne scias, malplenan tiom kaj tiom estas
respondi al afiŝo aŭ io tiel, ke trajto?
Tio SocketIO.
Do kiam iu komencas tajpi en la diskuti skatolo fari respondo aŭ
io, via retumilo ne kio estas nomata en SocketIO elsendas ia
eventon kiu diras ies respondo al afiŝo.
>> Tiam la servilo diras, OK, Kion mi devas fari?
Nu nun mi devas diri al tiuj aliaj infanoj kiu estas sur CS50 Diskuti rigardis
ĉe afiŝo kiun iu'S respondi.
Do tio estas speco de tio, kion SocketIO estas bonan por ĉi tiu kontinua speco de
fluo da dialogo.
OK.
>> Do kion mi havas cxi tie, - kaj ni ĵus tuj ignori la rilatoj tabelo
por iom -
kion mi faras estas mi alia aŭskultas.
Do tio estas nur la vojo en Socket.IO estas dirante ni aŭskultos en ĉi tiu haveno.
Kaj tiam mi faras tion en rilato.
Do tio estas nur esence Socket IO la maniero diri, kiam ni ricevas
Tiurilate, mi volas ke vi kuri tiun kodon.
>> Kaj rimarki ke anstataŭ havi rec kaj rezolucio aprobita en tie mi havas konektilon.
Kaj tion Socket ideo estas esence ĉi afero, kiun vi povas skribi kaj legi
el kiuj havas la uzanto mesaĝojn eble.
Kaj la mesaĝoj kiujn vi sendus povas iri tra tiu Socket.
Ĉu tio havas sencon?
Do temas pri tiu ĉi daŭre afero.
>> Do kion mi faras estas mi vokas Socket.emit.
Kaj ili elsendas prenas bela multe du argumentojn.
La unua argumento estas ĉeno nur reprezentanta la tipo de
afero vi elsendas.
Do por tiu kazo, mi havas uzo tiun ĉenon novan mesaĝon.
Kaj tio estas nur esence dirante ke la tipo de tiu afero, kia mi estas
sendo, estas jam nova mesaĝo.
Do vi povas aŭskulti por specifaj tipoj kiel nova mesaĝo aŭ kiel ajn
uzante dot plu.
>> Do rilato kaj uzanto sendis tien, se vi rigardas al kie ni nomas dot on,
tiuj estas aliaj kordoj kiuj reprezentas tipoj de uzanto mesaĝoj.
Do ĝi estas esence vi povas havi ĉi eligi unu el ĉi tiuj mesaĝon tipoj, kaj
tiam faru ion en respondo al unu el ĉi tiuj mesaĝon tipoj
>> Do mi elsendas cxi tiu nova mesaĝo.
Ni iras al ignori connections.push por dua.
Sed tiam mi diros, Socket.on uzanto sendis.
Do nun ĝi estas speco de like kiam la uzulo sendas al mi mesaĝon, mi deziras
vi kuros ĉi-kodo.
Kaj rimarki ke tiu anonima funkcio prenas en tiu variablo
vokis datumoj kiuj estas esence irante por havi la uzanto mesaĝo.
>> Do nun ni ia diskuto pri la rilatoj tabelo.
Do tiu estas desegnita por babilejon kliento kie esence ĉies ia en
la sama babilejo.
Do esence, kion ni bezonas por subteni ĉirkaŭe estas iu tabelo kiu esence
reprezentas tutan popolon babili en iuj manieroj, se tio havas sencon.
Ĝuste?
Ĉar ni bezonas scii kiuj tiuj knaboj estas do ni povas sendi al ili la mesaĝojn
ke aliaj personoj sendas al ni.
>> Do kio estas tiu kodo faras estas kiam uzanto sendas mesaĝon - tio estas la tipo de
la evento -
Ni tuj kuri tiun kodon.
Kaj kion ni faros estas ni kuras tra tiu tabelo, kiun ni nomas rilatoj.
Kaj preskaux cxiu ligo krom tiun, kiu estas nia, tio estas
kio estas tiu kodo diras, ni sendu novan mesaĝo kun tiu alfiksis mesaĝon
informoj.
>> Do, se vi rimarkas tie ĉi, kion mi faris, kiam la uzanto reale faras novan
ligo estas Mi aldonis kun la JavaScript.push metodon, tio estas
esence nur diras kiel aldoni ke Socket kiel valoron en
niaj rilatoj tabelo.
Do nun, kiam tiu kodo kuras, gxi sendu tion al tiuj apartaj
rilatoj.
Do tio povas esti bona deirpunkto cxar farante babilejon servilo
aŭ io simila.
>> Kaj la specon de cool afero estas ke la kodo kiun vi vidas cxi tie por kia sur kaj
elsendas kaj necesajxojn kiel tiu estas la sama speco de JavaScript kodo kiun vi farus
skribu en la retumilo interagi kun la servilo.
Do jen kial SocketIO estas speco de neta kaj utila en tiu vojo.
>> Ho, kaj nur unu alia aĵo reala rapida.
Okazis CS50 fina projekto pasintjare kiu esence implementado babilejon
servilo en Node.js.
Mi kredas ke estas Harvardchats.org sed mi ne estas -
OK.
Mi ne certas kion la URL estas, sed Mi povas sendi kiuj eliris post tio.
Sed ĝi estas speco de malvarmigi kio vi povas fari kun Node.js.
>> Do mi esperas ke, ĝenerale, vi infanoj havas bona senso de kio Node.js estas utilaj
por kaj kiel vi povus eble apliki por via fina projekto.
Mi estos elsendanta iuj pli rimedoj kune kun tio.
Kaj dankon pro via vizito.
Dankon.
>> [Aplaŭdo]