KEVIN SCHMID: Hello kila mtu. Karibu CS50 semina juu ya Node.js. Jina langu ni Kevin. Mimi nina CS50 TF. Na mimi nina aina ya kama kweli msisimko kuhusu semina hii. Nadhani Node.js ni baridi sana. Natumaini kwamba semina hii inaweza kutumika mazuri, mimi nadhani, chachu kwa baadhi ya miradi yako ya mwisho kama wewe ni nia ya kutumia kitu kama Node.js. Tutaweza aina ya kuanza semina mbali na tu kuzungumza kuhusu kidogo ya aina ya background scalability mitazamo ya Node.js, na kisha tutaweza hoja ya baadhi ya mifano code. Na mimi itabidi code kwenye tovuti, na unaweza kuangalia code. Na baada ya semina, mimi itabidi kutatua ya majadiliano kuhusu jinsi gani unaweza kuanzisha Node.js kwenye kompyuta yako. OK. Basi hebu kuanza. Kwa hiyo mimi nadhani nataka kuzungumzia ni juu ya vya mtandao, kwa kweli, ya kwanza. Na kuanza mjadala huu, mimi kimsingi na mchoro ambayo ni kutoka vitabu vya kiada kutumika kwa ajili ya CS61, ambayo kimsingi inaonyesha mahusiano ya kati ya mchakato wa mteja, kama mtandao wako browser au kama mteja wako lengo au kitu kama hicho, na mtandao wa kompyuta. Hivyo hii aina ya inaonekana sawa na picha kwamba aliona katika hotuba ya Jumatano ambapo kimsingi tuna baadhi ya mteja mchakato kama Google Chrome. Na kisha hatua moja ni mteja atatuma ombi. Hivyo kwamba wanaweza kuwa na kitu kama vizuri hebu kutembelea, mimi sijui, CS50.net. Hivyo sisi suala ombi hilo. Na haina mtu yeyote kumbuka jina la itifaki kwamba unasema jinsi ombi lazima muundo? Yep. Watazamaji: [inaudible]. KEVIN SCHMID: Hasa. Hivyo ni kama HTTP, sawa? Hivyo kimsingi vipimo kwa ajili ya jinsi ombi hilo lazima kweli kuwa aliweka nje, kwa sababu mwisho wa siku, ombi hilo ni kweli tu kama kamba kwamba kimsingi anasema mimi nataka hii. Na vipimo kwa kuwa ni HTTP. Ili kama itifaki. Hivyo basi server inapata kwamba ombi. Hivyo guys na mtandao wa kompyuta imewekwa katika CS50 appliance. Ni Apache. Na wiki hii wakati kazi juu ya tatizo kuweka saba, wewe utakuwa kweli kazi na kwamba mtandao wa kompyuta. Hivyo server inapata ombi hilo, na kisha ina aina ya scratch yake kichwa na kusema kama vizuri nini mimi kufanya na hili? Hivyo kulingana na kile anaamua kufanya, basi inaweza kuwa na kuwasiliana na baadhi ya aina wa rasilimali hiyo. Na rasilimali ambayo inaweza kuwa mengi ya mambo mbalimbali. Kwa moja, inaweza kuwa tu kama tuli HTML file. Hivyo inaweza tu kuwa kama baadhi HTML kwamba ni kama kwa tovuti yako binafsi. Inaweza kuwa file tuli kama picha au kama movie kwamba wewe. Ingeweza hata kuwa na majadiliano baadhi ya aina ya database kama database MySQL. Hivyo hana daima kuwa na kuwasiliana na rasilimali, lakini katika baadhi ya matukio, naweza. Hivyo basi nini kinaendelea kufanya baada ya kuwa ni kwenda kutuma nyuma majibu. Na majibu kwa hii ni pia maalum kwa HTTP. Hivyo basi mteja anaweza kupokea hiyo. Ni unaweza machozi ni mbali na mchakato yake. Na kisha kupata ukurasa wa mtandao kama Google au CS50.net au chochote akaenda. OK? Hivyo hii ni mwingiliano msingi kwamba tunakwenda kuwa kushughulika na. Na sisi ni pretty much kwenda kuwa kulenga sehemu hii ya mahusiano, server. OK. Baridi. Mtu yeyote una maswali yoyote hadi sasa? OK. Hivyo kama sisi alisema, mtandao wa kompyuta inapata ombi hili HTTP na kisha masuala ya hii HTTP majibu. Na kama kuongelea kabla, CS50 appliance mtandao wa kompyuta ni Apache. Hivyo wakati wewe guys kazi ya P kuweka saba, wewe kwenda kufanya kazi na Apache mtandao wa kompyuta. Hutaweza kuwa kwa kweli kazi na Apache moja kwa moja sana. Wewe aina ya configure Apache kidogo wakati bayana majeshi virtual au v majeshi, na tutaweza kupata na kwamba katika kidogo. Lakini kimsingi, Apache mtandao wa kompyuta kuanzisha kufanya kazi na aina PHP ya nje ya sanduku. Hivyo kinachotokea hasa ni wakati wa kwenda kwa moja ya tovuti yako kama, kusema, ndani jeshi slash index.php au kitu, ni ya browser yako inapeleka kwamba ombi, na kisha Apache ameketi huko na takwimu za nje kwa kufanya hivyo. Na hatua ni kutekeleza kwamba kanuni katika index.php na kisha kutuma mbali nyuma. Hivyo kuna hiyo. Hivyo sisi aina ya kuongea kuhusu hili. Hivyo inaweza tu kutumika file tuli au kukimbia baadhi ya kanuni PHP na kisha suala majibu. Hivyo basi swali la kawaida kwamba wanaweza kuja up ni vizuri, ni jinsi gani sisi kweli kukabiliana na kuwa na watumiaji mbalimbali wakati huo huo? Hivyo kufikiria kama ungekuwa kuandika mtandao server, kama alikuwa na mtandao wa kompyuta kwamba ungekuwa kujaribu kuandika katika kitu kama C au kitu kama hicho, kimsingi unaweza kufikiria kuhusu jinsi huko inaweza kuwa baadhi ya aina ya kificho kwamba watapewa ombi, lakini kisha ina kufanya kazi hii yote juu yake. Inaweza kuwa, kwa mfano, wasiliana na database au kitu kama hicho. Haki? Na kisha bila kufanya aina hiyo ya usindikaji na kisha kurejea majibu. Ili kama high ngazi ya jumla. Lakini si mara moja dhahiri jinsi gani anaweza kufanya hivyo watu ili mbili au hata watu 1,000 anaweza kufanya kazi kwa yako server mtandao wakati huo huo. Hivyo ufumbuzi kwamba Apache anatumia inaitwa nyuzi au taratibu. Hivyo unaweza kuwa na habari za maneno haya kabla ya. Ni sawa kama una si, lakini nadhani tu kuhusu nyuzi au taratibu kama njia kwa mfumo wa uendeshaji au mpango mtumiaji au kitu kama hicho au mtandao wa kompyuta na aina ya kutekeleza nyingi mambo mara moja. Hivyo unaweza kuwa na habari mrefu kama nyuzi ya kunyongwa. Hivyo ni aina ya kama wewe ni aina ya multitasking. Na kama wameweza kuona juu ya sanduku yako mbali, au kitu kama hicho, multicore, nini unaweza kufanya ni unaweza kukimbia nyuzi mbili tofauti juu ya mbalimbali sehemu ya CPU ili waweze kweli kutokea wakati huo huo. Hivyo hii ni kweli nguvu. Na hii ni aina ya Apache ya ufumbuzi wa tatizo hili. Hivyo ni kuna aina ya kama masuala yoyote kwa njia hii ingawa? Hivyo mimi nadhani aina ya aliandika hapo. Lakini wote wawili aina ya matumizi mengi ya kumbukumbu. Ni gharama kubwa sana ya kujenga thread au mchakato. Na sehemu ya hoja ni kwamba tu kama wakati wewe ni mbio C mpango kama kuu yako na kisha kuwa wito kazi nyingine, ambayo ina baadhi ya aina ya stack. Hivyo nyuzi pia zinahitaji kabisa tofauti stack ambayo inaweza kuwa kubwa kabisa. Na kama unaweza kufikiria kuwa na tani ya watumiaji kwenye tovuti yako, ingekuwa mengi ya nyuzi tofauti. Kwamba mengi ya mwingi kwa kusimamia na kudumisha. Hivyo ni matumizi makubwa ya kumbukumbu. Na kisha, pia, hebu sema wewe tu na CPU moja, au hebu kusema kuwa nyuzi zaidi kuliko wewe na wale multicores. Haki? Basi hebu kusema alikuwa nyuzi 10 na wewe tu alikuwa CPUs tano. Wewe aina ya kufanya jambo hili ambapo kubadili kati ya sasa moja kwamba mbio kwa sababu wewe hawezi kukimbia zote 10 kwa wakati mmoja. Na kwamba wito kubadili mazingira. Na kwamba muda wa kweli ina michache ya mazingira tofauti, lakini hebu tu kufikiria kama byte kati ya nyuzi mbili. Hiyo inaweza kuwa pretty ghali kwa sababu kimsingi nini una kufanya ni wewe na kukomesha kile unachokifanya, kuokoa hali ya kwamba mbio thread, na kisha kubadili mahali pengine. Hivyo haina kila mtu aina ya kuona motisha ya nini nyuzi na michakato ya inaweza kuwa ni kidogo bulky? Na je, una swali? OK. Baridi. Mtu yeyote una maswali yoyote? OK. Hivyo kama sisi kuchukua hatua nyuma kwa ajili ya pili, kuna aina ya kama uchunguzi kwamba tunaweza kufanya kuhusu mengi ya maombi ya mtandao. Na kwamba ni kweli kwamba mengi yao kweli si kufanya hivyo muhimu sana kazi ndani ya thread. Hivyo ina mtu yeyote kuanza P kuweka saba wakati wote? Hivyo unataka labda kuelezea baadhi ya sehemu? Je, kazi ya kuingia au kitu kama hicho? Watazamaji: Hapana KEVIN SCHMID: OK. Kamwe akili. Sorry. Lakini kimsingi, katika P kuweka, wewe ni kwenda kuwa maamuzi mengi ya aina ya maswali kwa database kupata baadhi ya habari kutoka kwamba database. Na nini code yako ni kwenda kufanya, nini kwamba mchakato Apache au kwamba Apache thread ni kwenda kufanya wakati ina kuwasiliana na database ni ni aina ya kwenda kuwa wameketi hapo ni kwenda kuwa kusubiri kwa database ya kujibu. Sasa kwamba wanaweza kuonekana kama kwamba a kubwa kukabiliana kwa sababu database ni juu yako CS50 appliance, sawa? Lakini kuna baadhi ya aina ya mtandao utulivu huko kwa sababu sasa mtandao server ina kutoa ombi lake mwenyewe kwa orodha ya kuwasiliana na database na kisha kupata kwamba habari nyuma. Hivyo sasa ni kama vizuri kusubiri kwa ajili yangu, mimi nina kwenda kupata kitu kutoka database na kisha kuna mengi ya kusubiri kinachoendelea. Je, hiyo mantiki? Na kwa baadhi ya mambo ni kuwa mbaya. Kama tu ana, kwa mfano, upatikanaji wa kumbukumbu, si kwamba kama kutisha I / O utulivu. Na wakati mimi kusema, I / O utulivu, nini mimi akimaanisha ni kama aina yoyote ya kama pembejeo pato. Lakini kwa kupata faili juu ya disk, kama kama nilitaka kumtumikia HTML tuli faili kwamba alikuwa kwenye mtandao ukurasa yangu au kitu kama hicho, mimi aina ya kuwa na kuacha kwa kidogo, kusoma faili kwamba kutoka disk, na kisha katika mchakato kwamba mimi nina kusubiri. Mimi si kufanya kazi muhimu. Hii si kweli wa kila kitu, lakini ni jambo la kawaida katika maombi kama P kuweka saba na mengi ya maombi kwamba wewe si kweli kufanya kufikiri sana. Na wakati mimi kusema kufikiri, I mean kama kazi computational. Kazi hiyo computational inaweza kuwa ni kitu kama vile, kusema, alitaka kuandika server mtandao tu computed nth Fibonacci idadi. Hiyo haina sauti kama hasa furaha mtandao wa kompyuta. Kama mimi bila kutarajia tovuti ya kwamba kuwa Facebook ijayo, lakini kwamba ni baadhi ya aina ya kazi computational. Na unaweza kufikiria kuchukua nafasi ya kuwa na aina nyingine ya kuvutia computational kazi. Hebu sema wewe walikuwa kuandika kitu kwamba mahesabu digrii ya kujitenga kati ya watu wawili au kitu kama hicho. Hivyo kwamba hana kuhusisha baadhi ya aina ya hesabu, sawa? Na hata basi, kwa kufanya hivyo bado una kufanya mengi ya kusubiri kwa labda una swala database kuangalia up ambaye ni marafiki na nani au kitu kama hicho. Kwa hiyo, kuna aina ya dhana ya computational kazi. Je, hiyo mantiki? Je, mtu yeyote una maswali yoyote? Oh na mimi nadhani kuweka watumishi mazungumzo huko kwa sababu watumishi mazungumzo ni aina ya mfano mwingine mzuri wa hili. server mazungumzo hana kufanya kufikiri sana. Ni tu ana kusubiri kwa ajili ya watu kutuma ujumbe na kisha wakati hawana, kuwatuma. OK? Hivyo tu kwa kurejea tena, Apache na mtandao sawa watumishi kama kwamba uma a mengi ya nyuzi na michakato ambayo inaweza kuwa aina ya fujo. Kwa hiyo mimi nadhani swali ambayo inaweza kuja na kwamba ni nini tunahitaji kuwa na nyuzi nyingi na taratibu? Nini kama sisi tu alikuwa mmoja? Basi hebu aina ya rangi picha ya jambo hili bila kuangalia kama. Basi hebu kutumia moja tu thread. OK? Hivyo tu kufikiria hii kwa thread moja. Hebu tuseme sisi si kweli kufanya kiasi kwamba muhimu - na wakati mimi kusema muhimu, I mean kazi computational - katika nyuzi wale nyingi kabla. Basi hebu aina ya kuimarisha kila kitu katika thread moja. Basi nini kama tulikuwa na thread moja aina hiyo ya tu unaendelea kuzunguka katika kitanzi na mara kwa mara hundi alifanya kitu mpya kutokea. Hivyo kwa mfano, kitu kipya kilichotokea inaweza kuwa na maana mimi got kitu nyuma kutoka database, au mtu alimtuma me mpya HTTP ombi. Basi hizo aina ya matukio kutokea, sawa? Na kisha nini siwezi kufanya wakati wale mpya mambo kutokea ni katika thread hiyo wa utekelezaji, thread hii moja ya utekelezaji, siwezi kuwaita baadhi ya kanuni kwamba ingekuwa kushughulikia jambo fulani. Hivyo kwa mfano, kama mimi got kitu nyuma kutoka database, mimi naweza kukimbia yangu ndogo sehemu ya ukokotooaji wa kwamba kweli tu huandaa kitu kutuma nyuma kwa mtumiaji. Hivyo gani kwamba aina ya mantiki? Lakini nini ni kweli matokeo ya hili? Haki? Kwa sababu tumekuwa imeandikwa mengi ya kificho kwamba - na mimi nina kwenda tu kuruka mbele katika slides kama kwamba ni sawa. Hivyo kama huna akili, mimi tu kwenda kuchukua hatua nyuma. Hivyo aina hii ya kitu ni aitwaye kitanzi tukio hilo. OK? Na ni aina ya msingi Dhana ya Node.js. Kwa hiyo kile Node.js ni kweli kufanya kama mtandao server ni kuna moja thread kwamba kimsingi ni kwenda kuzunguka katika kitanzi kama wakati aina moja ya chini ya kofia ya Node.js kwamba mara kwa mara kuangalia, je, sisi kupokea mambo mapya? Na kisha itakuwa kukimbia handlers kwamba kuweka up. Lakini swali vizuri kuuliza ni, jinsi gani tunaweza kufanya hili kutokea pamoja na mambo zilizopo? Basi, mimi kuweka mstari wa C code hapa kwamba kimsingi inaonekana kama ni kufungua faili, sawa? Mimi Yeye tu akatoka na albamu. Hivyo nilikuwa na kufungua wake faili mpya. Hivyo njia yetu C kanuni kwa ajili ya kazi - na mimi nadhani sababu mimi waliamua files mara kwa sababu hii ni aina ya kiwango ya I / O kazi tumefanya katika C katika maana kwamba kuna pembejeo pato. Hivyo tunatoa wito kanuni hii kwamba gani f hii wazi. Na kisha juu ya mstari wa pili wetu mpango, tunaweza sasa kazi na f. Hivyo hii itakuwa ni mfano wa kitu hiyo ni kama synchronous au kuzuia kwa sababu juu ya kwamba mstari wa kwanza huko tunasubiri mpaka sisi kupata faili wazi. Kadhalika mstari wa pili, tunajua kwamba sisi wanaweza kufanya kazi kwa f, lakini hii ina maana kwamba kwamba mstari wa pili kweli hawezi kukimbia mpaka mstari wa kwanza ni kosa. Je, hiyo mantiki? Hivyo hii itakuwa ni mbaya kwa kuweka katika tukio handler. Na sababu ya kuwa ni kwamba aina hii ya kusubiri, sawa? Hivyo hii itakuwa kurejea yetu nyuma kwa kitu kimoja. Na sasa sisi bila hata kuwa faida ya nyuzi nyingi au michakato ya sababu tulipata thread moja katika Node.js. Je, hiyo mantiki kwa kila mtu? Watazamaji: Ngoja. Basi nini badala ya? KEVIN SCHMID: Oh, hivyo ndiyo. Hivyo nina kwenda kupata badala. OK. Basi nini kama sisi alikuwa na kitu kwamba inaonekana kama hii? Basi nini kama sasa mimi mwisho f kufungua kidogo? Hivyo mimi nina kupita katika hiyo hoja kama mbele ya watu wawili. Mimi bado upendo wimbo mpya kwamba yeye akatoka na. Lakini mimi nina kupita Jambo la tatu ambayo ni variable hii inayoitwa code. Lakini ni nini code kweli katika muktadha huu? Je, ni kama mara kwa mara C variable? Ni kazi, haki? Na kwamba inaweza kuwa ni kidogo weird kwa sababu Mimi kwa kweli kama sasa kupita kazi katika kazi nyingine. Hivyo mambo kadhaa kutambua kuhusu hili. Moja, mimi si kweli wito code kazi. Hivyo huna kuona kanuni na kushoto paren, paren haki. Mimi nina kupita tu katika kanuni. Na katika C, nini hii ingekuwa kweli kufanya ni nipe pointer kwa kuwa halisi , na kisha hii inaweza kukimbia. Lakini tu kufikiri juu yake kama wewe ni kupita code kwa kukimbia wakati faili kwamba ni wazi. Lakini nini maana ya hii ni kwamba sasa wengine wa mpango wangu ambayo inaweza kufanya mambo mengine, unaweza kuendelea kufanya wengine mambo wakati sisi, si kweli kusubiri, lakini tu nyuma ya vichwa vyetu kwamba wakati kwamba faili wazi, kukimbia kwamba code juu. Je, hiyo mantiki? Na sasa Dhana ya Node.js ni kwamba code katika mambo ya kufanya na f sehemu lazima pretty mfupi na rahisi na moja kwa moja na si kweli kuwa computationally kubwa sana. Ni inaweza kuwa na kufungua faili nyingine, lakini kwamba lazima pia kuwa na pretty haraka kwa sababu ni lazima tu kusema kufanya f mwingine kufungua na kisha kuwaita kanuni hii nyingine. Hivyo tu kuwa wazi kabisa, f wazi kwamba gani mpya Katy Perry wimbo done mp3, ambayo inaenda pretty sana kurudi mara moja. Na kisha tunaweza tu kuendelea kufanya mambo mengine kwa sababu yote sasa f wito wazi haina ni kuwaambia kimsingi msingi f code wazi kufungua faili hii na wakati wewe ni kosa kufungua hii faili au wakati kupata nyuma, kisha kukimbia kwamba kanuni. Lakini haina kweli kuendesha kwamba kanuni. Na alikuwa swali? Watazamaji: You walionekana kuashiria chache mara kwamba kuongeza computationally code kubwa aina ya kuvunja [Inaudible] mfumo wa upepo. [Inaudible]? KEVIN SCHMID: Hilo ni swali kubwa. Hivyo mimi kwa kweli na mfano wa jinsi unaweza kuunganisha computationally code kubwa katika kidogo. Hivyo wakati sisi kupata code mifano, Mimi utakuwa na uhakika wa kuvuta kwamba moja. Ni kwamba OK? Asante. Jina yako alikuwa nini? Watazamaji: Aaron. KEVIN SCHMID Haruni huleta juu sana hatua nzuri, ambayo ni kwamba kama alikuwa baadhi kubwa code computationally katika kufanya mambo kwa f sehemu, wengine wa mpango wangu hawezi kukimbia na hawezi kusikiliza kwa maombi mapya au kitu chochote mpaka wote mambo ambayo ni kumaliza. Basi, ikiwa mimi nina kuandika Node code kwa ujumla isipokuwa sisi kufanya kitu kama mimi nina kwenda zinaonyesha baadaye wakati sisi kuangalia code mifano, mimi na kuwa na uhakika kwamba code yangu haina kufunga up kitanzi hii tukio hilo. Je, hiyo mantiki? OK. Baridi. Hivyo Node.js inatoa mfumo huu kwamba unaweza kujenga tukio haya inaendeshwa seva na. Hivyo ina aina hii ya Asynchronous mashirika yasiyo ya kuzuia I / O maktaba, ambapo kiwango C maktaba kwamba sisi tumekuwa kufanya kazi pamoja, kama kama wewe tu matumizi yao katika njia ile ile ambayo tumekuwa wamekuwa wakitumia yao kwa f kufungua na mambo, wale ni kuzuia kwa sababu kwa kweli kuwa na kusubiri kwa kwamba faili kufungua. Lakini Node.js anatoa hiyo na kimsingi mahusiano ndani ya V8 Google JavaScript injini ambayo ni sababu kwamba Chrome ni kwa kasi katika usindikaji JavaScript kwa sababu ina injini hii V8. Hivyo najua kwamba inaonekana kama mmoja wa wale WWDC mikutano developer kitu ambapo wao tu kutupa rundo la mambo barua ya idadi ya wasindikaji na kusema huu ni ya baridi. Lakini ni baridi kwamba wao walifanya hii kwa sababu JavaScript - au labda kama wewe si ukoo na JavaScript bado kwa sababu sisi si alikuwa na mihadhara juu yake - lakini JavaScript ni kutafsiriwa lugha. Na hii ni hatua muhimu sana. Hivyo ni muhimu kwa mtandao wetu seva ya kuwa na haraka, sawa? Na kama tulikuwa kukimbia tu JavaScript kificho kwamba ilitafsiriwa na tu mkalimani yoyote zamani inaweza kuwa polepole. Hivyo faida Node kutokana na kuwa na hii super haraka V8 mkalimani. Na mimi sijui kama wao jina lake ni kwa sababu V8 kofi katika paji la uso kitu, lakini OK. Hivyo nimekuwa tayari baadhi ya mifano kwa hii. Baada ya semina hiyo, mimi nina aina ya kwenda majadiliano juu ya jinsi gani unaweza kupata Node kuweka juu, lakini kwa sasa, mimi tu aina ya kutaka kutembea kwa njia ya baadhi ya mifano code. Hivyo kama unataka kufuata pamoja, kila chanzo code inapatikana huko. OK? Basi, mimi itabidi kuondoka URL hii up kwa kidogo. Na basi mimi nina kwenda tu kwa kubadili ndani ya wastaafu. Ni kila mtu mzuri na URL hili? Hivyo nina kwenda kubadili juu ya kwa terminal wangu hapa. Hivyo hapa ni kificho kwamba Nina kwa leo. Kwa nini si sisi kuanza na simpler.js faili? Jambo jingine ni kwamba yote haya code ni kwenda kuandikwa katika JavaScript ambayo wanaweza au inaweza kuwa familiar with. Nadhani mambo ya wanandoa ni kwamba mengi ya JavaScript code ni aina ya syntax na muundo ni sawa na C, hivyo unaweza aina ya pick it up kama wewe kwenda pamoja. Nimejaribu kuandika mengi ya kuanzia kanuni kwa ajili ya hili katika njia ambayo ni sawa na C hivyo kwamba ni kidogo zaidi someka. Lakini kama sisi maendeleo, mimi utakuwa kuonyesha baadhi ya ziada sifa za JavaScript kwamba ni aina ya baridi. Lakini hebu tuangalie mpango huu sampuli. Nadhani kila kitu ni kupunguza huko mbali. Mimi tu anaenda kurekebisha kwamba kweli haraka kama kwamba ni OK au la. Sijui jambo hili ni kwenda kufanya. Ni kidogo bora? Je, unaweza kuona var na stuff? OK. Hivyo mstari wa kwanza ni kama JavaScript toleo la variable tamko hilo. Hivyo tu kuonyesha kitu gani hii kuangalia kama katika C. Hivyo hii ni kama mimi kusema index sawa na tatu au kitu kama hicho. Hivyo sikuwa kutaja aina. JavaScript gani kuwa na aina, lakini ni sana dynamically typed katika asili, hivyo hakuwa na kutoa aina yoyote ya aina juu yake. Hivyo tu ana var. Hiyo ni kama kutofautiana. OK? Na mimi nina wito HTTP hii kutofautiana. Na upande wangu wa kulia mkono, nina kujieleza kwamba nataka kuweka katika HTTP. Na hii anasema zinahitaji HTTP. Hivyo hii ni aina ya sawa pamoja. Ni kidogo zaidi kama nguvu zaidi kuliko ni pamoja na kwa maana ya kwamba ni pamoja na ingekuwa tu nakala na kuweka kichwa faili kwa ajili ya kazi prototypes au chochote na ufafanuzi aina. Lakini zinahitaji ni kweli kwenda kupata yetu code. Hivyo unaweza kufikiria ni kama kuagiza baadhi ya kanuni. Hivyo mahali fulani katika Node.js moduli mfumo au chochote, wote wanayo hii HTTP server code hivyo mimi nina tu kuchota kwa ajili ya yangu mwenyewe matumizi binafsi katika mpango huu. OK? Hivyo basi mimi na kazi hii kwamba nimepata maandishi. Na taarifa sikuwa na kutaja kurudi aina au aina ya hoja tena. Hivyo aina ya huru typed katika kwamba aina ya akili. Hoja mbili kwamba inachukua katika, ombi na majibu. Hivyo kwamba ni conceptually aina ya kama familiar na picha kwamba tulikuwa juu ya screen kabla kwa sababu sisi kupata ombi hili kwamba sisi na kutoka kwa mtumiaji. Na kisha sisi kuwa na jibu kwamba tunaweza kuandika mambo ya. Hivyo mstari wa kwanza wa hii haina res.writeHead 200 na kisha hii aina ya maudhui Nakala wazi. Basi hebu kipande hii mbali kidogo. Hivyo basi tu kuzingatia res.write kwa kidogo. Hivyo kuandika ni kimsingi, na kuandika kichwa, ni baadhi tu ya njia na aina ya kuandika mambo ya majibu. OK? Hivyo kuandika kichwa, kama mtu yeyote anakumbuka kutoka HTTP hotuba, je, guys kumbuka headers katika juu ya jambo HTTP? Hivyo kwa nini si mimi tu demo headers halisi haraka. Ingekuwa kwamba kuwa na manufaa? Au lazima sisi tu aina ya - OK. Uhakika. Hivyo wakati browser yako inakwenda google.com au kitu kama hicho, kuna kweli kidogo zaidi - hii ni kama siri - kuna kama taarifa kidogo zaidi kuja kwa njia ya bomba kuliko tu search kidogo na kila kitu. Hivyo kuonyesha hii, mimi nina kwenda kutumia mpango ujulikanao Curl. OK? Hivyo hii ni kitu ambacho unaweza kukimbia wakati yako Mac OSX mstari amri au katika appliance au chochote. Na hivyo kama mimi Curl HTTP google.com, Mimi kwenda kuona HTML. Na hii ni, katika haki, tu HTML kwamba aina ya anakwambia kuelekeza kwa www kama browser yako haina moja kwa moja kushughulikia redirection. Hivyo hii ni HTML, lakini nina kwenda na kuongeza Curl hyphen hii mimi bendera. OK? Na hii ni kwenda kuonyesha mimi headers. Hivyo hii ni pia habari kwamba anakuja kupitia wakati mimi kupata majibu hii. OK? Hivyo saa ya juu, unaweza kuona hii HTTP 301 hoja ya kudumu. Na hii ni aina ya muhimu kwa sababu hii ina maana ya hali ya code. Hivyo 301 hapa ni hali ya kanuni, ambayo kimsingi ni tu integer kwamba anasema browser au mtu yeyote ni kusoma hii, kama wewe kujifanya kuwa wewe ni browser na wewe ni kuona hii, kimsingi sasa kama ukiangalia kuwa na wewe kuona 301, unajua mimi na kufanya kitu maalum kwa kuzingatia 301, au kitu maalum kilichotokea msingi 301. Hivyo anasema wakiongozwa kudumu. Na kisha, kimsingi, tuna kundi la thamani jozi muhimu. Ili tuweze kupata eneo ni www.google.com. Na kisha aina ya mambo haya mengine yote, lakini kimsingi, nini eneo ni Usemi huu ni wa eneo mpya ni katika www.google.com. Hivyo sasa kama wewe kwenda google.com, itabidi aina ya kuona kisakuzi aina ya blink kwa ajili ya pili na kisha kuelekeza ninyi haki ya nyuma www.google.com. Hivyo majibu unaweza vyenye haya headers. Na michache ya mambo ya uhakika nje. Basi hebu kusema sisi walikuwa kweli mafanikio katika kutembelea ukurasa wa mtandao. Hivyo basi mimi kwenda - nini tovuti nzuri? Mimi nina mbaya katika fikra za nzuri Nje papo hapo. Watazamaji: Wikipedia. KEVIN SCHMID: OK. Hebu kufanya Wikipedia. Hivyo hapa nilikuwa wakiongozwa. Oh kusubiri. Mimi? Ndiyo, mimi. OK. Basi, mimi got kufanya www. Hivyo nina kwenda kufanya www. Na kama unaweza kuona, hapa HTML wote kwamba browser bila mchakato kwa Wikipedia. Lakini kama mimi kuweka scrolling up hapa, kile utaona juu - wow, kuna mengi ya HTML juu ya Wikipedia - lakini nini siwezi kuona juu hapa ni hii code 200 hali kama kinyume na 301 niliowaona hapo awali. Na taarifa kwamba ina nzuri kirafiki OK karibu na hiyo. Hivyo hii ni kama hali ya nzuri code. Je, kwamba idadi 200 kuangalia familiar? Ndiyo kwa sababu wakati mimi simpler.js, Niliandika 200 huko. Hivyo hiyo kimsingi akisema kuwaambia browser au mtu yeyote ni kujaribu kupata hii kwamba walikuwa na mafanikio. Au kwamba aina ya kama sisi walikuwa na mafanikio pia. Na kuna aina hii ya syntax maalum katika Javascript kwa ajili ya kutangaza ramani ya funguo hizi kama aina ya maudhui na maadili haya kama Nakala wazi. Hivyo kama wewe kuangalia na majibu kwamba sisi got nyuma kutoka Wikipedia kabla ya, - Mimi nina kwenda kujaribu kitabu juu kidogo kwa kasi - una funguo hizi kama server na maadili haya Apache. Basi nimepata funguo na maadili. Na unaweza bayana hii katika Nodi nini kutuma nyuma. Hivyo hii ni kweli ni aina ya, katika baadhi ya njia, na katika baadhi ya njia siyo kweli, lakini ni ngazi ya chini kidogo kuliko PHP kificho kwamba unaweza kuwa na kuandika kwa P kuweka saba kwa sababu PHP na Apache aina ya kutunza baadhi mambo haya kwa ajili yenu. Katika PHP, unaweza kupuuza default tabia na kuandika headers yako mwenyewe. Lakini kwa ajili ya hii, sisi kupata kuandika nje headers yetu wenyewe. Hivyo gani kwamba line mantiki kila mtu, line kuandika kichwa? OK. Kutisha. Hivyo basi nini mimi ni mimi mwisho majibu na kusema hello dunia. OK. Lakini hiyo ni kazi aitwaye ombi handler. Basi sasa mimi kwa kweli kuwa na aina ya kufanya kitu na kazi hii, sawa? Hivyo hapa nini mimi ni kuna hii line ambayo haina var server usawa HTTP.create server, na kisha mimi kupita katika ombi handler. Hivyo hii ni aina ya Node njia ya kujenga server. Na taarifa kwamba mimi nina kupita katika ombi handler. Hivyo hii ni kuwaambia createServer kazi kwamba mimi nataka kufanya mimi server, na wakati kwamba server inapata majibu, mimi haja ya wewe wito huu kuomba handler kazi. OK? Ili line pretty much alimaliza haki mbali. Hivyo var server line unafanyika baada ya kufanya hivyo pretty much. I mean, ina kuanzisha baadhi ya ndani hali ya kujua kwamba wewe ingekuwa wito kwamba ombi handler kazi, lakini si kwenda kukaa huko na kusema ina user alimtuma mimi ombi bado? Ina user aliyenituma ombi bado? Hivyo hana kuzuia. OK? Basi nini hii kufanya ni kimsingi sasa maduka pointer na kanuni hii, hii ombi handler kazi, na kisha inakwenda kwamba kanuni wakati mtu hufanya ombi. Na kisha sisi kufanya server.listen. 1337 kuna pretty holela. Sikuwa na sababu hasa kwa kuokota idadi hiyo. Ni kabisa random. Lakini kwamba tu bayana bandari. Hivyo watumishi wengi mtandao utaona kwamba wao kutumia bandari 80 kwa sababu hiyo ni aina ya kama mkataba. Basi, ikiwa mimi kwenda kitu kama, Mimi sijui, Wikipedia.org, na mimi kuweka koloni 8 - oh wow, huwezi kuona kwamba. Mimi nina sorry. Lakini ikiwa ninazifanya Wikipedia - Mimi itabidi kuandika hapa tu ili ni wazi juu ya kamera. Lakini kama mimi kuchukua hii katika browser ni pamoja na koloni 80, kwamba unasema kwenda Wikipedia.org katika bandari ya 80. Hivyo ni kama jinsi Umoja wa Mataifa ina bandari nyingi kama ambapo unaweza meli mambo ya aina ya. Hivyo ni kama kwenda fulani mahali kwenye seva hii. OK. Hivyo mimi tu waliamua 1337. Kuna mbalimbali mzima wa idadi kwamba unaweza kuchukua. Hiyo ilikuwa si kabisa maalum. Lakini nini mimi kwenda kufanya sasa ni mimi nina kwenda kukimbia Node. Hebu kweli kuingia kwamba wanandoa mistari chini ili uweze kuona. Mimi nina kwenda kufanya Node, na mimi nina kwenda kukimbia simpler.js. Na tutaweza majadiliano juu ya jinsi ya kupata Node kuanzisha katika kidogo. Lakini sasa ni kukimbia tu server. Kwa hiyo, jambo moja tunaweza kujaribu ambayo inaweza si kuwa ya kusisimua ni tunaweza kweli kujaribu kupata hiyo katika Curl. Hivyo siwezi kufanya Curl, na yangu mashine ni jeshi la ndani. Utapata pia kuona hii imeandikwa kama hii wakati mwingine. Mitaa jeshi na 127.0.0.1 ni aina ya kama kompyuta yako ya nyumbani. Hivyo ni kama kuzungumza na kompyuta yako mwenyewe. OK. Na kisha naweza kusema 1337. Basi, ikiwa mimi kukimbia line hii ya kificho, ni anasema hello dunia. Na kama nilitaka kuona kwamba mambo ambayo alikuwa aina ya maudhui Nakala wazi au chochote, mimi naweza hata kuweka hii hapa. Na taarifa kwamba haina kusema OK. Na mimi kuwa Nakala wazi. Na kisha kuna aina ya yote haya mengine mambo ambayo Node kuongeza katika pale kwa ajili yangu. Hiyo si super muhimu. I mean, kuna baadhi ya aina ya kiufundi masuala ya wakati huo ni aina ya baridi kwa majadiliano juu, lakini tu kuonyesha wewe, mimi pia kuwa na uwezo wa kubadili hizi kote. Hivyo siwezi tu kuongeza rundo ya mambo kama hayo. Na kisha sasa, kama mimi kuangalia katika wangu pato, itakuwa hiyo. Hivyo headers haya yana maana mambo fulani kwa browsers na mambo kama hayo. Na headers unaweza kimsingi kuwaambia kisakuzi jinsi ya kukabiliana na kitu. Kama umefanya milele habari za kuki kabla, au kama umefanya aliyewahi kuwa annoyed na ukurasa wa mtandao kuweka cookies, au akageuka juu ya kuzuia cookie au kitu kama hicho. Unaweza kweli kuweka cookies katika headers haya. Basi kuwaambia kisakuzi jinsi ya tabia katika baadhi ya kesi. OK. Ili kwamba ilikuwa simpler.js. Je, mtu yeyote una maswali yoyote juu ya kwamba chanzo code faili? OK. Baridi. Basi hebu kuondoa r na kwamba na kuangalia simple.js. Hivyo hii ni pretty much mpango huo. I just aliandika tofauti kidogo kwa sababu nilitaka aina ya kuonyesha baadhi ya sifa za JavaScript. Hivyo taarifa kuwa ombi handler kazi umetoweka kabisa. Oh yep, je, una swali? Watazamaji: Yeah, hoja kwamba ni kupita kwa kuwa kazi, ni mambo gani hayo? KEVIN SCHMID: Basi hizo JavaScript vitu. Katika nyaraka Node.js, ni kimsingi anasema mbinu gani ni inapatikana juu yao. Sisi tu kutokea kwa kuwa upatikanaji wa njia hii inaitwa kuandika kichwa na mwisho na mambo kama hayo. Lakini kuna rundo zima mbinu zaidi. Na kwa mfano, kama mmoja wao hasa juu ya rec, unaweza kufanya kitu kama rec.method ambayo itakuwa kuwaambia kama ni HTTP kupata au Maombi HTTP baada na mambo kama hayo. Hivyo kuna kila aina ya mbalimbali mali, lakini wao ni wote JavaScript vitu, na wao tu kazi masharti yao kwamba unaweza kuandika mambo ya. OK? Hivyo taarifa kuwa ombi handler ni gone kabisa. Lakini kificho kwamba nilikuwa katika ombi handler bado yupo huko. Mimi bado na res.writeHead hii na mimi bado res.end hii. Na nini hii ni mfano wa katika JavaScript ni wazo hili la bila majina kazi. na bila ni kama jina kufaa kwa sababu ni halisi haina na jina. Hakuna ombi kazi handler huko. Hana jina, lakini bado ni kuchukua hoja. Hivyo mimi bado got rec na res. Na mimi bado code. Hii ni kikamilifu faini JavaScript code. Hivyo siwezi kutangaza kazi bila wazi kutoa jina. Ni utata kidogo mara ya kwanza. Kuna baadhi ya mambo kama muhimu kwamba unaweza kufanya na kazi hizi bila majina. Je, mtu yeyote una maswali yoyote juu ya hili, au ni OK tu, kwa sasa, aina ya kukubali tu kwamba kufanya kitu kimoja? Yep? Watazamaji: Je, kazi ya kwanza darasa katika JavaScript? KEVIN SCHMID: Wao ni kwanza darasa katika JavaScript. Na tu kujua kwamba dhana hizi ya kupita katika kazi bila majina kama hii yanahusu JavaScript kwamba wanaweza kuandika katika mradi wako wa mwisho kwa kivinjari pia. Hivyo kwa mfano, katika JavaScript katika browser yako, pia ni kiasi fulani tukio inaendeshwa kwa maana kwamba yale itabidi na ni wakati mtumiaji Clicks hii kifungo, nataka wewe kukimbia kanuni hii. Hivyo ni aina moja ya mawazo ya upande wa mteja wakati click mouse au panya juu ya baadhi ya picha juu yako mtandao ukurasa, kukimbia kanuni hii. Zinazoweza kuomba kwa watumishi. Basi hiyo ni aina ya kusisimua kama sababu JavaScript ni kweli watu kufaa au baadhi nadhani ni lugha zinazofaa kwa aina hii ya dereva tukio server kwa sababu una kazi hizi bila majina. Una wazo zima la hii code asynchronous. OK. Mtu yeyote una maswali yoyote? OK. Ili kwamba ilikuwa simple.js. Hivyo hebu angalia saa moja zaidi au wanandoa zaidi. Hivyo hii ni sleep.js. Hivyo ni mtu yeyote ukoo na C kazi usingizi? Kutoka labda moja ya mihadhara mapema au kitu kama hicho? Hivyo kimsingi unaweza kupita katika Nadhani idadi ya sekunde au kama unatumia U kulala idadi ya milliseconds au nanoseconds. Na kimsingi mpango wa kuacha tu mbio kwa kuwa kiasi cha wakati. Haki? Na kisha itakuwa kuamka hatimaye na basi itabidi kuendelea kuendesha mpango. Hivyo server aina hii ya anatoa hisia ya kulala. Hivyo taarifa kwamba sisi kuwa sawa res.writeHead 200 kwa kichwa kama kabla, lakini basi sisi ni wito huu kazi kuitwa kuweka timeout. Kuweka timeout pia ni inapatikana katika kivinjari chako Google Chrome au Safari au chochote. Na kimsingi nini ni kufanya hapa ni ni kuchukua katika kazi. Ilani, tena, ni bila majina kazi. Basi hiyo ni aina ya baridi kwa sababu tuko kutumia kazi bila majina ndani ya kazi bila majina ambayo inaweza kuwa ni kidogo weird. Lakini ni kuchukua kazi hiyo, ambayo ni kimsingi akisema - na kwa njia hii kazi ni katika milliseconds 5000, nataka wewe kutekeleza kazi hiyo ambayo tu kuishia kukabiliana na anaandika hey. Hivyo hii inatoa hisia ya kama kulala, lakini njia hii kwa kweli kazi ni tutaweza kukimbia kwa njia ya mstari huu haraka sana. Sisi ni kuandika tu kitu. Na kisha tutaweza pia kukimbia kwa njia ya mstari huu haraka sana. Hivyo sisi ni si kweli kwenda kusubiri sekunde tano. Sisi ni kwenda tu kukimbia kanuni hii papo hapo. Na kisha kuna, tena, hii kidogo tukio kitanzi kwamba sasa ina jambo hili madaftari kwamba kimsingi ni mara kwa mara kwenda kuzunguka katika mzunguko na kuangalia saa katika moja thread na kusema, ina sekunde tano kupita bado? Na kisha wakati anaona kwamba pili mkono ameenda kama sekunde tano au chochote, basi ni anaamka na anasema, oh, je, mimi na kwa nini? Oh mimi kuwa na kukimbia kanuni hii. Na kisha kwenda kukimbia res.end hey. Hivyo tena, sisi ni kamwe kusubiri hapa. Hivyo si kwamba kanuni hii ndani ya kazi hii ni kwenda kuchukua tano sekunde kukimbia. Kanuni hii inakwenda pretty much mara moja, angalau jamaa na sekunde tano kwamba sisi walikuwa wanazungumza hapo awali kabla ya. Hivyo tu kuonyesha hii katika hatua, Mimi siwezi kufanya Node.sleep.js. Na alifanya mimi rabishia? Ikiwezekana. Sorry. Hebu kuona nini tunaweza kufanya kwa kurekebisha hii. OK. Hivyo dhahiri kutumia Node.js. Mimi tu kidding. OK. Sec moja tu. OK. Mimi najua ni nini. Hivyo suala ni kwamba katika tab yangu nyingine hapa, mimi nilikuwa mbio Node tayari juu ya anwani hiyo, 1337. Hivyo makosa kwamba hii kurusha, kama sisi kuangalia katika ni kweli kwa karibu, ni anwani katika kutumia, EADDRINUSE. Hivyo nilikuwa tayari kutumia 1337 hapa. Basi, ikiwa mimi kufunga off hii, na kisha mimi sasa kujaribu kukimbia hii, hopefully, kila kitu itakuwa vizuri. OK. Hivyo unaweza tu na jambo moja aina ya kusikiliza kwenye bandari mara moja. Ufumbuzi mwingine ingekuwa kwa ajili yangu tu hariri mpango huo na kufanya ni kuwa kama 1338 au kitu kama hiyo. Lakini sasa usingizi ni mbio. Basi hebu kweli kujaribu nje katika kisakuzi wakati huu kwa sababu ni unexciting kidogo kuona katika terminal. Hivyo mimi nina tu kwenda kwa kuwa 127 anwani tena katika 1337. Na kama unaweza kuona ni - Mimi sijui kama unaweza - lakini yangu browser kuchukua sana, kwa muda mrefu sana wakati na shehena au kama sekunde tano. Na kisha baada ya kuwa, hatimaye kumalizika majibu. Na huwezi kuona ni kwa sababu jambo ni wakiongozwa juu ya kidogo, lakini kama mimi kufanya hii ndogo kidogo, unaweza kuona inasema hey. Basi, mimi got hey, lakini baada ya sekunde tano. Na inaweza kuwa safi kidogo kuona hapa juu ya terminal, hivyo mimi nina kwenda kufanya - hebu kufanya katika hapa - hebu kufanya Curl anwani kwamba tena kwa 1337. Na mimi tu aina ya kuwa na kukaa hapa kwa sekunde tano. Lakini taarifa kwamba server wanaweza kukubali majibu mpya. Hivyo Prints hey. Na demo hii, kimsingi nini Mimi siwezi kufanya katika tab hii nyingine - hivyo hebu sema mimi kufanya hivyo katika tabo nyingine, Mimi nina kwenda kufanya Curl na sawa kitu tena. Na mimi nina kwenda kujaribu kick haya guys mbali kwa wakati mmoja. Hivyo nina kwenda kwa kufanya hivyo, na mimi nina kwenda mbio juu ya hapa na mimi nina kwenda kufanya hivyo tena. Na hebu kufanya hivyo ili unaweza kuona wote wawili. Hiyo moja iliyochapishwa hey na kwamba moja kuchapishwa hey njia yote - hebu kufanya majaribio tena. Kwa kweli, hebu kutumia hii hila, kama kwamba ni sawa. Hivyo nina kwenda kwa kutumia kitu shell kwamba inaruhusu mimi kimsingi kukimbia nakala mbili ya mpango huu katika sambamba. Hivyo utakuwa kuendesha programu kwanza na programu ya pili katika sambamba. Hivyo sasa kama mimi vyombo vya habari kuingia, itakuja kufanya ombi hilo pretty much mara moja kwa wakati mmoja. Basi hebu kutoa hii risasi. Hivyo sasa taarifa inasema michakato miwili. Na kama wewe ni curious, kwamba 27,000 Idadi ya kimsingi ni mchakato ID. Na kisha taarifa, wao kuchapishwa hey kwa wakati mmoja. Haikuwa kama tulikuwa na kusubiri tano sekunde kwa moja na kisha baada ya sekunde tano baadaye kupata pili. Basi hiyo ni aina ya, katika baadhi ya njia, ni si kweli ushahidi, lakini ni ushahidi Intuitive kwamba siyo tu kama kusubiri sekunde tano na kuzuia thread nzima. OK baridi. Basi Haruni aliuliza swali awali kwamba mara, pamoja na nini kama hatuna kufanya kitu - Yep? Watazamaji: Ngoja. Jinsi ni kwamba tofauti na printf buffer, ingawa? Je, si ni moja kwa moja kufanya hivyo? Kwa nini sisi kuwa na wasiwasi kuhusu hilo? KEVIN SCHMID: Oh, unaweza kusema kwamba wakati mmoja zaidi? Watazamaji: Je, si kama printf buffer kufanya halisi kitu kimoja? KEVIN SCHMID: printf buffer? Watazamaji: Yeah. OK. Hakuwa katika moja ya Quizzes walikuwa kuzungumza kuhusu jinsi kama haki printf kitu fulani na kisha kuwa ni pause moja pili, na kisha kuwa ni kitanzi kumi mara kwa mara, kutakuwa na kusubiri sekunde kumi na kisha printf kila kitu pamoja? KEVIN SCHMID: Oh, OK. Watazamaji: Je, ni kufanya hivyo kitu kisha katika kesi hii? KEVIN SCHMID: Kwa hiyo swali mara kimsingi katika moja ya Quizzes wa zamani au kitu, kulikuwa na swali kwamba kimsingi kama wewe kusema magazeti f 10 mambo kwa wakati na kisha akalala kama katika mchakato wa uchapishaji walio nje, mwishoni kwa sababu fulani, ingekuwa dampo tu wale wote nje ya screen. Hivyo kuna aina mbili tofauti dhana hapa. Kwa hiyo mimi nadhani jambo moja ni kwamba, katika hili kesi, sisi ni kushughulika na mbili tofauti aina ya watu kuuliza server kwa ajili ya mambo wakati huo huo. Na sababu kwamba printf aina ya kusubiri kama kuwa na madampo yote nje mara moja ni zaidi kuhusiana na jinsi printf aina ya - hivyo njia printf ni kweli kutekelezwa ni kimsingi ina kuzungumza na mfumo wa uendeshaji wa kuandika kwamba mambo ya console. Hivyo hataki kufanya yote ya kwamba mambo mara moja wakati kusema printf baadhi kamba kwa sababu ambayo inaweza kupata gharama kubwa kama ana kufanya hivyo kila wakati. Hivyo kama wewe kufanya printf hey, mpango wako wanaweza kweli magazeti kwamba mara moja kwa console. Ni anaweza kusema, OK, niliandika yake. Na kisha aina ya kusubiri kwa ajili yenu kwa kutoa ni kidogo zaidi kabla ya kweli kuandika nje kwa console. Hivyo sababu kwamba ilikuwa ni kesi - na ni aina ya unrelated kulala - ni kwamba usingizi ilikuwa ni aina ya tu sindano huko kuonyesha ukweli kwamba haina kuandika ni synchronously. Lakini sababu ya kwamba ni haki utendaji ili huna kwa kufanya mawasiliano kwamba wengi kwa mfumo wa uendeshaji. Lakini hapa, nini sisi ni kweli kujaribu kufanya na jambo hili usingizi ni show tu kwamba wakati tuna watu wawili kutembelea tovuti hii, si kwenda kuweka yao katika line ambapo ni kwenda kusema Mimi na kukusaidia, na kisha wakati mimi nina kabisa kumaliza kusaidia baada ya haya sekunde tano, basi mimi nina kwenda kuhamia kwenye mtu mwingine. Hivyo ombi mtu wa kwanza haina tie up kuwa kitanzi tukio kama kwamba hufanya akili. Lakini hapa ni kweli mfano ya kitu ambacho kufunga up kitanzi tukio hilo. Hivyo hapa ni kazi ya kutisha compute nth Fibonacci. Ni literally njia mbaya unaweza compute nth Fibonacci idadi. Na hii ni kweli tu kwa kutambua hii imetoka wapi, kuna kweli - I mean, unaweza kujaribu kwenda kutafuta yake - lakini kuna kama blog muda mrefu sana baada ya kuwa mtu aliandika. Ni kama moja ya mambo hayo Reddit. Lakini mtu kukosoa Node.js, na walitumia mfano huu. Basi, mimi aina ya alitaka kuonyesha wawili tu mitazamo tofauti tu kupata uelewa wa dhana nyuma ya mambo haya mawili. Lakini hii ni mteule kama tu kutisha, computationally horribly ufanisi njia kubwa ya compute nth Fibonacci idadi. Hivyo tu kama upande note, kwa nini ni ni ya kutisha kama katika njia moja? Yep? Watazamaji: Sema kuanza nje na 1,000. 1,000 kugawanyika katika 999 na 998. Kila moja ya hii kugawanyika katika mambo mawili. Kila moja ya hii kugawanyika katika mambo mawili. KEVIN SCHMID: Haki. Watazamaji: njia zote chini. KEVIN SCHMID: Hasa. Hivyo tu kurudia kwa kamera, kama mimi kuwaita fib juu ya kama 1,000 au kitu kama hiyo, ni wazi si chini ya au sawa na moja hivyo mimi nina kwenda kwa kwenda kesi hii mwingine, na kisha mimi nina kwenda kuwaita fib 999 pamoja na fib 998. Na kisha sana pretty yote ya kazi fib 999 gani ni aina ya katika ngazi hii. Kama kwenda chini, ni hata zaidi redundant zaidi ya kwamba, lakini kama wewe tu kufikiri kompyuta fib 998 anapata sisi pretty karibu na fib 999. Hivyo tunatakiwa kuwa zaidi kidogo wajanja kuhusu jinsi sisi aina ya kutumia tena haya, lakini sisi siyo Reusing mambo hayo yote. Hivyo unaweza kufikiria haya makubwa, mkubwa mti tu kwamba kutisha. Lakini anyway, OK. Ili kwamba ilikuwa fib. Ni tu inachukua muda kukimbia. Yep? Watazamaji: [inaudible]. KEVIN SCHMID: Oh, unaweza kurudia swali? Watazamaji: [inaudible]. KEVIN SCHMID: Oh hivyo hii ni kanuni tu kwamba kinaendelea kuwa aina ya juu ya server upande. Hivyo hii si kwenda kupatikana katika browser au kitu chochote. Ni kimsingi nini sisi ni kwamba wakati user hapa hufanya pretty much maombi yao tena, wakati sisi aina ya kufanya ombi, sisi ni kwenda kuwaita kazi hii upande wa server. Na kisha tutaweza kupata matokeo nyuma kutoka wito kazi hiyo. Na kisha tutaweza tu magazeti ni kwa mtumiaji. Hivyo user si kweli kukabiliana kwa kazi hii sana. Ni kwamba swali? Je, hiyo mantiki? OK. Baridi. Hivyo tena, sisi kufanya res.writeHead hii yote kitu ambapo sisi magazeti nje header. Na kisha mimi mwisho majibu kwa kufanya Idadi ya uchawi ni fib 45. Basi hebu kukimbia tu seva hii. Hivyo nina kwenda kufanya fib.js. Node Hivyo sasa fib server yangu ni mbio. Na kisha hapa, mimi naenda kufanya moja ya haya. OK? Hivyo mimi nina kwenda tu kusema, Curl. Hivyo ni kwenda kuchukua muda kidogo lakini hopefully hivi karibuni itakuwa kumaliza na itakuwa magazeti kuwa 45 Retracement idadi. Watazamaji: [inaudible]. KEVIN SCHMID: Ni lazima kupata kufanyika pretty hivi karibuni. Hivyo ni lazima kuchukua sekunde tano hadi sita. Sijui hiyo ni V8 kuwa super haraka, lakini katika hali yoyote, hii ni short sana mfano na kwa makusudi inelegant ya mashirika yasiyo ya yasiyo na maana hesabu. Hivyo baada ya muda, haina kupata hii. Lakini sasa, nini kama mimi kufanya watu wa aina hiyo majaribio kama kabla ya ambapo mimi kufanya maombi mbili kwa wakati mmoja? Hivyo hapa mimi nina kwenda Curl juu ya anwani hiyo, na mimi nina kwenda kufanya mwingine Curl. Na kumbukeni sisi alifanya hivyo kwa kulala server, wakati sisi kimsingi alikuwa ni baada ya sekunde tano, wao pretty sana wote akarudi haki kote wakati huo huo. Hivyo ilikuwa si hasa amefungwa up. Lakini hebu jaribu sasa. OK, hivyo tulipata taratibu zetu mbili. Kumbuka hizo ni vitambulisho mchakato. Hii ni kwenda kuwa ni kidogo Awkward wakati sisi duka. Basi hebu tu kukaa hapa na kusubiri. Mmoja wao hivyo lazima kuja nyuma baada ya kama - OK, hivyo moja akaja nyuma. Lakini basi kwa nini si pili moja kurudi bado tu? Yep? Watazamaji: server hawezi kufanya kitu chochote wakati ni kompyuta kwamba idadi kubwa. KEVIN SCHMID: Haki. Hivyo majibu mara tu kwamba server kweli hawezi kufanya kitu chochote wakati ni kompyuta kwamba idadi Fibonacci. Hivyo sasa mimi tu got mambo wangu wawili nyuma. Lakini mimi nadhani tu kufikiri kuhusu code zaidi kidogo, ni jinsi gani kazi na kila kitu. Hivyo kazi hii hapa ni kificho kwamba Nimekuwa aliiambia server hii kuendesha wakati inapata ombi yanayokuja. Hivyo ni kwenda tu kukimbia kwa njia hii code nzima, na kisha ni kwenda nyuma kwa kitanzi tukio na kisha kuendelea kuangalia kwa matukio mapya. Hivyo kimsingi nini tuna kinachotokea ni server ni kusikiliza kwa mambo mapya. mtu wa kwanza anauliza kwa nini 45 ni. Sisi kuendesha kanuni hii compute yake. Kanuni hii inachukua takribani tano sekunde sita kukimbia. Kisha sisi kurudi nyuma kwa kitanzi tukio na kuangalia kwa maombi mapya. Hivyo hii ni mfano wa jinsi, kama wewe na mambo ambayo ni kinachojulikana compute amefungwa, au matumizi mengi ya mahesabu, si nguvu, lakini kama ni computationally kubwa - Nadhani jambo moja kusema juu ya jambo hili ni kuwa kazi hii ni kufanya kabisa, kwa sehemu kubwa, pretty muhimu kazi ya haki. muda wote kwamba callback kazi ilikuwa mbio, ilikuwa pretty sana matumizi ya zaidi ya muda wake tu kompyuta kwamba nth Fibonacci idadi. Lakini sisi tu alikuwa thread moja kushughulikia. Katika mtindo Apache, wakati watu wawili alitoa ombi kupata fib 45, sisi bila kuwa na nyuzi mbili tofauti. Na kisha mfumo wa uendeshaji wa kazi ingekuwa, au ngazi user kificho kwamba itaweza nyuzi, itakuwa wameweza imekuwa na kipande kuwa hadi juu ya CPU, au hata kama alikuwa na CPUs nyingi, kuzisambaza sawasawa katika CPUs ili nao wote wawili walikuwa kumaliza takribani kwa wakati mmoja. Hivyo tu kuonyesha jinsi gani tunaweza aina ya - na hii si kamili jumla ufumbuzi, lakini aina ya jinsi gani tunaweza kufanya kurudi hapa na kufanya kidogo kidogo bora. Basi nini nina hapa ni mpango ujulikanao Fib C. Na hii kimsingi anatumia mtu mwingine wa modules Node kuitwa Mchakato wa Mtoto Module. Hivyo nimekuwa pamoja na kwamba katika aina ya juu ya kama napenda kufanya pound ni pamoja na mtoto process.h au kitu. Sasa mimi kupata hii variable CP ambayo ina utendaji yangu yote. Hivyo sasa nini mimi kufanya katika kukabiliana hii handler ni mimi nina kuendesha programu hii dot kufyeka fib 45. Hivyo kile nimepata kufanyika - na mimi nina kwenda tu hatua nje ya mpango huu kwa kidogo kidogo - ni Nimeandika C mpango huo kimsingi computes nth Fibonacci idadi. Hivyo hapa tu mpango Nimeandika katika C kwamba computes hii. Mimi unaweza kukusanya, na siwezi kukimbia kwa amri line. Na itakuja compute 45 Fibonacci idadi. Hivyo taarifa hiyo tu inachukua pretty much kwa muda mrefu. Mimi pengine inaweza kutumika dash 03 kwa kuongeza au kitu kama hicho, lakini mimi tu alifanya kama kawaida compiler mazingira. Na prints nje. Lakini sasa, je, Mimi aina ya kufanya? Oh sorry, file makosa. Basi, mimi kufanya mambo sawa na header kama kabla ya. Basi mimi kufanya cp.exec hii. Basi nini hii ni ya kwenda kufanya ni ni kwenda kukimbia mpango huu. Lakini kwa njia hii kazi ni kuwa siyo kwenda kusubiri kwa kwamba mpango wa kumaliza. Ni tu kimsingi anasema kutekeleza mpango huu. Hivyo kimsingi aina hii katika amri aina ya haraka ya. Na kisha, wakati wewe ni kosa kwa yake, kukimbia kazi hii. Basi sasa sisi aina ya kupata hii zima kurejeshwa jambo la kama sisi siyo kusubiri. Je, hiyo aina ya mantiki? Yep? Watazamaji: [inaudible]? KEVIN SCHMID: Hivyo hii kwa kweli kufungua njia mpya ya kufanya hivyo. Hivyo hii ni kweli, katika baadhi ya njia, uovu, si super ubaya, bali ni muhimu kwa kusema kwamba hii ni aina ya kurejea, kwa upande mmoja, Apache mfano ambapo sisi kufanya nyuzi na taratibu kwa kila ombi au mchakato wa kila ombi. Hivyo hii ni aina ya sawa kwa nini Apache gani. Katika baadhi ya matukio, itakuwa tu kutumia mpya thread, ambayo ni mwanga kidogo zaidi uzito zaidi kuliko mchakato, lakini Apache inaweza kuishia forking mchakato mpya ambayo ni aina ya nini cha kufanya hapa inamuunga kwa kufanya dot slash fib 45. Na kisha katika kesi hiyo, sisi aina ya watapata gharama hiyo ya taratibu. Hivyo hii ni jambo moja tu unaweza kufanya. Lakini tu kuonyesha aina hii ya mbio. Na majadiliano hayo ni kweli tu kwa lengo la kuwasilisha aina hii ya mipango kama njia ya kuonyesha mitazamo tofauti tofauti katika jinsi ya kubuni watumishi kama hiyo. Hivyo hii ni kukimbia, na kisha sasa kama mimi kufanya hii tena, I got vitambulisho mbili mchakato. Hebu tu majadiliano juu ya mambo ya uhakika nje. Hivyo taarifa kwamba wao ni kuongezwa. Hiyo ni baridi. Kwa sababu ilikuwa ni 27,122 kabla ya. Lakini sikia sasa, walikwenda nyuma katika takribani wakati huo huo. Na sasa, swali nzuri ya kuuliza kuhusu kwa nini ni kwamba kesi ni, kazi ambao ilikuwa ni sasa na aina ya kufanya mambo haya aina ya kucheza haki kwa kila mengine, matukio haya mawili ya dot slash fib 45 kwamba mimi mbio au kwamba Node mbio? Ambao aina ya inafanya haki kwamba wao wote kupata aina ya uwiano kukimbia wakati? Watazamaji: [inaudible]. KEVIN SCHMID: Yeah. Hivyo kimsingi, wakati mimi kufanya dot slash fib 45 au kitu kama hicho, sasa ni aina ya hadi mfumo wa uendeshaji wa kushughulikia Runtime ya programu hizo. Na sasa inaweza ratiba yao juu ya CPUs mbalimbali au Unaweza ratiba yao. Inaweza kipande up wakati huo moja CPU anapata au kwamba wao kupata kukimbia kwenye CPU moja. Ili wazo nyuma yake. Je, hiyo mantiki kwa kila mtu? Hivyo sasa Node si kweli kucheza sehemu katika kugawa up kazi hizi. OK. Ili karibu kwa ajili ya mifano. Mimi nilitaka kuonyesha jambo moja zaidi kwa sababu mengi ya hii hadi sasa imekuwa si kabisa super vitendo katika baadhi ya kesi. Siwezi kufikiria kuja nyumbani baada ya hii kuzungumza na kitu na kusema kama, vizuri mimi aina ya got nje ya kwamba majadiliano kwamba Mimi siwezi kufanya server Fibonacci kwa mradi wangu wa mwisho. Hivyo hapa ni aina tu ya mfano mmoja zaidi kwamba hopefully itakuwa - labda si, lakini labda - kidogo zaidi aina ya muhimu kwa miradi ya mwisho na kufikiri mbele kwa mambo kama hayo. Hivyo hii ni chat.js. Hivyo hii ni aina ya kama baadhi ya sampuli server upande kificho kwamba unaweza kutumia kuanzisha server ndogo mazungumzo kama unaweza kuwa kuonekana kwenye Facebook Chat au chochote. Hivyo Sisemi hii ni kama Facebook Kuzungumza, lakini hii ni aina ya kama nzuri - labda si nzuri, lakini labda nzuri - kuanzia kwa mazungumzo server kwa ajili ya tovuti yako kwa ajili ya mradi wa mwisho. Hivyo hebu tuangalie nini ni kufanya. Hivyo sisi ni kupata kitu hii maalum saa ya juu, hii var SIO sawa na kuhitaji Socket.IO. Hivyo hii ni kitu kingine kwamba haina kweli kuja kutunza na Node lakini unaweza kufunga hiyo. Ni Node moduli. Hivyo ni kama baadhi ugani na Node. SocketIO ni kweli kweli aina ya baridi. Ni uchukuaji kwamba kimsingi nini yake ni ni utapata kuwa na mkondo hii ya mawasiliano kati ya mtandao browser na mtandao wa kompyuta. Hivyo kwa sehemu kubwa hadi sasa, tulikuwa na haya haraka sana pili moja au mbili mawasiliano pili kati ya mtandao browser na mtandao wa kompyuta. Hivyo kimsingi kwenda google.com, kupata stuff, kutuma nyuma, na kisha sisi ni kosa. Sisi ni kamwe kuzungumza tena mpaka aina ya mtumiaji katika kitu kingine. Lakini nini Socket.IO na aina hiyo ya mambo - na SocketIO ni kweli moja ya mambo ambayo imejengwa juu ya kama WebSocket ambayo ni aina ya inapatikana kama sehemu ya HTML5 - kwamba utapata na hii kuendelea na mjadala. Na hii ni muhimu sana katika mazungumzo server aina ya kitu kwa sababu ni aina ya kama mazungumzo ya kuendelea katika baadhi ya njia kwa sababu kama wewe ni kuzungumza na mtu, unaweza sasa tu kutuma ujumbe chini ya bomba, na kisha server unaweza kutuma ujumbe chini bomba kwa mtu mwingine uko kuzungumza na. Na kisha unaweza kuwa na hii kubadilishana kama hiyo. Basi hiyo ni aina ya nini SocketIO ni nzuri kwa ajili ya. sababu hiyo SocketIO anatumia WebSockets kama jambo moja ni kwamba katika Mbali na WebSockets wazi tu ya zamani, pia anafanya tricks baadhi ya kimsingi kufanya hivyo kisakuzi sambamba. Hivyo browsers kama Internet Explorer kwa bahati mbaya si msaada WebSockets haki nje ya sanduku. Hivyo anatumia baadhi ya aina nyingine ya baridi nadhifu mambo kwa Adobe Flash kuruhusu wewe kuwa na msaada kisakuzi msalaba. Hivyo kwamba ni muhimu kweli kweli. Na kwa kweli, najua mimi nina aina ya mbio juu ya wakati hapa, lakini CS50 Kujadili, umewahi kuona kitu kama, mimi sijui, tupu hivyo na hivyo ni kujibu kwa post hii au kitu kama kwamba, kipengele kwamba? Hiyo ni SocketIO. Hivyo wakati mtu kuanza kuandika katika kujadili sanduku kutoa jibu la au kitu, browser yako haina nini kuitwa katika SocketIO hutoa aina fulani ya tukio hilo kuwa anasema mtu ni kujibu kwa post hii. Kisha server anasema, OK, je, mimi na kwa nini? Vizuri sasa nina kuwaambia watu guys nyingine ambao ni juu ya CS50 Jadili kuangalia wakati wa mwisho hii kwamba mtu ni replying. Basi hiyo ni aina ya nini SocketIO ni nzuri kwa aina hii ya kuendelea mkondo wa mazungumzo. OK. Basi nini nina hapa - na sisi ni tu kwenda kupuuza uhusiano safu kwa kidogo - nini mimi ni mimi mwingine kusikiliza. Hivyo kwamba ni njia tu katika Socket.IO ni akisema, acha tusikie juu ya hii bandari. Na kisha mimi kufanya hivyo juu ya uhusiano. Ili tu kimsingi soketi IO ya njia ya kusema, wakati sisi kupokea uhusiano, Mimi nataka wewe kuendesha kanuni hii. Na taarifa kwamba badala ya kuwa na rec na res kupita katika huko nina soketi. Na wazo hili soketi kimsingi ni hii jambo ambalo unaweza kuandika na kusoma na kwamba ina mtumiaji ujumbe ikiwezekana. Na ujumbe ungependa kutuma unaweza kwenda kwa kuwa soketi. Je, hiyo mantiki? Hivyo ni jambo hili kuendelea. Hivyo nini mimi ni mimi wito Socket.emit. Na kuzalisha inachukua pretty sana hoja mbili. Hoja ya kwanza ni kamba tu anayewakilisha ya aina ya kitu wewe ni kutotoa moshi. Hivyo ajili ya kesi hii, nimekuwa matumizi hii string ujumbe mpya. Na kwamba kimsingi tu kusema kwamba aina ya jambo hili, nini mimi kutuma, ni ujumbe mpya. Hivyo unaweza kusikiliza kwa aina maalum kama ujumbe mpya au chochote kwa kutumia dot juu. Hivyo uhusiano na user kupelekwa huko, kama ukiangalia ambapo sisi kuwaita dot juu, wale ni masharti mengine ambayo kuwakilisha aina ya ujumbe user. Hivyo kimsingi unaweza kuwa na emit hii moja ya aina ya ujumbe haya, na kisha kufanya kitu katika kukabiliana na moja ya aina ya ujumbe haya Hivyo mimi nina kutotoa moshi ujumbe huu mpya. Tunakwenda kupuuza connections.push kwa ajili ya pili. Lakini basi mimi kusema, Socket.on user alimtuma. Hivyo sasa ni aina ya kama wakati user inapeleka me ujumbe, nataka wewe kukimbia kanuni hii. Na taarifa kwamba kazi hiyo bila majina ni kuchukua katika variable hii aitwaye data ambayo kimsingi kwenda kuwa na ujumbe mtumiaji. Hivyo sasa hebu aina ya majadiliano juu ya uhusiano safu. Hivyo hii ni iliyoundwa kwa ajili ya mteja mazungumzo ambapo kimsingi kila mtu aina ya katika sawa mazungumzo chumba. Hivyo kimsingi, nini tunahitaji kuweka karibu ni baadhi safu kwamba kimsingi inawakilisha watu wote kuzungumza katika baadhi ya njia, kama kwamba hufanya akili. Haki? Kwa sababu tunahitaji kujua ni nani wale guys ni ili tuweze kuwatuma ujumbe kwamba watu wengine kutuma kwetu. Kwa hiyo kile code hii haina ni wakati mtumiaji inapeleka ujumbe - hiyo ni ya aina ya tukio hilo - tunakwenda kukimbia kanuni hii. Na nini cha kufanya ni sisi kukimbia kwa njia hii safu kwamba sisi kuitwa connections. Na pretty much kwa kila uhusiano ila moja kwamba yetu, kwamba nini kanuni hii anasema, sisi kutuma mpya ujumbe na kwamba ujumbe masharti habari. Hivyo kama wewe taarifa hapa, nini mimi wakati user kwa kweli inafanya mpya uhusiano ni nimekuwa aliongeza kwa JavaScript.push mbinu, hii ni kimsingi kusema tu kama kuongeza kwamba soketi kama thamani katika uhusiano wetu safu. Hivyo sasa wakati kanuni hii anaendesha, itakuwa kupeleka yale mambo kwa wale hasa connections. Hivyo hii inaweza kuwa na mwanzo mzuri kwa ajili ya kufanya mazungumzo server au kitu sawa. Na aina ya jambo zuri ni kwamba kificho kwamba unaweza kuona hapa kwa kama juu ya na emit na mambo kama hayo ni sawa na aina ya JavaScript code kuwa wewe kuandika katika browser ya kiutendaji na server. Hivyo ndiyo sababu SocketIO ni aina ya nadhifu na muhimu katika njia hiyo. Oh na jambo moja zaidi tu halisi haraka. Kulikuwa na CS50 mradi wa mwisho mwaka jana kwamba kimsingi kutekelezwa mazungumzo server katika Node.js. Nadhani ni Harvardchats.org lakini nina - OK. Mimi nina uhakika nini URL, lakini Naweza kutuma kwamba baadaye nje. Lakini ni aina ya baridi nini unaweza kufanya na Node.js. Hivyo natumaini, kwa ujumla, you guys na hisia nzuri ya nini Node.js ni muhimu kwa na jinsi gani unaweza labda kuomba kwa mradi wako wa mwisho. Nitawatumia nje baadhi zaidi rasilimali pamoja na hii. Na asante kwa kuja. Asante. [Makofi]