KEVIN SCHMID: Hello kulħadd. Merħba lill-seminar CS50 fuq Node.js. Jisimni Kevin. Jien TF CS50. U jien tip simili verament eċitat dwar dan is-seminar. Naħseb Node.js huwa ħafna jibred. Nittama li dan is-seminar jista 'jintuża bħala tajba, I raden, katalist għall- xi wħud mill-proġetti finali tiegħek jekk int interessat fl-użu xi ħaġa bħal Node.js. Aħna ser tip ta 'jibdew il-seminar off billi biss jitkellem dwar ftit ta 'l- tip ta 'iskalabbiltà isfond perspettivi tal Node.js, u mbagħad aħna ser jimxu lejn xi eżempji kodiċi. U jien ser ikollhom l-kodiċi fuq websajt, u inti tista 'tħares lejn il-kodiċi. U wara l-seminar, I ser issolvi diskors dwar kif inti tista 'twaqqaf Node.js fuq il-kompjuter tiegħek. OK. Mela ejja tibda. So I raden I biss trid titkellem dwar servers mill-web, tassew, l-ewwel. U biex tibda din id-diskussjoni, I bażikament għandhom dijagramma li hija minn l-textbook użat għall-CS61, li bażikament turi l-interazzjoni bejn proċess klijent, bħall-web tiegħek browser jew simili klijent għan tiegħek jew xi ħaġa bħal dik, u web server. Allura dan it-tip ta 'jistenna simili għall- stampa li inti raw fil-lecture fuq L-ERBGĦA fejn bażikament għandna xi proċess klijent bħall-Google Chrome. U mbagħad pass wieħed huwa l- klijent jibgħat talba. Allura li jista 'jkun xi ħaġa bħal ukoll ejja żjara, I do not know, CS50.net. Allura aħna toħroġ it-talba. U ħadd ma tiftakar l-isem ta ' il-protokoll li tispeċifika kif dik talba għandha tkun strutturata? Yep. UDJENZA: [inaudible]. KEVIN SCHMID: Eżattament. Allura huwa simili HTTP, right? Allura bażikament l-ispeċifikazzjoni għal kemm dik it-talba għandu attwalment jiġu stabbiliti out, għaliex fl-aħħar tal-ġurnata, ir-rikjesta hija verament ftit simili string li bażikament jgħid I jixtiequ dan. U l-ispeċifikazzjoni għal dan hija HTTP. Allura dak simili protokoll. Mela allura l-server jirċievi dik it-talba. Allura inti guys jkollhom web server installat fl-appliance CS50. Huwa Apache. U din il-ġimgħa meta inti taħdem fuq il-problema sett ta 'seba, inti ser fil-fatt tkun qed taħdem ma 'dak web server. Allura l-server jirċievi dik it-talba, u allura għandu tip ta 'tobrox tiegħu ras u jgħidu bħal ukoll dak nagħmel ma 'dan? Allura bbażati fuq dak tiddeċiedi li tagħmel, allura jista 'tikkuntattja xi tip ta 'riżorsi. U li r-riżors jista 'jkun ħafna affarijiet differenti. Għal waħda, dan jista 'jkun biss bħal file HTML statiku. Għalhekk jista 'jkun biss bħal xi HTML li huwa simili għall- website personali tiegħek. Dan jista 'jkun fajl statika tixbah immaġni jew bħal movie li inti għandek. Hija tista 'anki jkollha biex jitkellmu għal xi tip ta 'database bħal database MySQL. Allura dan mhux dejjem ikollhom jikkomunikaw b'riżorsa, iżda fil- F'xi każijiet, jista. Mela allura dak li għaddej biex tagħmel wara li huwa għaddej biex jibgħat lura l-rispons. U r-rispons għal dan huwa speċifikat ukoll mill HTTP. Mela allura l-klijent jistgħu jirċievu dan. Hija tista jkissruha u pproċessata. U mbagħad ikollok paġna web bħall-Google jew CS50.net jew x'ikun inti marru għall. OK? Allura dan huwa l-interazzjoni bażika li aħna qed tmur biex tkun jittrattaw. U aħna qed pretty ħafna se tkun tiffoka fuq din il-parti tal- interazzjoni, il-server. OK. Kessaħ. Kulmin xi mistoqsijiet s'issa? OK. Allura kif għidna, l-web server jirċievi din it-talba HTTP u mbagħad joħroġ dan Rispons HTTP. U bħal tkellimna dwar qabel, il- Web server appliance CS50 huwa Apache. Allura meta inti guys taħdem fuq P stabbiliti seba ', int ser tkun ħidma mal- Web server Apache. Int qatt ser ikollhom verament ix-xogħol ma 'Apache direttament wisq. You tip ta kkonfigurat Apache ftit meta inti tispeċifika l-ospiti virtwali jew l-vs hosts, u aħna ser terġa ' għal dak fil ftit. Imma bażikament, l-web server Apache mwaqqfa biex taħdem ma 'tip PHP tal barra mill-kaxxa. Allura dak li verament jiġri huwa meta inti tmur għal waħda mill-websajts tiegħek simili, ngħidu aħna, ospitanti lokali index.php slash jew xi ħaġa, huwa browser tiegħek jibgħat dik talba, u mbagħad Apache huwa kkostitwit hemm u ċifri biex jagħmlu magħha. U l-azzjoni huwa li tesegwixxi dan il-kodiċi fil-index.php u allura ibgħatha lura. Allura hemm dak. Allura aħna tip ta 'tkellem dwar dan. Għalhekk tista 'sservi biss fajl statika jew run xi kodiċi PHP u mbagħad kwistjoni ir-rispons. Mela allura kwistjoni komuni li jistgħu jiġu up huwa tajjeb, kif do we verament jittrattaw ma jkollhom l-utenti multipli fl-istess ħin? Allura immaġina jekk inti kienu kitba ta 'web server, jekk kellek web server li inti kienu jippruvaw jiktbu xi ħaġa bħal C jew xi ħaġa bħal dik, bażikament inti tista 'taħseb dwar kif hemm jista 'jkun hemm xi tip ta' kodiċi li jirċievu t-talba, iżda mbagħad dan għandha tagħmel dan ix-xogħol kollu fuqha. Huwa jista 'jkollhom, per eżempju, ikkuntattja l- database jew xi ħaġa bħal dik. Dritt? U allura tagħmel dan it-tip tal-ipproċessar u mbagħad jintbagħtu lura r-rispons. Allura dak hu bħall-għolja ħarsa ġenerali livell. Imma din mhix immedjatament ovvju kif inti tista 'tagħmel dan b'mod li żewġ persuni jew anke 1,000 ruħ jistgħu jaħdmu flimkien ma tiegħek web server fl-istess ħin. Sabiex is-soluzzjoni li Apache juża tissejjaħ ħjut jew proċessi. Allura inti tista smajt ta ' dawn it-termini qabel. Huwa OK jekk int ma, iżda biss jaħsbu dwar ħjut jew proċessi bħala modi għall- sistema operattiva jew programm utent jew xi ħaġa bħal dik jew web server għal tip ta 'tesegwixxi multipli affarijiet f'daqqa. Allura inti tista smajt it-terminu bħal ħjut ta 'eżekuzzjoni. Allura huwa tip ta 'bħal int tip ta 'multitasking. U jekk inti stajt tidher fuq il-kaxxa tal tiegħek laptop, jew xi ħaġa bħal dik, multipolari, x'tista 'tagħmel huwa inti tista' run żewġ ħjut differenti fuq differenti partijiet tal-CPU sabiex ikunu jistgħu attwalment jiġri fl-istess ħin. Allura dan huwa verament b'saħħtu. U dan huwa tip ta 'l-Apache soluzzjoni għal din il-problema. Allura hemm tip simili xi kwistjonijiet ma 'dan l-approċċ għalkemm? So I raden I tip ta kiteb hemmhekk. Iżda tnejn minnhom xorta ta ' jużaw ħafna ta 'memorja. Huwa għaljin ħafna biex joħolqu ħajt jew proċess. U l-parti tar-raġunament li huwa biss bħal meta int tmexxi programm C bħall prinċipali tiegħek u mbagħad li s-sejħiet funzjoni oħra, li għandha xi tip ta 'munzell. Allura ħjut jitlob ukoll kompletament munzell separata li jista 'jkun pjuttost kbar. U jekk inti tista 'jimmaġina li tunnellata ta' utenti fuq website tiegħek, inti jkollok ħafna ta 'ħjut differenti. Li l-lott ta 'stacks biex tiġġestjona u żżomm. Allura huwa konsum memorja kbar. U mbagħad, ukoll, ejja ngħidu li inti biss għandek CPU wieħed, jew ejja ngħidu li għandek aktar ħjut minn għandek dawk Multicores. Dritt? Mela ejja ngħidu kellek 10 ħjut u inti biss kellhom ħames CPUs. Inti tip ta 'għandek tagħmel dan ħaġa fejn taqleb bejn l-kurrent wieħed li taħdem għaliex inti ma tista 'taħdem kollha 10 f'daqqa. U li sejjaħ swiċċ-kuntest. U dak it-terminu fil-fatt għandha koppja ta ' f'kuntesti differenti, imma ejja biss jaħsbu bħala switching bejn żewġ ħjut. Dan jista 'jkun pjuttost għoljin minħabba bażikament dak li għandek tagħmel huwa inti ikollhom jieqfu dak li qed isir, ħlief il- istat ta 'dak il-ħajt taħdem, u imbagħad jaqilbu għal x'imkien ieħor. Allura ma kulħadd tip ta 'tara l- motivazzjoni ta 'għaliex ħjut u proċessi jista 'jkun ftit goff? U ma għandek xi mistoqsija? OK. Kessaħ. Kulmin xi mistoqsijiet? OK. Mela jekk nieħdu pass lura għat-tieni, hemm tip ta 'bħal osservazzjoni li nistgħu nagħmlu dwar ħafna ta 'applikazzjonijiet web. U li verament li ħafna minnhom attwalment ma tagħmel li ħafna utli xogħol ġewwa ta 'ħajt. Allura jkun xi ħadd beda fuq P stabbiliti seba livelli kollha? Allura inti tixtieq li forsi jiddeskrivu xi wħud mill-partijiet? Ħdimt login jew xi ħaġa bħal dik? UDJENZA: Le KEVIN SCHMID: OK. Qatt f'moħħu. Jiddispjacini. Imma bażikament, fil-P sett, int se tkun qed tagħmel ħafna ta 'tip ta' mistoqsijiet għal database biex nikseb xi informazzjoni minn din id-database. U dak kodiċi tiegħek se tkun qiegħda tagħmel, dak il-proċess Apache jew dak il-ħajt Apache se tkun qiegħda tagħmel filwaqt li għandu jikkuntattja lill- database huwa huwa tip ta 'se tkun hemm seduta u li għaddej biex tkun stennija għall-database biex iwieġbu. Issa li ma jista 'ħoss bħal dik big jittrattaw għaliex d-database huwa fuq tiegħek Appliance CS50, right? Iżda hemm xi tip ta 'network latency hemm għaliex issa l-web server għandu joħroġ talba tiegħu stess biex d-database li jikkomunikaw ma 'l- database u mbagħad jiksbu li informazzjoni lura. Allura issa huwa simili ukoll stenna għalija, jien se jmorru tikseb xi ħaġa mill- database u allura hemm lott ta 'stennija għaddejjin. Does li jagħmel sens? U għal xi affarijiet huwa mhux ħażin. Jekk biss għandha, per eżempju, memorja ta 'aċċess, li mhuwiex simili horrible latency I / O. U meta ngħid, I / latency O, liema jien jirreferu għall huwa, bħal kull tip ta 'prodotti simili output input. Iżda għall-aċċess għal fajl fuq id-diska, bħal jekk jien ridt li jservu l-HTML statiku fajl li kien fuq il-paġna web tiegħi jew xi ħaġa bħal dik, I tip ta 'jkollu tieqaf għal ftit, aqra dan il-fajl minn fuq il-disk, u mbagħad dak il-proċess jien stennija. Jien ma jagħmlu xogħol utli. Dan mhux veru ta 'kollox, iżda huwa komuni fl-applikazzjonijiet bħall-P set seba 'u ħafna ta' applikazzjonijiet li int ma fil-fatt jagħmlu ħafna ħsieb. U meta ngħid ħsieb, I tfisser bħal xogħol komputazzjoni. Xogħol sabiex komputazzjoni tista 'tkun xi ħaġa bħal, ngħidu aħna, int riedu jiktbu web server li biss komputat in-numru Fibonacci nth. Dan ma ħoss bħal partikolarment web server gost. Like I ma jistennewx li sit li jkun il-Facebook jmiss, iżda li hija xi tip ta 'xogħol komputazzjoni. U tista 'timmaġina li jissostitwixxi dik ma' xi tip ieħor ta 'interessanti xogħol komputazzjoni. Ejja ngħidu li inti kienu bil-miktub xi ħaġa dak ikkalkulat l-gradi ta ' separazzjoni bejn żewġ persuni jew xi ħaġa bħal dik. Allura li ma jinvolvi xi tip ta 'kalkolu, id-dritt? U anke dakinhar, biex tagħmel li inti xorta jkollhom li jagħmlu ħafna ta 'stennija għall forsi inti għandek mistoqsija database biex tfittex up li l-ħbieb ma 'min jew xi ħaġa bħal dik. Għalhekk hemm dak it-tip ta 'kunċett xogħol ta 'komputazzjoni. Does li jagħmel sens? Ħadd ma jkollu xi mistoqsijiet? Oh u I raden I jitqiegħdu chat servers hemm minħabba chat servers huma tip ta ' Eżempju tajjeb ieħor ta 'dan. A chat server ma jkollux li jagħmlu ħafna ħsieb. Hija biss għandha tistenna għal nies li jibagħtu messaġġi u mbagħad meta dawn, jibagħtuhom. OK? Hekk biss biex terġa darb'oħra, Apache u servers web simili bħal dik fork a lott ta 'ħjut u proċessi li jista 'jkun it-tip ta' ħela. So I raden il-kwistjoni li jista 'jiġi minn li għandna bżonn li jkollhom ħjut u proċessi multipli? X'jiġri jekk aħna biss kellhom wieħed? Mela ejja tip ta 'żebgħa stampa ta 'dak li dan look like. Mela ejja jużaw ħajt wieħed biss. OK? Hekk biss jimmaġina dan ma 'ħajt wieħed. Ejja nassumu li ma konniex verament qed jagħmlu li ħafna utli - u meta ngħid utli, I tfisser xogħol komputazzjoni - f'dawk ħjut multipli qabel. Mela ejja tip ta 'jikkonsolida kollox fis ħajt wieħed. Allura dak jekk kellna ħajt wieħed li tip ta 'biss tmur madwar fil-linja u kontinwament kontrolli għamilt xi ħaġa ġdid jiġri. Hekk per eżempju, xi ħaġa ġdida ġara jista 'jfisser sibt xi ħaġa lura mill- -database, jew xi ħadd mibgħut me talba HTTP ġdid. Għalhekk dawn huma tip ta 'avvenimenti li jiġri, id-dritt? U allura dak I tista 'tagħmel meta dawk ġodda affarijiet jiġri huwa f'dan istess ħajt ta 'eżekuzzjoni, dan il-ħajt uniku ta' eżekuzzjoni, I tista 'sejħa xi kodiċi li tieħu ħsieb li ħaġa partikolari. Hekk per eżempju, jekk sibt xi ħaġa lura mid-database, I tista 'tmexxi tiegħi parti komputazzjoni żgħira minnha li attwalment biss tipprepara l-ħaġa li jibgħat lura lill-utent. Allura ma dak it-tip ta 'jagħmel sens? Imma x'inhuma verament il- implikazzjonijiet ta 'dan? Dritt? Għaliex aħna ħadthom bil-miktub ħafna ta 'kodiċi li - u jien biss ser jaqbżu l quddiem fil-slides jekk dan huwa OK. Mela jekk inti ma mind, jien biss ser tieħu pass lura. Allura dan it-tip ta 'ħaġa huwa jissejjaħ avveniment loop. OK? U huwa tip tar-Regolament bażiku idea wara Node.js. Allura dak Node.js hu verament tagħmel bħala web server huwa hemm thread wieħed li bażikament għaddejjin madwar fil-linja bħal filwaqt li xorta waħda ta 'taħt il-barnuża ta 'Node.js thats kontinwament verifika, ma nirċievu affarijiet ġodda? U mbagħad se jimxu handlers li inti twaqqaf. Iżda mistoqsija tajba li nistaqsu hija, kif nistgħu nagħmlu dan iseħħ ma 'affarijiet eżistenti? So I tpoġġi linja tal-kodiċi C hawnhekk li bażikament qisu huwa ftuħ ta ' fajl, id-dritt? I Hija biss daħal out ma 'album. So I kellha tiftaħ fajl ġdid tagħha. Allura l-mod kodiċi C tagħna għat-tħaddim - u I raden-raġuni I għażlet files kien għaliex dan huwa tip ta 'kemm tal-ħidma I / O li aħna ghamilt fis-C fil- sens li hemm output input. Allura aħna sejħa dan kodiċi li ma dan f miftuħa. U mbagħad fuq il-linja li jmiss ta 'tagħna programm, aħna issa jistgħu jaħdmu f. Għalhekk dan ikun ta 'eżempju ta' xi ħaġa li simili sinkronika jew imblukkar għax fuq dik ewwel linja hemm aħna qed jistennew sakemm aħna jiksbu l-fajl miftuħ. Allura fit-tieni linja, nafu li aħna jistgħu jaħdmu ma 'f, iżda dan ifisser li li t-tieni linja ma tistax verament jimxu sakemm l-ewwel linja isir. Does li jagħmel sens? Għalhekk dan ikun ħażin li jitqiegħed f'avveniment handler. U r-raġuni għal dan hija li dan it-tip ta 'tistenna, right? Allura dan jerġgħu lura us back għall-istess ħaġa. U issa aħna ma jkollhomx lanqas l- benefiċċju ta 'ħjut multipli jew proċessi għaliex aħna ltqajna ħajt wieħed Node.js. Does li jagħmel sens għal kulħadd? UDJENZA: Stenna. Allura x'inhu l-sostituzzjoni? KEVIN SCHMID: Oh, hekk iva. Hekk jien se tikseb biex is-sostituzzjoni. OK. Allura dak jekk kellna xi ħaġa li dehru qishom dan? Allura dak li jekk issa I editjat f tiftaħ ftit? Hekk jien tgħaddi fl-istess żewġ argumenti bħal qabel. I still love-kanzunetta l-ġdida li hi ħareġ bil. Imma jien tgħaddi terz ħaġa li huwa dan il-varjabbli msejjaħ kodiċi. Imma dak li hu kodiċi attwalment f'dan il-kuntest? Huwa simili varjabbli regolari C? Huwa funzjoni, id-dritt? U li tista 'tkun ftit stramb għaliex Jien fil-fatt bħal issa tgħaddi jiffunzjonaw fis funzjoni oħra. Affarijiet hekk koppja li wieħed jinnota dwar dan. Waħda, jien ma attwalment sejħa il-funzjoni kodiċi. Allura inti ma tara kodiċi ma 'l- paren xellug, paren dritt. Jien biss tgħaddi fil-kodiċi. U fl-C, dak li dan ikun fil-fatt jagħmlu hija tagħti me a pointer għal dik attwali kodiċi, u mbagħad dan jista run. Iżda biss jaħsbu dwar dan kif int tgħaddi l-kodiċi biex jimxu meta dan il-fajl ikun miftuħ. Imma dak li dan ifisser huwa li issa l- bqija tal-programm tiegħi li tista 'tagħmel Jittieħed oħra, tista 'tkompli tagħmel ieħor Jittieħed filwaqt li aħna, ma verament tistenna, iżda biss ikollhom fil-dahar tal-kapijiet tagħna li meta dik fajl miftuħ, run li kodiċi fil-quċċata. Does li jagħmel sens? U issa l-idea wara Node.js hija li il-kodiċi fil-għalf do ma 'f parti għandu jkun pjuttost qosra u sempliċi u sempliċi u mhux verament tkun intensiv computationally ħafna. Jista 'jkollha tiftaħ fajl ieħor, iżda li għandha wkoll tkun pjuttost malajr għaliex għandu biss jgħidu tagħmel ieħor f tiftaħ u mbagħad sejħa dan il-kodiċi oħra. Hekk biss li tkun kompletament ċara, il-f miftuħa li ma l-kanzunetta l-ġdida Katy Perry mp3 jsir, li għaddej biex pretty ħafna jirritorna immedjatament. U allura nistgħu biss tkompli tagħmel Jittieħed oħra minħabba kollha li issa f sejħa miftuħa ma hija tgħid bażikament l- kodiċi open f sottostanti tiftaħ dan il-fajl u meta qed isir ftuħ dan fajl jew meta ikollok lura, imbagħad run dan il-kodiċi. Iżda dan ma tmexxi effettivament dan il-kodiċi. U kellek kwistjoni? UDJENZA: Inti deher li jimplikaw ftit drabi li żżid computationally kodiċi intensiv tip ta 'jkisser il- [Inaudible] misjuqa sistema. [Inaudible]? KEVIN SCHMID: Li l-kwistjoni kbira. So I attwalment ikollhom eżempju ta 'kif inti tista 'tintegra computationally kodiċi intensiv ftit. Allura meta nikbru għall-eżempji kodiċi, I ser tkun żgur li pull li wieħed. Huwa li OK? Grazzi. Liema kien l-isem tiegħek? UDJENZA: Aaron. KEVIN SCHMID: Aaron itella 'ħafna punt tajjeb, li hija li jekk kelli xi kodiċi intensiv computationally fl l-għalf ma 'f parti, il-bqija tal- programm tiegħi ma tista 'taħdem u ma tistax tisma' għal talbiet ġodda jew xejn sakemm kollha li Jittieħed huwa lest. Mela jekk jien bil-miktub kodiċi Node b'mod ġenerali sakemm nagħmlu xi ħaġa simili jien ser li tissuġġerixxi aktar tard meta nħarsu lejn l- eżempji kodiċi, I għandek tkun żgur li kodiċi tiegħi ma jsegwix dan l-avveniment loop. Does li jagħmel sens? OK. Kessaħ. Allura Node.js joffri dan il-qafas li inti tista 'tibni dawn avveniment misjuqa servers ma. Għalhekk għandha dawn it-tip ta 'mhux sinkroniku non-imblukkar I / O libreriji, billi il-libreriji standard Ċ li aħna kont qed jaħdmu ma, bħal jekk inti biss jużawhom fl-istess mod li konna ilhom jużawhom ma 'f jiftaħ u Jittieħed, dawk huma imblukkar minħabba inti fil-fatt għandek tistenna għal dan il-fajl biex tiftaħ. Imma inti Node.js jagħtik li u bażikament rabtiet fis V8 Google JavaScript magna li hija r-raġuni li Chrome hija tant mgħaġġla fil-proċessar JavaScript għaliex għandha din il-magna V8. So I jafu li tinstema 'wieħed minn dawk WWDC konferenzi iżviluppatur ħaġa fejn huma biss tarmi mazz tal- numru ittra affarijiet għall-proċessuri u jgħidu dan huwa hekk jibred. Iżda huwa jibred li dawn ma dan għaliex JavaScript - jew forsi jekk int ma jkunux familjari mal- JavaScript għadhom għaliex aħna ma kellhomx l-lectures fuq it - iżda JavaScript huwa interpretat lingwa. U dan huwa punt importanti wisq. Allura huwa importanti għall-web tagħna servers li tkun rapida, right? U jekk konna biss running JavaScript kodiċi li ġiet interpretata biss kull interpretu qodma jista 'jkun bil-mod. Benefiċċji hekk Node milli jkollhom dan interpretu V8 super fast. U jien ma nafx jekk jismu dan minħabba li l-SLAP V8 fil-forehead ħaġa, iżda OK. Hekk stajt ippreparat xi eżempji f'dan URL. Wara l-seminar, jien tip ta 'ser jitkellmu dwar kif tista 'tikseb sett Node up, iżda għal issa, I biss tip ta 'trid jimxu permezz xi eżempji kodiċi. Mela jekk inti tixtieq li ssegwi tul, l- kodiċi ta 'sors disponibbli hemmhekk. OK? So I ser tħalli din URL up għal ftit. U mbagħad jien biss se jaqilbu fil-terminal. Huwa kulħadd tajba ma dan il-URL? Hekk jien ser jisswiċċja biex terminal tiegħi hawnhekk. Allura hawnhekk-kodiċi li I jkollhom għal-lum. Għaliex ma we tibda bil simpler.js fajl? Il-ħaġa oħra hija li kollha ta 'dan kodiċi se jinkitbu JavaScript li inti tista 'jew jistgħu ma jkunux familjari magħhom. I raden ftit affarijiet hija li ħafna tal-kodiċi JavaScript hu t-tip ta ' sintassi u l-istruttura hija simili ħafna għal C, sabiex inti tista 'tip ta' pick it up bħala tmur flimkien. Stajt ppruvaw jiktbu ħafna ta 'l- kodiċi bidu għal din b'mod li l- simili għal C b'tali mod li huwa ftit aktar leġġibbli. Imma kif aħna l-progress, I ser tkun turi xi wħud mill-addizzjonali karatteristiċi ta 'JavaScript li huma tip ta 'kessaħ. Imma ejja nħarsu lejn dan il-programm kampjun. I raden kollox maqtugħ off hemmhekk. Jien biss se jiffissaw dak reali fast jekk dan OK jew le. I do not know dak li dan huwa se jagħmel. Hija li ftit aħjar? Tista 'tara l var u l-għalf? OK. Allura l-ewwel linja huwa bħall-JavaScript verżjoni ta 'varjabbli dikjarazzjoni. Hekk biss li tenfasizza dak li dan seta ' look like fil C. Allura dan huwa biss bħal indiċi me qal ugwali tlieta jew xi ħaġa bħal dik. So I ma tispeċifikax it-tip. JavaScript ma għandhom tipi, imma hija ħafna dinamikament ittajpjat fin-natura, hekk ma pprovdew ebda tip ta 'tip fuqha. Għalhekk biss għandha var. C'est simili varjabbli. OK? U jien ssejjaħ dan HTTP varjabbli. U fuq in-naħa tiegħi lemin, għandi l- espressjoni li nixtieq li jitqiegħdu fil HTTP. U dan jgħid jeħtieġu HTTP. Allura dan huwa tip ta 'simili li jinkludi. Huwa ftit aktar simili b'saħħtu minn jinkludu fis-sens li jinkludu kien biss kopja u paste tal-header fajl għall-prototipi funzjoni jew tkun xi tkun id-definizzjonijiet tat-tip. Iżda jeħtieġu li huwa attwalment għaddejjin biex nikseb us-kodiċi. Allura inti tista 'taħseb bħala jimportaw xi kodiċi. Allura x'imkien fil-modulu Node.js sistema jew kwalunkwe, dawn għandhom dan kollu Kodiċi server HTTP hekk jien biss fetching għal tiegħi stess użu personali f'dan il-programm. OK? Mela allura I jkollhom din il-funzjoni li stajt bil-miktub. U l-avviż I ma kellhomx biex jispeċifikaw it-tip ta 'ritorn jew it-tip tal- argumenti darb'oħra. Għalhekk tip ta 'loose ttajpjata dak it-tip ta 'sens. Żewġ argumenti li jieħu fl, it-talba u r-rispons. Allura dak kunċettwalment tip simili familjari mill-istampa li kellna fuq l-iskrin qabel minħabba nagħmlu din it-talba li aħna ikollhom mill-utent. U allura għandna rispons li nistgħu jiktbu affarijiet li. Allura l-ewwel linja ta 'dan ma res.writeHead 200 u allura dan plain-test tip kontenut. Mela ejja biċċa dan apparti ftit. Mela ejja biss jiffoka fuq res.write għal ftit. Allura tikteb huwa bażikament, u jiktbu ras, huma biss modi biex tip ta 'tikteb out affarijiet għall-rispons. OK? Allura tikteb ras, jekk xi ħadd jiftakar mill-lecture HTTP, do you guys ftakar headers fil- quċċata tal-ħaġa HTTP? Allura għaliex ma I biss demo headers malajr reali. Ikun li jkun utli? Jew għandna biss tip ta '- OK. Sure. Allura meta browser tiegħek tmur għall google.com jew xi ħaġa bħal dik, hemm attwalment ftit aktar - dan huwa simili sigriet - hemm simili ftit aktar informazzjoni li taqa 'ġol-pajp minn sempliċiment it-tfittxija ftit u kollox. Allura biex nuruk dan, jien ser li tuża programm imsejjaħ Curl. OK? Allura din hija xi ħaġa li inti tista 'taħdem fuq kmand tal-linja Mac OSX tiegħek jew fil- appliance jew kwalunkwe. U hekk jekk jien Curl HTTP google.com, Jien ser tara l-HTML. U dan huwa, fil-ġustizzja, biss il- HTML li tip ta 'jgħidlek li idawwru biex www jekk browser tiegħek ma awtomatikament jimmaniġġaw il- direzzjoni mill-ġdid. Allura dan huwa biss HTML, imma jien ser li żżid mal Curl dan sing I bandiera. OK? U dan se juru lili l headers. Allura dan huwa wkoll informazzjoni li ġejja permezz meta I nikseb dan ir-rispons. OK? Allura fil-quċċata, inti tara dan HTTP 301 jimxu permanentement. U dan huwa tip ta importanti għaliex dan jirreferi għall-kodiċi istat. Allura l-301 hawnhekk huwa l-kodiċi istat, li huwa bażikament biss integer li jirrakkonta l-browser jew min hu taqra dan, jekk inti nippretendu li int browser u int tara dan, bażikament issa jekk inti tħares lejn dak u tara 301, inti taf I jkollhom biex jagħmlu xi ħaġa speċjali bbażati fuq 301, jew xi ħaġa speċjali ġara ibbażata fuq il-301. Hekk jgħid mċaqalqa b'mod permanenti. U mbagħad, bażikament, għandna mazz ta 'pari valur ewlenin. Allura irridu jiksbu l-post huwa www.google.com. U mbagħad it-tip ta 'dan kollu Jittieħed oħra, imma bażikament, dak il-post huwa qal hija l-lokazzjoni ġdida hija fil www.google.com. Mela issa jekk inti tmur google.com, inti ser tip ta 'tara l-tip browser ta' blink għat-tieni u mbagħad jagħtu direzzjoni ġdida lura sal www.google.com. Allura r-risposti jista 'jkun fihom dawn headers. U l-koppja ta 'affarijiet għall-punt out. Mela ejja ngħidu aħna kienu attwalment suċċess fil jżuru paġna web. So let me go għal - x'hemm 'website' tajba? Jien ħażin fil-ħsieb ta 'tajba websites fuq il-post. UDJENZA: Wikipedija. KEVIN SCHMID: OK. Ejja nagħmlu Wikipedija. So here I kien mċaqalqa. Oh stenna. Was I? Iva, I kien. OK. So I ltqajna biex jagħmlu www. Hekk jien ser jagħmlu www. U kif tista 'tara, hawn l-HTML li l-browser se jipproċessa għall-Wikipedija. Imma jekk I iżommu scrolling up hawn, dak I ser tara fil-quċċata - Ara naqra, hemm ħafna ta ' HTML fuq il-Wikipedija - imma dak I tista 'tara fil-quċċata hawnhekk huwa dan il-kodiċi 200 istatus kif oppost għad- 301 li rajt qabel. U tinnota li din għandha sbieħ OK friendly li jmiss lilu. Allura dan huwa bħall-kodiċi istat tajjeb. Does li għadd 200 tfittex familjari? Iva għaliex meta I ma simpler.js, I kiteb 200 hemmhekk. Allura thats bażikament tgħid tgħid il- browser jew min qed tipprova tikseb għal dan li dawn kienu ta 'suċċess. Jew li tip simili aħna kienu ta 'suċċess wisq. U hemm dan it-tip ta 'sintassi speċjali fl Javascript għal tiddikjara Mappa ta 'dawn iċ-ċwievet bħal tip kontenut u dawn il-valuri bħal plain-test. Mela jekk inti tħares lejn ir-rispons li aħna marret lura mill Wikipedia qabel, - Jien ser jippruvaw li tiskrollja up ftit aktar malajr - ikollok dawn iċ-ċwievet bħal server u dawn il-valuri Apache. Allura inti ħadthom ltqajna keys u l-valuri. U inti tista 'tispeċifika dan fir- Node dak li jibgħat lura. Allura dan huwa attwalment tip ta ', f'xi modi, u f'ċerti modi mhuwiex verament, iżda huwa f'livell ftit inqas mill-kodiċi PHP li tista 'tkun miktub għal P stabbiliti seba għaliex PHP u Apache tip ta 'tieħu kura ta' xi ta 'dawn l-affarijiet għalik. Fil PHP, inti tista 'jwarrab l-inadempjenza imġiba billi tikteb headers tiegħek. Iżda għall-finijiet ta 'dan, irridu jiksbu jiktbu out headers tagħna stess. Allura dan line jagħmel sens li kulħadd, il-linja tikteb ras? OK. Tal-biża '. Mela allura dak li nagħmel huwa I jispiċċaw ir-rispons billi qal bonjour dinja. OK. Iżda li biss funzjoni imsejħa talba handler. Allura issa I attwalment ikollhom tip ta 'do xi ħaġa ma 'din il-funzjoni, id-dritt? So here dak I do hemm hu dan linja li tagħmel ugwali għal servers var HTTP.create server, u mbagħad I jgħaddu fit-talba handler. Allura dan huwa tip ta 'l-Node mod ta 'ħolqien ta' server. U tinnota li jien tgħaddi fit-talba handler. Allura dan huwa javżak il createServer funzjoni li nixtieq li inti tagħmel me a server, u meta dik server jirċievi rispons, I ħtieġa li inti sejħa dan jitlob funzjoni handler. OK? Allura dik il-linja pretty ħafna finituri dritt bogħod. Allura l-linja server var isir id-dritt wara li inti tagħmel dan pretty ħafna. I mean, għandu jitwaqqaf xi interna stat li tkun taf li inti jkollha sejħa dik il-funzjoni talba handler, iżda mhuwiex ser ipoġġu hemmhekk u jiġifieri għandha l-utent bagħat me talba għadhom? Has-utent mibgħuta lili talba għadhom? Għalhekk ma timblukkax. OK? Allura dak li dan se tagħmel huwa bażikament issa Taħżen pointer għal dan il-kodiċi, din il-funzjoni handler talba, u mbagħad se jimxu dan il-kodiċi meta xi ħadd tagħmel talba. U mbagħad nagħmlu server.listen. L-1337 hemm pretty arbitrarja. I kellhom ebda raġuni partikolari għall-picking dak in-numru. Kien totalment każwali. Iżda li biss jispeċifika l-port. Allura servers aktar web tkun taf tara li dawn jużaw port 80 minħabba li l-tip ta bħall-konvenzjoni. Mela jekk immur għal xi ħaġa simili, I do not know, Wikipedia.org, u nressaq kolon 8 - oh naqra, inti ma tistax tara li. Jien sorry. Imma jekk I do Wikipedija - I taf tikteb hawn biss sabiex huwa ċar fuq il-camera. Imma jekk nieħu dan fi browser ma kolon 80, li jispeċifika mur Wikipedia.org fil-port 80. Allura huwa simili kif l-Istati Uniti għandha portijiet multipli bħall fejn inti tista 'vapur affarijiet li tip ta '. Allura huwa simili tmur għal din partikolari post fuq dan is-server. OK. So I biss għażlet 1337. Hemm firxa sħiħa ta 'numri li inti tista 'pick. Dan ma kienx totalment speċjali. Imma dak li jien ser tagħmel issa huwa jien ser jimxu Node. Let me attwalment jidħol li koppja linji isfel sabiex inti tista 'tara. Jien ser tagħmel għoqda, u jien tmur jiddekorri simpler.js. U aħna ser nitkellmu dwar kif tikseb Node imwaqqaf fl ftit. Iżda issa huwa biss running-server. Allura ħaġa waħda nistgħu nippruvaw li ma jistgħux tkun li eċċitanti hija nistgħu attwalment jippruvaw li jkollhom aċċess għaliha fil Curl. So I tista 'tagħmel Curl, u tiegħi magna hija ospitanti lokali. Int ser ikollok ara wkoll dan bil-miktub bħal dan kultant. Ospitanti lokali u 127.0.0.1 huma tip ta 'prodotti simili tal-kompjuter dar tiegħek. Allura huwa simili tkellem lil kompjuter tiegħek. OK. U allura nista 'ngħid 1337. Hekk jekk I run din il-linja ta 'kodiċi, jgħid bonjour dinja. U jekk jien ridt li tara li għalf li kellhom test tip kontenut plain jew kwalunkwe, I jista 'anke tpoġġi dan hawn. U tinnota li ma jgħidu OK. And I do jkollhom plain-test. U allura hemm tip ta 'dan kollu l-oħra għalf li Node se jżid b'mod hemm għalija. Li mhux super importanti. I mean, hemm xi tip ta 'teknika aspetti ta 'fuq li huma xorta ta kessaħ biex jitkellmu dwar, iżda biss biex juru you, I wkoll is-setgħa li jibdlu dawn madwar. So I tista 'biss żid mazz ta 'għalf bħal dik. U allura issa, jekk I tfittex fil tiegħi output, se jkun li. Allura dawn headers jfissru ċerti affarijiet għal browsers u affarijiet bħal dik. U headers jistgħu bażikament tgħid browser kif tirrispondi għal xi ħaġa. Jekk inti stajt qatt semgħu cookies qabel, jew jekk inti stajt qatt kienet imdejqa minn paġna web iffissar cookies, jew mixgħula blokka cookie jew xi ħaġa bħal dik. Inti tista 'attwalment tistabbilixxi cookies f'dawn headers. Allura dawn tell browser kif imġieba f'xi każijiet. OK. Allura li kien simpler.js. Ħadd ma jkollu xi mistoqsijiet fuq dan il-fajl kodiċi sors? OK. Kessaħ. Mela ejja tneħħi lr minn dak u ħarsa lejn simple.js. Allura dan huwa pjuttost ħafna l-istess programm. I biss kiteb dan ftit differenti għaliex jien ridt li sort ta 'qofol xi karatteristiċi tal JavaScript. Allura avviż li t-talba handler funzjoni totalment spiċċat. Oh Yep, ma għandek xi mistoqsija? Udjenza: Yeah, l-argumenti li huma mgħoddija għal dak funzjoni, liema huma? KEVIN SCHMID: Għalhekk dawn huma JavaScript oġġetti. Fid-dokumentazzjoni Node.js, huwa bażikament jgħid liema metodi huma disponibbli fuqhom. Aħna biss jiġri li jkollhom l-aċċess għall- dan il-metodu msejjaħ tikteb ras u t-tmiem u għalf bħal dik. Iżda hemm mazz sħiħ aktar metodi. U per eżempju, bħal wieħed minnhom b'mod partikolari fuq rec, inti tista 'tagħmel xi ħaġa bħal rec.method li se jgħidlek jekk huwa HTTP tikseb jew Talbiet HTTP post u affarijiet bħal dik. Allura hemm kull xorta ta 'differenti proprjetajiet, iżda dawn qed kemm JavaScript oġġetti, u huma biss ikollhom funzjonijiet marbuta magħhom li inti jista 'jikteb affarijiet li. OK? Allura avviż li talba handler hija totalment marret. Iżda l-kodiċi li kelli fit-talba handler għadha hemm. I għad għandhom dan res.writeHead u I għad għandhom dan res.end. U dak li dan huwa eżempju ta 'fil- JavaScript huwa din l-idea ta ' funzjoni anonima. u anonimu huwa bħal isem fitting għal dan minħabba li litteralment ma għandhom isem. M'hemm l-ebda talba funzjoni handler fil hemmhekk. M'għandha l-ebda isem, iżda għadu hija tieħu argument. So I għadhom kisbu rec u res. And I għad għandhom il-kodiċi. Dan huwa perfettament multa JavaScript kodiċi. So I tista 'tiddikjara funzjoni mingħajr espliċitament jtuha isem. Huwa ftit konfuża għall-ewwel. Hemm xi affarijiet simili utli li inti tista 'tagħmel dawn il-funzjonijiet anonimi. Ħadd ma jkollu xi mistoqsijiet dwar dan, jew hija OK biss li, għal issa, tip ta 'biss taċċetta li se tagħmel l-istess ħaġa? Yep? UDJENZA: huma funzjonijiet ewwel klassi JavaScript? KEVIN SCHMID: Huma l-ewwel huma klassi JavaScript. U biss jafu li dawn il-kunċetti ta ' jgħaddu fi funzjoni anonima bħal dan japplika għall-JavaScript li inti tista 'tikteb fil-proġett finali tiegħek għal l-web browser wisq. Hekk per eżempju, fil-JavaScript fil- browser tiegħek, huwa wkoll kemmxejn avveniment misjuqa fis-sens li dak li inti ser ikollhom huwa meta l-utent klikks dan buttuna, nixtieq li tmexxi dan il-kodiċi. Allura huwa l-istess tip ta 'ideat tal- naħa tal-klijent meta click mouse jew huma maws fuq xi immaġini fuq tiegħek paġna web, run dan il-kodiċi. Li tista 'tapplika għal servers. Allura dak it-tip ta bħall-eċċitanti raġuni għaliex JavaScript huwa verament nies adattati jew xi think it'sa lingwa xierqa għal dan it-tip ta ' server sewwieq avveniment għax għandek dawn il-funzjonijiet anonimi. Inti għandek l-idea kollha ta ' dan il-kodiċi mhux sinkroniku. OK. Kulmin xi mistoqsijiet? OK. Allura li kien simple.js. Mela ejja nħarsu lejn wieħed aktar jew koppja aktar. Allura dan huwa sleep.js. Allura huwa xi ħadd familjari ma il-funzjoni irqad C? Minn forsi wieħed mill-lectures preċedenti jew xi ħaġa bħal dik? Allura bażikament inti tista 'tgħaddi fil naħseb a numru ta 'sekonda jew jekk inti qed tuża U irqad numru ta 'millisekondi jew nanoseconds. U bażikament il-programm se biss tieqaf għaddej għal dak l-ammont ta 'ħin. Dritt? U mbagħad se jinxtegħel eventwalment u allura ser biss tkompli taħdem il-programm. Allura dan is-server tip ta 'jagħti l-impressjoni ta 'l-irqad. Allura avviż li aħna għandna l-istess res.writeHead 200 bil-header bħala qabel, iżda mbagħad aħna qed ssejjaħ dan funzjoni imsejħa timeout sett. Timeout Set huwa wkoll disponibbli fil- web browser tiegħek Google Chrome jew Safari jew kwalunkwe. U bażikament dak li qed jagħmel here huwa Hi tieħu fl funzjoni. Avviż, għal darb'oħra, huwa ta ' funzjoni anonima. Allura dak it-tip ta 'kessaħ għaliex aħna qed jużaw funzjoni anonimu fi ħdan funzjoni anonima li jista 'jkun ftit stramb. Imma hija tieħu dik il-funzjoni, li hija bażikament tgħid - u l-mod kif dan xogħlijiet huwa 5,000 millisekondi, nixtieq inti biex tesegwixxi dik il-funzjoni li biss tispiċċa l-rispons u jikteb ħej. Allura dan tagħti l-impressjoni ta 'prodotti simili irqad, iżda l-mod kif dan attwalment xogħlijiet hija aħna ser run permezz din il-linja malajr ħafna. Aħna biss bil-miktub xi ħaġa. U allura aħna ser wkoll run permezz din il-linja malajr ħafna. Allura aħna mhux qed attwalment għaddejjin jistennew ħames sekondi. Aħna biss se jimxu dan il-kodiċi istantanjament. U allura hemm, jerġgħu dan ftit F'każ loop li issa għandha din il-ħaġa reġistri li bażikament huwa biss kontinwament għaddejjin madwar f'ċirku u tħares lejn l-arloġġ wieħed Ħajt u qal, għandha ħames sekondi għadda għadhom? U allura meta jara li t-tieni idejn mxiet like ħames sekondi jew tkun xi tkun, allura wakes up u jgħid, oh, dak li nagħmel? Oh I jkollhom jiddekorri dan il-kodiċi. U mbagħad li għaddej biex run res.end hey. Għalhekk għal darb'oħra, aħna qed qatt stennija hawn. Għalhekk mhuwiex li dan il-kodiċi ġewwa ta ' din il-funzjoni se jieħu ħames sekondi biex jimxu. Dan il-kodiċi se jimxu pretty ħafna istantanju, mill-inqas relattiva għal il-ħames sekondi li konna nitkellmu dwar preċedenti qabel. Hekk biss biex juru din fl-azzjoni, I tista 'tagħmel Node.sleep.js. U ma I mess up xi ħaġa? Possibilment. Jiddispjacini. Ejja naraw dak li nistgħu nagħmlu biex jiffissaw dan. OK. Allura definittivament jużaw Node.js. Jien biss kidding. OK. Just wieħed taqs. OK. Naf dak li hu. Allura l-kwistjoni hija li fil tab ieħor tiegħi hawn, I kien għaddej Node diġà fuq l-istess indirizz, 1337. Allura l-iżball li dan threw, jekk inħarsu lejn din reali mill-qrib, huwa indirizz użu, EADDRINUSE. So I diġà kienet qed tuża 1337 hawn. Hekk jekk I shut dan off, u mbagħad I issa tipprova tmexxi dan, wieħed jittama, kollox se tkun multa. OK. Allura inti tista 'biss ikollha sort ħaġa waħda wieħed jisma fuq port f'daqqa. Soluzzjoni oħra kien ikun għalija biss jeditjaw dak il-programm u tagħmel jkun ikun simili 1338 jew xi ħaġa bħal dik. Imma issa sleep tkun qed taħdem. Mela ejja attwalment jippruvaw it out fil- browser dan iż-żmien, għaliex dan huwa ftit unexciting biex tara dan fil-terminal. Hekk jien biss se jmorru għal dak 127 indirizz mill-ġdid fil 1,337. U jekk inti tista 'tara - I do not know jekk inti tista '- iżda tiegħi tal-browser tieħu ħafna, twil ħafna ħin biex tagħbija jew simili ħames sekondi. U mbagħad wara li, finalment ntemmet ir-rispons. U inti ma tistax tara għaliex il-ħaġa tiġi mċaqalqa ftit, imma jekk nagħmel dan ftit iżgħar, inti tista 'tara jgħid ħej. So I ltqajna l-ħej, iżda wara ħames sekondi. U jista 'jkun nadifa ftit biex tara hawn fuq it-terminal, hekk jien se tagħmel a - ejja jagħmlu fil hawn - ejja jagħmlu Curl li jindirizzaw għal darb'oħra ma 'l-1337. And I biss tip ta għandekx biex ipoġġu hawn għal ħames sekondi. Iżda tinnota li l-server tista 'taċċetta tweġibiet ġodda. Allura prints ħej. U biex demo dan, bażikament dak I tista 'tagħmel f'dan il-tab oħra - hekk ejja ngħidu I tagħmel dan tab ieħor, Jien ser tagħmel curl u l-istess ħaġa mill-ġdid. U jien ser jippruvaw kick dawn guys off fl-istess ħin. Hekk jien ser tagħmel dan, u jien ser razza fuq hawn u jien se tagħmel dan mill-ġdid. U ejja tagħmel dan hekk li inti tista 'tara kemm minnhom. Li wieħed stampat hey u li wieħed stampati hey-triq kollha fil - ejja tagħmel dan esperiment ġdid. Attwalment, ejja jużaw dan trick, jekk dan huwa OK. Hekk jien ser tuża ħaġa qoxra li tippermetti me bażikament jimxu żewġ kopji ta 'dan il-programm b'mod parallel. Għalhekk ser imexxu l-ewwel programm u it-tieni programm b'mod parallel. Mela issa jekk I-istampa Daħħal, li għaddej jagħmlu pretty dik it-talba ħafna istantanju fl-istess ħin. Mela ejja tagħti dan sparatura. Allura issa avviż li jgħid żewġ proċessi. U jekk int kurjuż, li 27,000 in-numru huwa bażikament l-proċess ID. U mbagħad avviż, huma stampati hey fl-istess ħin. Ma kienx simili kellna nistennew ħames sekonda għal wieħed u mbagħad wara li, ħames sekondi aktar tard jiksbu t-tieni. Allura dak it-tip ta ', f'ċerti modi, huwa mhux verament provi, imma hija evidenza intuwittivi li huwa mhux biss bħal stennija ħames sekondi u l-ibblukkar l-ħajt kollu. OK jibred. Allura Aaron titressaq mistoqsija qabel li kien, ukoll dak jekk aħna nagħmlu xi ħaġa - Yep? UDJENZA: Stenna. Kif huwa li differenti minn buffer printf, għalkemm? Ma awtomatikament tagħmel dan? Għalfejn għandna għalfejn tinkwieta dwar dan? KEVIN SCHMID: Oh, tista ' jgħidu li waħda aktar ħin? UDJENZA: Ma simili buffer printf jagħmlu l-istess ħaġa eżatt? KEVIN SCHMID: Il-buffer printf? UDJENZA: Yeah. OK. Ma kienx wieħed mill-kwizzijiet kienu jitkellem dwar kif jekk inti dritt printf xi ħaġa u mbagħad tara li tkun nieqaf wieħed tieni, u mbagħad ikollok loop għaxar drabi, dan ser stenna għaxar sekondi u imbagħad printf kollox flimkien? KEVIN SCHMID: Oh, OK. UDJENZA: Huwa tagħmel l-istess Ħaġa allura f'dan il-każ? KEVIN SCHMID: Għalhekk il-kwistjoni kienet bażikament f'wieħed mill-kwizzijiet 'qabel jew xi ħaġa, kien hemm kwistjoni li bażikament jekk inti tgħidli print f 10 affarijiet fi żmien u mbagħad slept bħal fil il-proċess ta 'stampar dawk barra, fl-aħħar għal xi raġuni, ikun biss dump dawk kollha fuq l-iskrin. Allura hemm tip ta 'żewġ differenti kunċetti hawn. So I raden ħaġa waħda hija li, f'dan każ, aħna qed jittrattaw ma 'żewġ differenti tip ta 'nies li titlob lill-server għall-affarijiet fl-istess ħin. U r-raġuni li t-tip printf ta ' jistenna bħal dik u miżbliet dan kollu f'daqqa huwa aktar relatat ma ' kif printf tip ta '- hekk il-mod printf huwa attwalment implimentat huwa bażikament għandha kellem lill-sistema operattiva biex jikteb li Jittieħed għall-console. Għalhekk ma trid tagħmel kollha ta 'dak Jittieħed immedjatament meta inti tgħidli printf xi string minħabba li jista ' jiksbu għaljin jekk irid tagħmel dan kull darba. Mela jekk inti tagħmel printf ħej, program tiegħek ma jista 'attwalment jistampaw li minnufih lill-console. Huwa jista 'jgħid, OK, I kiteb dan. U mbagħad it-tip ta stenna għalik biex tagħti hija ftit aktar qabel ma attwalment miktub it out mal-console. Allura r-raġuni li dan kien il-każ - u huwa tip ta 'mhux relatati għall-irqad - huwa li l-irqad kien tip ta 'ftit injettat fil hemm biex juru l- fatt li ma jiktbu dan synchronously. Iżda r-raġuni għal dan hija biss prestazzjoni sabiex inti ma għandekx jagħmlu li ħafna kuntatti lil is-sistema operattiva. Iżda hawnhekk, dak li aħna qed verament tipprova tagħmel ma 'dan il-ħaġa sleep huwa biss juru li meta għandna żewġ nies li jżuru din il-websajt, huwa mhux ser tpoġġi minnhom fil-linja fejn huwa se ngħid I jkollhom biex jgħinuk, u mbagħad meta jien totalment lest tgħinek wara dawn ħames sekondi, imbagħad jien ser jimxu fuq il-persuna li jmiss. Jitolbu hekk l-ewwel persuna ma jintrabtu li avveniment loop jekk dan jagħmel sens. Iżda hawnhekk huwa attwalment eżempju ta 'xi ħaġa li se jorbtu l-avveniment loop. Allura hawnhekk funzjoni horrible li kkalkulata l-Fibonacci nth. Huwa litteralment il-mod agħar inti tista ' jikkomputa-numru Fibonacci nth. U dan huwa attwalment biss li tirrikonoxxi fejn dan ġew minn, hemm fil-fatt - I mean, inti tista 'tipprova tmur jsibuha - iżda hemm bħal blog twila ħafna wara li xi ħadd kiteb. Huwa simili wieħed minn dawk l-affarijiet Reddit. Iżda xi ħadd ikkritikata Node.js, u huma użati dan bħala eżempju. So I tip ta 'ridt li juru biss inti żewġ perspettivi differenti biss li tikseb fehim ġenerali tal-kunċetti wara dawn iż-żewġ affarijiet. Iżda dan huwa magħżul bħala biss horrible, computationally horribly ineffiċjenti mod intensiv biex tiġi kkalkulata l- numru Fibonacci nth. Hekk biss bħala nota tal-ġenb, għaliex huwa huwa horrible bħall b'xi mod? Yep? UDJENZA: Say tibda bl 1,000. 1000 qasmiet fil 999 u 998. Kull ta 'din qasmiet f'żewġ affarijiet. Kull ta 'din qasmiet f'żewġ affarijiet. KEVIN SCHMID: Dritt. UDJENZA: It-triq kollha stabbiliti. KEVIN SCHMID: Eżattament. Hekk biss jirrepetu għall-kamera, jekk I sejħa fib fuq bħal 1,000 jew xi ħaġa bħal dan, huwa ovvjament mhux inqas minn jew daqs wieħed hekk jien ser mur każ ieħor, u mbagħad jien ser li jsejħu fib 999 plus fib 998. U mbagħad pretty ħafna kollha ta 'dak xogħol li fib 999 ma huwa tip ta 'f'dan il-livell. Jekk inti tmur l isfel, huwa saħansitra aktar superfluwa minn dan, imma jekk inti biss jaħsbu computing fib 998 gets us pretty qrib fib 999. Allura aħna għandhom verament tkun ftit aktar għaqlija dwar kif aħna tip ta 'użu mill-ġdid dawn, iżda aħna mhux qed jerġgħu jużaw dawn l-affarijiet fil-livelli kollha. Allura tista 'timmaġina dan ġiganteski, siġra ġiganteski li jinsab biss horrible. Iżda xorta waħda, OK. Allura li kien fib. Hija biss tieħu filwaqt li jiddekorri. Yep? UDJENZA: [inaudible]. KEVIN SCHMID: Oh, tista ' irrepeti l-kwistjoni? UDJENZA: [inaudible]. KEVIN SCHMID: Oh hekk din hija biss kodiċi li għaddej biex tkun tip ta 'fuq is- server sekondarji. Allura dan mhux se jinstabu fil-browser jew xejn. Huwa bażikament dak li għandna huwa li meta l-utent hawnhekk jagħmel pretty ħafna talba tagħhom għal darb'oħra, meta aħna tip ta ' jagħmel talba, aħna qed tmur biex sejħa din il-funzjoni fuq in-naħa server. U allura aħna ser tikseb ir-riżultat lura mill-sejħa dik il-funzjoni. U allura aħna ser biss print lill-utent. Sabiex l-utent ma verament jittrattaw ma 'din il-funzjoni wisq. Kien li l-kwistjoni? Does li jagħmel sens? OK. Kessaħ. Għalhekk għal darb'oħra, nagħmlu dan res.writeHead kollu Ħaġa fejn aħna jistampa l-header. U mbagħad I jispiċċaw ir-reazzjoni billi tagħmel in-numru magic hija fib 45. Mela ejja biss run dan is-server. Hekk jien ser tagħmel xi fib.js. Node Allura issa server fib tiegħi qed taħdem. U allura hawnhekk, jien ser biex jagħmlu waħda minn dawn. OK? Hekk jien biss se ngħid, Curl. Allura li għaddej biex tieħu filwaqt li ftit imma nisperaw dalwaqt se jispiċċaw u se jistampa li 45 Fibonacci numru. UDJENZA: [inaudible]. KEVIN SCHMID: għandu nikseb jsir pretty dalwaqt. Għalhekk għandu jieħu 5-6 sekondi. I do not know dak li biss V8 tkun super malajr, iżda fi kwalunkwe każ, dan huwa eżempju qasir ħafna u skop inelegant ta 'non-trivjali komputazzjoni. Allura wara filwaqt li, ma jiksbu dan. Imma issa, dak li jekk nagħmel l-istess tip ta ' esperiment bħal qabel fejn I jagħmlu żewġ talbiet fl-istess ħin? So here jien ser curl fuq dak l-indirizz, u jien ser tagħmel Curl ieħor. U ftakar, meta għamilna dan għall- torqod server, meta aħna bażikament kieku wara ħames sekondi, huma pretty ħafna kemm daħal lura dritt madwar l-istess ħin. Għalhekk ma kienx partikolarment marbuta. Imma ejja tipprova issa. OK, hekk aħna ltqajna żewġ proċessi tagħna. Ftakar dawk huma l-IDs proċess. Din se tkun ftit skomdi filwaqt li aħna stall. Mela ejja biss jibqgħu hawn u stenna. Allura wieħed minnhom għandu jiġu lura wara simili - OK, hekk wieħed daħal lura. Imma allura għaliex ma t-tieni wieħed terga 'lura għadha biss? Yep? UDJENZA: Il-server ma tistax tagħmel xejn filwaqt li huwa komputazzjoni dak in-numru kbir. KEVIN SCHMID: Dritt. Allura l-rispons kien biss li l-server verament ma tistax tagħmel xejn filwaqt li huwa komputazzjoni dak in-numru Fibonacci. Allura issa I biss ltqajna żewġ affarijiet tiegħi lura. Imma I raden biss biex jaħsbu dwar il-kodiċi ftit aktar, kif huwa xogħol u kollox. Allura din il-funzjoni hawnhekk huwa l-kodiċi li Stajt qal dan is-server jiddekorri meta jirċievi talba ġdida li jkun dieħel. Allura huwa biss se run permezz ta 'dan kodiċi kollu, u allura huwa se jmorru Lura għall-avveniment loop u mbagħad kompli verifika għal avvenimenti ġodda. Allura bażikament dak li aħna jiġri huwa s-server huwa jisimgħu għal affarijiet ġodda. L-ewwel persuna titlob dak 45 hu. We run dan il-kodiċi biex tiġi kkalkulata dan. Dan il-kodiċi jieħu madwar ħames għal sitt sekondi biex jimxu. Imbagħad immorru lura għall-avveniment loop u ċċekkja għal talbiet ġodda. Allura dan huwa eżempju ta 'kif, jekk inti affarijiet li huma hekk imsejħa jikkomputa marbut, jew jużaw ħafna ta 'komputazzjoni, mhux power, iżda simili huma intensiv computationally - I raden ħaġa waħda ngħid dwar dan hija li din il-funzjoni qed tagħmel totalment, għall-parti l-kbira, pretty dritt xogħol utli. Il-ħin kollu li dak callback funzjoni kien għaddej, kien pretty ħafna infiq aktar mill-ħin tiegħu biss computing numru li Fibonacci nth. Iżda aħna biss kellhom wieħed ħajt biex jittrattaw. Fil-mudell Apache, meta żewġ persuni għamlet it-talba biex jiksbu fib 45, aħna kien ikollha żewġ ħjut differenti. U mbagħad xogħol tas-sistema operattiva tal- kien ikun, jew il-livell tal-utent kodiċi li tamministra l-ħjut, kieku stajt kien biex jaqsmu dak fuq il- CPU, jew anke jekk kellek CPUs multipli, jqassmuhom b'mod uniformi madwar l-CPUs hekk li dawn kienu tnejn finish bejn wieħed u ieħor fl-istess ħin. Hekk biss biex turi li inti kif nistgħu sort ta '- u din mhix perfetta total soluzzjoni, iżda xorta ta 'kif nistgħu jagħmlu terga 'lura hawn u tagħmel ftit aħjar. Allura dak li għandi hawnhekk huwa programm imsejjaħ Fib C. U dan bażikament juża ieħor ta 'moduli Node sejjaħ Il-Modulu Proċess Tfal. Hekk stajt inklużi li fil-tip top ta 'prodotti simili nixtieq do a pound jinkludu process.h tifel jew xi ħaġa. Issa I jkollhom aċċess għal din il-varjabbli CP li għandu l-funzjonalità tiegħi. Allura issa dak li qed nagħmel f'dan rispons handler huwa niġri dan il-programm dot mmejla fib 45. Allura dak I ghamilt - u jien biss jmorru pass out ta 'dan il-programm għal ftit - huwa stajt bil-miktub programm C li bażikament tikkalkula l- numru Fibonacci nth. So here biss programm stajt bil-miktub fis-C li tikkalkula din. I jistgħu josservawha, u I tista 'taħdem hija fil-linja tal-kmand. U li għaddej biex tiġi kkalkulata l- Numru 45 Fibonacci. Allura avviż hija biss tieħu pretty ħafna sakemm. I probabilment setgħu użaw sing 03 sa jottimizzaw jew xi ħaġa bħal dik, imma I biss ma simili regolari settings kompilatur. U prints out. Imma issa, dak li jien tip ta tagħmel? Oh sorry, fajl ħażin. So I jagħmlu l-istess għalf ma l-header bħal qabel. Imbagħad I jagħmlu dan cp.exec. Allura dak li dan se tagħmel huwa huwa ser imexxu dan il-programm. Iżda l-mod kif dan jaħdem huwa li mhuwiex ser tistenna għal dak il-programm biex jintemm. Huwa biss bażikament tgħid tesegwixxi dan il-programm. Allura bażikament din it-tip fil- kmand tip fil-pront ta '. U mbagħad, meta inti qed isir ma ' dan, run din il-funzjoni. Allura issa għandna tip ta 'nikseb dan ħaġa sħiħa restawrata tal simili aħna mhux qed jistennew. Does li tip ta 'jagħmel sens? Yep? UDJENZA: [inaudible]? KEVIN SCHMID: Allura dan se attwalment jiftħu proċess ġdid biex tagħmel dan. Allura dan huwa attwalment, f'ċerti modi, ħażen, mhux super-ħażen, imma huwa importanti li jgħidu li dan huwa tip ta ' jmorru lura, fuq naħa waħda, l-Apache mudell fejn nagħmlu ħjut u proċessi għal kull talba jew proċessi għal kull talba. Allura dan huwa tip ta 'analogu għal dak Apache ma. F'xi każijiet, hija biss se jużaw ġdid ħajt, li hija ftit aktar dawl piż minn proċess, iżda Apache tista jispiċċaw forking proċess ġdid li huwa tip ta 'dak li nagħmlu hawnhekk impliċitament billi tagħmel dot fib slash 45. U allura f'dak il-każ, aħna tip ta 'jġarrbu l-istess spejjeż tal-proċessi. Allura dan huwa biss ħaġa waħda li tista 'tagħmel. Iżda biss biex juru dan it-tip ta 'tmexxija. U dan talk huwa biss verament mmirata jippreżentaw dawn it-tip ta 'programmi bħala mod biex juru perspettivi differenti dwar kif disinn servers bħal dik. Allura dan qed taħdem, u allura issa jekk I do dan darb'oħra, I ltqajna żewġ IDs proċess. Ejja biss nitkellmu dwar affarijiet għall-punt out. Allura avviż li dawn qed inkrementali. Li jibred. Minħabba li kien 27,122 qabel. Imma avviż issa, dawn ġew lura għal madwar l-istess ħin. U issa, mistoqsija tajba li jistaqsi dwar għaliex kienet li l-każ huwa, x-xogħol tiegħu kien issa li tip ta 'jagħmel dawn l-affarijiet tip ta 'fair play ma' kull oħra, dawn iż-żewġ każijiet ta ' dot fib slash 45 li I dam jew li dam Node? Min tip ta 'jagħmilha ġust li t-tnejn nikseb tip ta bbilanċjati run time? UDJENZA: [inaudible]. KEVIN SCHMID: Yeah. Allura bażikament, meta I do fib dot mmejla 45 jew xi ħaġa bħal dik, issa huwa tip ta 'sa s-sistema operattiva biex jimmaniġġjaw l-runtime ta 'dawk il-programmi. U issa tista 'skeda minnhom fuq CPUs differenti jew tista 'skeda minnhom. Hija tista 'jaqsmu l-ħin li wieħed CPU gets jew li huma jiksbu li jimxu fuq CPU wieħed. Allura dak hu l-idea wara dan. Does li jagħmel sens għal kulħadd? Allura issa Node mhuwiex verament playing a sehem qsim dawn il-kompiti. OK. Allura li kważi għal eżempji. I biss riedu li juru ħaġ'oħra minħabba ħafna ta 'dan s'issa kien mhux totalment super prattiku f'xi każijiet. I jista 'jimmaġina li ġejjin dar wara dan jitkellmu u xi ħaġa u qal simili, ukoll I tip ta 'ltqajna barra minn dak kellem li I tista 'tagħmel server Fibonacci għal proġett finali tiegħi. Allura hawnhekk biss tip ta 'eżempju wieħed aktar li wieħed jittama li jkun - forsi le, imma forsi - ftit aktar tip ta rilevanti għal proġetti finali u ħsieb li ġejjin għal affarijiet bħal dik. Allura dan huwa chat.js. Allura dan huwa tip ta 'bħal xi kampjun server kodiċi ġenb li inti tista 'tuża biex twaqqaf chat server żgħira bħal inti tista raw fuq l- Facebook Chat jew kwalunkwe. Hekk jien ma tgħid dan huwa simili Facebook Chat, iżda dan huwa tip ta ' bħal tajba - forsi mhux tajba, imma forsi punt ta 'tluq għal chat - tajba server għall-website tiegħek għal proġett finali. Mela ejja nħarsu lejn dak li qed jagħmel. Allura aħna qed jkollna dan ħaġa speċjali fil-quċċata, din var SIO ugwali jeħtieġu Socket.IO. Allura din hija ħaġa oħra li ma attwalment jiġu miġbura mal Node imma int tista 'tinstalla. Huwa modulu Node. Allura huwa biss bħal xi estensjoni Node. SocketIO huwa attwalment verament tip ta 'kessaħ. Huwa ta 'estrazzjoni li bażikament dak ma ikunx jippermetti li inti jkollhom dan il-fluss ta 'komunikazzjoni bejn web browser u web server. Dan għall-parti l-kbira s'issa, aħna kellna dawn malajr ħafna tieni wieħed jew tnejn tieni komunikazzjonijiet bejn web browser u l-web server. Għalhekk huwa bażikament mur google.com, get l-għalf, jibgħat lura, u mbagħad aħna qed isir. Aħna qatt ma jitkellem mill-ġdid sakemm l- tipi utent fil xi ħaġa oħra. Imma dak Socket.IO u tip simili ta ' affarijiet - u SocketIO huwa attwalment wieħed mill-affarijiet li hija mibnija fuq kif WebSocket li huwa tip ta 'disponibbli bħala parti mill-HTML5 - li jippermettilek li jkollhom din djalogu kontinwu. U dan huwa utli ħafna fil-chat server tip ta 'ħaġa għaliex huwa tip simili ta 'djalogu kontinwu fil- xi modi għaliex jekk int chatting ma 'xi ħadd, inti tista' issa biss tibgħat Messaġġ l-pajp, u allura l- server jista 'jibgħat messaġġ l- pajp għall-persuna l-oħra int chat ma. U allura inti jista 'jkollhom dan jiskambjaw bħal dik. Allura dak it-tip ta 'dak SocketIO hija tajba għall. Ir-raġuni li SocketIO juża WebSockets bħala ħaġa waħda hija li fil- Minbarra WebSockets biss sempliċi qodma, Hija wkoll ma xi tricks li bażikament jagħmilha browser kompatibbli. Allura browsers bħall-Internet Explorer sfortunatament ma jsostnux WebSockets dritt barra mill-kaxxa. Għalhekk hija tuża xi tip ieħor ta 'kessaħ pulita affarijiet ma Adobe Flash biex jippermettu inti għandek l-appoġġ browser transkonfinali. Allura li tassew utli. U fil-fatt, naf jien tip ta ' taħdem fuq żmien hawn, iżda CS50 Iddiskuti, qatt rajt xi ħaġa simili, I do not know, vojta hekk u hekk ikun tweġiba għal din il-kariga jew xi ħaġa bħal dik, dik il-karatteristika? Li SocketIO. Allura meta xi ħadd jibda ittajpjar fid- jiddiskutu kaxxa li jagħmlu tweġiba jew xi ħaġa, browser tiegħek ma x'hemm imsejħa fl SocketIO jarmi xi tip ta ' F'każ li tgħid xi ħadd tirrispondi għal din il-kariga. Imbagħad il-server jgħid, OK, dak li nagħmel? Ukoll issa I jkollhom li tgħid dawk guys oħra li huma CS50 Iddiskuti tfittex fuq din il-kariga li xi ħadd tweġiba. Allura dak it-tip ta 'dak SocketIO hu tajba għal, dan it-tip kontinwu ta ' nixxiegħa ta 'djalogu. OK. Allura dak li għandi hawn - u aħna qed biss se jinjora l-array konnessjonijiet għal ftit - dak li nagħmel huwa I do ieħor jisimgħu. Allura dan huwa biss il-mod li Socket.IO hija qal ejja jisimgħu fuq dan il-port. U mbagħad I jagħmlu dan fuq il-konnessjoni. Allura dak biss bażikament Socket IO mod ta 'tgħid, meta nirċievu konnessjoni, nixtieq biex imexxu dan il-kodiċi. U tinnota li minflok rec u res għaddew fil hemm għandi Socket. U din l-idea Socket huwa bażikament dan ħaġa li inti tista 'tikteb u taqra li minn li għandha l-l-utent messaġġi possibilment. U l-messaġġi li inti tibgħat tista 'tmur permezz ta' dak Socket. Does li jagħmel sens? Allura huwa dan ħaġa kontinwa. Allura dak li nagħmel huwa I call Socket.emit. U jarmu tieħu pretty ħafna żewġ argumenti. L-ewwel argument huwa string biss li jirrappreżenta t-tip ta ' Ħaġa int jarmu. Allura għal dan il-każ, stajt użu dan il-messaġġ ġdid sekwenza. U li jinsab biss bażikament qal li it-tip ta 'dan il-ħaġa, dak li jien jibgħat, huwa messaġġ ġdid. Allura inti tista 'tisma għal tipi speċifiċi bħall messaġġ ġdid jew kwalunkwe bl-użu dot fuq. Allura konnessjoni u l-utent mibgħuta hemmhekk, jekk inti tħares lejn fejn aħna sejħa dot fuq, dawk huma kordi oħra li jirrappreżentaw tipi ta 'messaġġi utenti. Allura huwa bażikament inti jista 'jkollhom dan jarmu wieħed minn dawn it-tipi messaġġ, u imbagħad tagħmel xi ħaġa bi tweġiba għal wieħed minn dawn it-tipi ta 'messaġġi Hekk jien li jarmi dan il-messaġġ ġdid. Aħna ser jinjoraw connections.push għat-tieni. Imma mbagħad I say, utent Socket.on mibgħuta. Allura issa huwa tip ta 'bħal meta l- utent jibgħat me messaġġ, nixtieq inti biex imexxu dan il-kodiċi. U tinnota li din il-funzjoni anonima qed jieħu dan il-varjabbli imsejħa data li hija bażikament se li jkollha messaġġ l-utent. Tip Allura issa ejja diskors dwar il-konnessjonijiet array. Allura dan huwa ddisinjat għal klijent chat fejn bażikament kulħadd tip ta 'prodotti fil- l-istess chat room. Allura bażikament, dak li għandna bżonn li jżommu madwar xi array li bażikament jirrappreżenta lill-poplu kollu chat fil F'xi metodi, jekk dan jagħmel sens. Dritt? Għaliex għandna bżonn li jkunu jafu min dawk guys huma hekk nistgħu tibgħathom l-messaġġi li nies oħra tibgħat lilna. Allura dak li dan il-kodiċi ma huwa meta utent jibgħat messaġġ - dak l-tip ta ' l-avveniment - aħna qed tmur biex imexxu dan il-kodiċi. U dak li nagħmlu huwa we run permezz ta 'dan array li għandna imsejħa konnessjonijiet. U pretty ħafna għal kull konnessjoni ħlief il-wieħed li tagħna, li l- dak li dan il-kodiċi jgħid, nibagħtu ġdida messaġġ ma 'dak il-messaġġ mehmuża informazzjoni. Mela jekk tinnota hawn, dak li għamilt meta l-utent fil-fatt jagħmel ġdida konnessjoni hija Stajt miżjud ma 'l- Metodu JavaScript.push, dan huwa bażikament biss qal bħal żid li Socket bħala valur fis konnessjonijiet firxa tagħna. Allura issa meta dan il-kodiċi runs, se tibgħat affarijiet li dawk partikolari konnessjonijiet. Allura dan jista 'jkun bidu tajjeb biex issir chat server jew xi ħaġa simili. U t-tip ta 'ħaġa jibred hija li l- kodiċi li tara hawn simili għal fuq u jarmu u għalf bħal dik hija l-istess tip ta 'kodiċi JavaScript li inti jikteb fil-browser biex jinteraġixxu mal-server. B'tali mod li għalhekk SocketIO huwa tip ta ' pulita u utli fil-mod. Oh u biss ħaġa waħda aktar reali malajr. Kien hemm proġett finali CS50 aħħar sena li bażikament implimenta chat server fil Node.js. Naħseb li huwa Harvardchats.org imma jien mhux - OK. M'inix ċert liema l-URL huwa, iżda I tista 'tibgħat dan out wara. Iżda huwa tip ta 'kessaħ dak inti tista 'tagħmel ma Node.js. So I hope, b'mod ġenerali, inti guys jkollhom sens tajjeb ta 'dak Node.js huwa utli u kif inti tista 'tapplika forsi għall-proġett finali tiegħek. I ser tkun qed tibgħat out ftit aktar riżorsi flimkien ma 'dan. U nirringrazzjak għall ġejjin. Grazzi. [Applause]