KEVIN Schmid: Hello everybody. Mirë se vini në seminarin CS50 on Node.js. Emri im është Kevin. Unë jam një TF CS50. Dhe unë jam lloj si gëzuar me të vërtetë në lidhje me këtë seminar. Unë mendoj se Node.js është shumë i ftohtë. Unë shpresoj se ky seminar mund të përdoret si një të mirë, I guess, trampolinë për disa nga projektet tuaja përfundimtar nëse ju jeni të interesuar në përdorimin e diçka si Node.js. Ne do lloj fillojnë seminarin jashtë nga vetëm duke folur për një grimë të vogël të lloj scalability sfond perspektivat e Node.js, dhe pastaj ne do të shkojë në disa shembuj të kodit. Dhe unë do të kemi kodin në një faqe interneti, dhe ju mund të shikoni në kodin. Dhe pas seminarit, do ta lloj të flasim se si ju mund të vendosni Node.js në kompjuterin tuaj. OK. Pra, le të ketë filluar. Kështu që unë mendoj unë vetëm dua të flas për serverat e web, me të vërtetë, së pari. Dhe për të filluar këtë diskutim, unë në thelb kanë një diagram që është nga teksti i përdorur për CS61, të cilat në thelb tregon ndërveprimin në mes të një procesi të klientit, si web tuaj Shfletuesi apo si klientin tuaj qëllimi apo diçka të tillë, dhe një web server. Pra, ky lloj i duket e ngjashme me foto që ke parë në leksionin mbi E mërkurë, ku në thelb ne kemi disa Procesi klient si Google Chrome. Dhe pastaj hap një është klient i dërgon një kërkesë. Kështu që mund të jetë diçka si dhe le të vizitë, unë nuk e di, CS50.net. Pra, ne të nxjerrë atë kërkesë. Dhe ka dikush të kujtojmë emrin e protokoll që specifikon se si që Kërkesa duhet të jetë e strukturuar? Yep. Audienca: [padëgjueshme]. KEVIN Schmid: Pikërisht. Pra, kjo është si HTTP, e drejtë? Pra, në thelb specifikimet për mënyrën se si se kërkesa duhet të vërtetë të jenë të përcaktuara jashtë, sepse në fund të ditës, se kërkesa është e vërtetë vetëm si një string që në thelb thotë se unë dua këtë. Dhe specifikimi për këtë është HTTP. Pra, kjo është si një protokoll. Pra, atëherë server merr që kërkesa. Pra, ju djema keni një web server të instaluar në aplikim CS50. Kjo është Apache. Dhe këtë javë, kur ju punoni në problemin vendosur shtatë, ju do të vërtetë të punojnë me këtë web server. Pra server merr atë kërkesë, dhe atëherë ajo duhet të lloj zeroja saj kokë dhe thonë se si edhe ajo që të bëj me këtë? Pra, bazuar në atë që vendos të bëjë, atëherë ajo mund të duhet të kontaktoni ndonjë lloj e burimeve. Dhe kjo mund të jetë një burim i shumë gjëra të ndryshme. Për një, ajo mund të jetë vetëm si një fotografi statike HTML. Pra, ajo mund të jetë vetëm si një HTML që është si për faqen tuaj te internetit personale. Kjo mund të jetë një file statike si një imazh apo si një film që ju keni. Ajo mund edhe të ketë për të folur për një lloj të bazës së të dhënave si një bazë të dhënash MySQL. Kështu që nuk ka gjithmonë duhet të komunikojnë me një burim, por në disa raste, ajo mund të. Kështu, pra, atë që do të bëjë pas kësaj është se do të dërguar përsëri përgjigje. Dhe përgjigja për këtë është specifikuar edhe nga HTTP. Pra, atëherë klienti mund të marrë atë. Ajo mund ta shqyej dhe ta përpunojë atë. Dhe pastaj ju merrni një web faqe si Google apo CS50.net ose çdo gjë që shkoi në. OK? Pra, kjo është bashkëveprimi themelor që ne jemi duke shkuar për të që kanë të bëjnë me të. Dhe ne jemi shumë e shumë do të jetë duke u fokusuar në këtë pjesë të ndërveprim, server. OK. Ftohtë. Çdokush keni ndonjë pyetje deri më tani? OK. Pra, siç kemi thënë, web server merr kjo HTTP kërkesë dhe më pas lëshon këtë HTTP përgjigje. Dhe si kemi biseduar për para, Aplikim CS50 web server është Apache. Pra, kur ju djema të punuar në P të vendosur shtatë, ju jeni do të jetë duke punuar me Web server Apache. Ju kurrë nuk do të duhet të vërtetë punojnë me Apache direkt shumë. Ju lloj konfigurosh Apache pak kur ju specifikoni pret virtuale apo pret v, dhe ne do të merrni të cilat në pak. Por në thelb, web server Apache ngritur për të punuar me lloj të PHP i dalë nga kutia. Pra, çfarë ndodh me të vërtetë është kur ju shkoni në një nga faqet e internetit tuaj si, të themi, host lokale index.php plagë apo diçka, është shfletuesi juaj dërgon që kërkesë, dhe pastaj Apache është ulur atje dhe shifra se të bëjë me të. Dhe veprimi është për të ekzekutuar se kodi në index.php dhe atëherë dërgoni atë përsëri. Pra, nuk është se. Pra, ne lloj biseduar për këtë. Pra, ajo mund të shërbejë vetëm një fotografi statike ose drejtuar disa kodin PHP dhe pastaj çështja përgjigje. Kështu, pra, një pyetje e zakonshme që mund të vijë up është i mirë, si nuk kemi me të vërtetë të merren me ka përdoruesve të shumta në të njëjtën kohë? Pra, imagjinoni nëse ju jeni duke shkruar një web server, nëse keni pasur një web server që ju ishin duke u përpjekur për të shkruar në diçka si C ose diçka të tillë, në thelb ju mund të mendoni se si ka mund të jetë një lloj kodi që do të marrë kërkesën, por pastaj ajo ka për të bërë gjithë këtë punë në të. Ajo mund të ketë për të, për shembull, kontaktoni bazës së të dhënave ose diçka të tillë. E drejtë? Dhe atëherë ajo do të bëjë atë lloj të përpunimit dhe pastaj kthyer përgjigje. Pra, kjo është si të lartë Pamje e përgjithshme e nivelit. Por nuk është menjëherë e qartë se si ju mund ta bëjë këtë në mënyrë që dy njerëz apo edhe 1,000 njerëz do të mund të punojë me tuaj Mjete server në të njëjtën kohë. Pra, zgjidhja që Apache përdor quhet temat apo proceset. Kështu që ju mund të keni dëgjuar këto terma para. Kjo është në rregull në qoftë se ju nuk e keni, por thjesht mendoj në lidhje me temat dhe i proceseve si mënyra për një sistem operativ apo një program i përdoruesit ose diçka të tillë ose një web server për lloj të ekzekutuar të shumta gjëra në të njëjtën kohë. Kështu që ju mund të keni dëgjuar termin si temat e ekzekutimit. Pra, kjo është një lloj si ju jeni lloj multitasking. Dhe në qoftë se ju keni parë në kutinë e juaj laptop, ose diçka të tillë, multicore, çfarë mund të bëni është që ju mund të drejtuar dy temat e ndryshme mbi të ndryshme pjesët e CPU mënyrë që ata mund në të vërtetë ndodhë në të njëjtën kohë. Pra, kjo është me të vërtetë e fuqishme. Dhe kjo është lloj i Apache-së zgjidhje për këtë problem. Pra, a ka një lloj si çdo çështje me këtë qasje pse? Kështu që unë mendoj unë lloj i shkroi aty. Por të dy ata lloj përdorin një shumë të kujtesës. Është shumë e shtrenjtë për të krijuar një fije apo një proces. Dhe pjesë e arsyetimit është se vetëm si kur ju jeni drejtimin e një program C si kryesor tuaj dhe pastaj se thirrjet një tjetër funksion, që ka një lloj rafte. Pra temat gjithashtu kërkojnë një krejtësisht rafte të ndara të cilat mund të jetë mjaft i madh. Dhe në qoftë se ju mund të imagjinoni që ka ton përdorues në web faqen tuaj, ju do të keni shumë temat e ndryshme. Kjo është një shumë e kollonat të menaxhuar dhe për të ruajtur. Pra, është e konsumit të madh kujtesës. Dhe pastaj, gjithashtu, le të thonë se ju keni vetem një CPU, ose le të thonë se ju keni më shumë temat e se keni ato multicores. E drejtë? Pra, le të thonë se ju kishte 10 temat dhe ju vetëm kishte pesë CPU. Ju lloj keni për të bërë këtë gjë, ku ju kaloni në mes të rrymës ai që vrapon për shkak se ju nuk mund të kandidojë të gjitha 10 në një herë. Dhe kjo është quajtur një kaloni kontekst. Dhe ky term në fakt ka disa kontekste të ndryshme, por le të vetëm mendojnë për atë si kaloni midis dy fije. Kjo mund të jetë goxha i shtrenjtë për shkak se në thelb ajo që ju duhet të bëni është që ju duhet për të ndaluar atë që jeni duke bërë, të shpëtuar Gjendja e atë fije të rrjedhshëm, dhe pastaj kaloni diku tjetër. Pra, ka të gjithë llojet e shohin Motivimi i pse temat dhe proceset mund të jetë pak i rëndë? Dhe a keni pasur një pyetje? OK. Ftohtë. Çdokush keni ndonjë pyetje? OK. Pra, në qoftë se ne bëjmë një hap prapa për një të dytë, ka lloj si një vëzhgimi që ne mund të bëjë në lidhje me një shumë e aplikacioneve web. Dhe kjo është me të vërtetë se shumë prej tyre në të vërtetë nuk e bëjmë këtë shumë më e dobishme punojnë brenda një fije. Pra, ka filluar më askënd P vendosur shtatë në të gjitha? Pra, ju doni që të përshkruani ndoshta disa pjesë? A keni punuar në hyrje ose diçka të tillë? Audienca: Jo. KEVIN Schmid: OK. S'ka gjë Më vjen keq. Por në thelb, në grup P, ju jeni do të jetë bërë një shumë të lloj pyetje në një bazë të dhënash për të marrë disa Informata nga kjo bazë të dhënash. Dhe ajo që kodi juaj do të jetë bërë, ajo që procesi i Apache ose që thread Apache do të jetë bërë ndërkohë që ajo ka për të kontaktuar Baza e të dhënave është ajo lloj do të jetë ulur atje dhe ajo do të jetë e duke pritur për bazën e të dhënave të përgjigjeni. Tani që nuk mund të tingëllojë si kjo a madhe merret për shkak se baza e të dhënave është në tuaj Aplikim CS50, e drejtë? Por ka disa lloj rrjeti latente ekziston sepse tani web server ka për të nxjerrë kërkesën e vet për të bazës së të dhënave për të komunikuar me Baza e të dhënave dhe pastaj të marrë atë Informata mbrapa. Deri tani kjo është si të mirë të prisni për mua, unë jam i do të shkojë të marrë diçka nga Baza e të dhënave dhe pastaj nuk ka një shumë e pritur ndodh. A ka kjo kuptim? Dhe për disa gjëra nuk është edhe aq keq. Në qoftë se vetëm ajo ka për të, për shembull, kujtesë, që nuk është si tmerrshme I / O latente. Dhe kur them, I / O latente, atë që unë jam duke iu referuar është si çdo lloj si prodhimit input. Por për të hyrë në një skedar në disk, si nëse kam kërkuar për të shërbyer HTML statike paraqesë që ishte në faqen time të internetit apo diçka të tillë, unë lloj i duhet të ndaluar për pak, lexoni këtë dosje nga e disk, dhe më pas në që procesi unë jam duke pritur. Unë nuk jam duke bërë punë të dobishme. Kjo nuk është e vërtetë për çdo gjë, por ajo është e zakonshme në të gjitha kërkesat si P set shtatë dhe një shumë të aplikacioneve se ju nuk jeni në të vërtetë duke bërë shumë të menduarit. Dhe kur them të menduarit, unë do të thotë si punë kompjuterike. Puna në mënyrë kompjuterike mund të jetë diçka si, të themi, ju të kërkuar për të shkruani një web server që vetëm llogaritur numri n Fibonacci. Kjo nuk do të tingëllojë si një veçanërisht fun web server. Ashtu si unë nuk do të presim që faqja të jetë Facebook tjetër, por që është një lloj pune kompjuterike. Dhe ju mund të imagjinoni zëvendësuar atë me një lloj tjetër të interesante Puna kompjuterike. Le të thonë se ju jeni duke shkruar diçka që llogaritet grada Ndarja në mes të dy njerëzve ose diçka të tillë. Kështu që ka të bëjë me një lloj e llogaritjes, e drejtë? Dhe, edhe atëherë, për të bërë që ju ende keni për të bërë një shumë të pritur për ndoshta ju keni për të query një bazë të dhënash për të parë up i cili është mik me të cilët ose diçka të tillë. Pra, nuk është se lloji i nocionit Puna e kompjuterike. A ka kjo kuptim? A ka dikush ndonjë pyetje? Oh dhe unë mendoj se kam vënë chat servera atje sepse servers chat janë lloj i një tjetër shembull i mirë i kësaj. Një chat server nuk ka për të bërë shumë të menduarit. Ajo vetëm duhet të presim për njerëzit për të dërgoni mesazhe dhe atëherë kur ata e bëjnë, dërgoni ato. OK? Pra, vetëm për radhitje përsëri, Apache dhe servers web ngjashme si atë pirun a Shumë temat dhe proceseve të cilat mund të jetë lloj kota. Kështu që unë mendoj pyetjen që mund të vijnë nga që nuk kemi nevojë të kemi temat e shumta dhe proceset? Çfarë ndodh nëse ne kishte vetëm një të tillë? Pra, le të lloj një tabllo të asaj që kjo do të duket si. Pra, le të përdorim vetëm një fije. OK? Pra, vetëm paramendoni këtë me një fije. Le të supozojmë ne nuk ishin me të vërtetë duke bërë se shumë të dobishme - dhe kur them dobishme, unë do të thotë punë kompjuterike - në ato temat e shumta para. Pra, le të lloj konsoliduar çdo gjë në një fije. Pra, çfarë nëse do të kishim një fije se lloj i vetëm shkon rreth në lak dhe vazhdimisht kontrolle bëri diçka të ri të ndodhë. Kështu për shembull, ndodhi diçka e re mund të thotë që kam marrë diçka prapa nga bazës së të dhënave, ose dikush dërguar mua një HTTP kërkesë e re. Pra, ata janë lloj i ngjarjeve që të ndodhë, apo jo? Dhe pastaj çfarë mund të bëj kur ato ri gjërat ndodhin është pikërisht në këtë thread e ekzekutimit, kjo fije e vetme e Ekzekutimi, unë mund të telefononi disa kodin që do të trajtojë atë gjë të veçantë. Kështu për shembull, në qoftë se kam marrë diçka mbrapa nga baza e të dhënave, unë mund të kandidojë tim pjesë e vogël kompjuterike e saj që në fakt vetëm përgatit gjë për të dërgojë përsëri të përdoruesit. Pra, e bën këtë lloj make kuptim? Por çfarë janë me të vërtetë Implikimet e kësaj? E drejtë? Sepse ne kemi shkruar një shumë të kodit asaj - dhe unë jam vetëm do të hidhen përpara në slides nëse kjo është në rregull. Pra, nëse ju nuk do mend, unë jam vetëm do të marrë një hap prapa. Pra, ky lloj gjë është quajtur një lak ngjarje. OK? Dhe kjo është lloj themelore Ideja prapa Node.js. Pra, çfarë është me të vërtetë duke bërë Node.js si një web server është ka një fije të vetme që është në thelb duke shkuar rreth në një lak si një kohë një lloj që ndodhen të individualitet i Node.js kjo është vazhdimisht kontrolluar, e morëm ne gjëra të reja? Dhe atëherë ajo do të kandidojë handlers që ju të ngritur. Por një pyetje e mirë për të kërkuar është, si mund ta bëjë këtë të ndodhë me gjëra ekzistuese? Kështu që unë vënë një linjë të kodit C këtu që në thelb duket si ajo e hapjes së një paraqesë, e drejtë? Unë Ajo sapo doli me një album. Kështu që unë kam për të hapur asaj një skedë të re. Pra, mënyra kodi ynë C për operimin - dhe unë mendoj arsyeja që unë zgjodha fotografi ishte sepse kjo është lloj i në masën e I / O punë që ne kemi bërë në C në një ndjenjë se ka output input. Pra, ne e quajmë këtë kod që e bën këtë hapur f. Dhe pastaj në linjë tjetër të tonë program, ne tani mund të punojnë me f. Pra, kjo do të ishte një shembull i diçkaje kjo është si sinkron ose bllokuar për shkak se në atë linjë parë aty ne jemi duke pritur deri ne të marrë fotografi të hapur. Pra, në rreshtin e dytë, ne e dimë se ne mund të punojnë me f, por kjo do të thotë se se linja e dytë nuk mund të vërtetë të kandidojë deri në rreshtin e parë është bërë. A ka kjo kuptim? Pra, kjo do të ishte keq për të vënë në një mbajtësin e ngjarjeve. Dhe arsyeja për këtë është se ky lloj i pret, apo jo? Pra, kjo do të na ktheje mbrapa në të njëjtën gjë. Dhe tani ne nuk do të ketë edhe Dobi të temat e shumta apo Proceset sepse kemi marrë një fije në Node.js. A do të kishte kuptim për të gjithë? Audienca: Prisni. Pra, çfarë është zëvendësimi? KEVIN Schmid: Oh, kështu që po. Kështu që unë jam duke shkuar për të marrë të zëvendësimi. OK. Pra, çfarë nëse ne kishte diçka që dukej si kjo? Pra, çfarë nëse tani unë redaktuar f hapur pak? Kështu që unë jam duke kaluar në të njëjtën dy argumente si më parë. Unë ende e dua këngë të re se ajo doli me. Por unë jam duke kaluar një gjë të tretë e cila është ky variabël quhet kod. Por ajo që është në të vërtetë kodi në këtë kontekst? A është ajo si një variabël të rregullt C? Kjo është një funksion, e drejtë? Dhe kjo mund të jetë pak i çuditshëm, sepse Unë jam në të vërtetë si tani duke kaluar një funksionojnë në një tjetër funksion. Pra, një disa gjëra për shënim në lidhje me këtë. Një, unë nuk jam në të vërtetë duke e quajtur funksion kodin. Pra, ju nuk e shihni kodin me Paren majtë, Paren drejtë. Unë jam vetëm duke kaluar në kodin. Dhe në C, çka kjo do të bëjë në fakt po më jep një tregues për atë aktuale kodi, dhe atëherë kjo mund të drejtuar atë. Por vetëm të kënaqur me atë që ju jeni duke kaluar kodin për të kandiduar kur se dosja është e hapur. Por çfarë do të thotë kjo është se tani Pjesa tjetër e programit tim të cilat do të mund të bëjë sende të tjera, mund të vazhdojë duke bërë të tjera gjëra, ndërsa ne, me të vërtetë nuk presin, por vetëm duhet në pjesën e pasme të kokat tona që kur të hapur, drejtuar këtë dosje që Kodi në krye. A ka kjo kuptim? Dhe tani ideja prapa Node.js është se kodi në sende të bëjë me f pjesë duhet të jetë shumë e shkurtër dhe e thjeshtë dhe i drejtpërdrejtë dhe jo të vërtetë të jenë të computationally shumë intensive. Ajo mund të ketë për të hapur një tjetër fotografi, por që duhet të jetë goxha i shpejtë sepse ajo duhet të them vetëm të bëni një tjetër f të hapur dhe të thërresë këtë kod të tjera. Pra, vetëm për të qenë plotësisht i qartë, f të hapur që e bën New Këngë Katy Perry Done mp3, që do të mjaft shumë më të kthehet menjëherë. Dhe atëherë ne vetëm mund të vazhdojmë duke bërë sende të tjera për shkak se të gjitha që tani f Thirrja e hapur nuk është treguar në thelb themelor Kodi f hapur të hapur këtë fotografi dhe kur ju jeni bërë hapjen e kësaj paraqesë ose kur ju të merrni atë, pastaj të drejtuar atë kod. Por kjo nuk ka të vërtetë të drejtuar atë kod. Dhe ju kisha një pyetje? Audienca: Ju dukej të nënkuptojë disa herë që duke shtuar computationally Kodi intensive lloj pushim [Padëgjueshme] drejtuar të sistemit. [Padëgjueshme]? KEVIN Schmid: Kjo është një pyetje e madhe. Kështu që unë në fakt kanë një shembull se si ju mund të integrohen computationally Kodi intensive në pak. Pra, kur ne të merrni për shembujt e kodit, Do të jetë i sigurt për të tërhequr atë një të tillë. A është kjo në rregull? Falemnderit. Cili ishte emri juaj? Audienca: Aaron. KEVIN Schmid: Aaron sjell një shumë të pikë e mirë, e cila është se në qoftë se kam pasur disa code computationally intensive në bëjë gjëra me pjesën f, pjesa tjetër e programi im nuk mund të kandidojë dhe nuk mund të dëgjoni për kërkesat e reja apo ndonjë gjë deri në të gjithë se stuff është e përfunduar. Pra, nëse unë jam me shkrim kodin Nyja në përgjithësi nëse nuk bëjmë diçka si unë jam duke shkuar për të sugjeruar më vonë, kur ne shikojmë në shembuj kodi, unë duhet të jetë i sigurt se kodi im nuk ka zë kjo loop ngjarje. A ka kjo kuptim? OK. Ftohtë. Pra Node.js ofron këtë kornizë që ju mund të ndërtojë këto ngjarje të shtyrë serverat me. Pra, ajo ka këto lloj asinkron jo-bllokimin e I / O biblioteka, ndërsa Bibliotekat e standarde C që ne kemi qenë duke punuar me të, si në qoftë se ju vetëm përdorimin e tyre në të njëjtën mënyrë që ne i kemi qenë për përdorimin e tyre me f hapet dhe sende, ata janë të bllokuar për shkak se ju në të vërtetë duhet të presin për që fotografi të hapur. Por Node.js ju jep këtë dhe atë në thelb lidhjet në V8 Google JavaScript engine e cila është arsyeja se Chrome është në mënyrë të shpejtë në përpunimin e JavaScript sepse ajo ka këtë motor V8. Kështu që unë e di që tingëllon si një nga ato WWDC konferenca zhvilluesi gjë ku ata hedhin vetëm një bandë e Numri letër gjëra për procesorë dhe thonë se kjo është aq ftohtë. Por kjo është e ftohtë që ata bënë kjo për shkak se JavaScript - ose ndoshta në qoftë se ju nuk jeni të njohur me JavaScript ende, sepse ne nuk kemi pasur ligjëratat mbi të - por JavaScript është interpretuar gjuha. Dhe kjo është një pikë e rëndësishme shumë. Pra, është e rëndësishme për web tonë servera të jetë i shpejtë, e drejtë? Dhe në qoftë se ne ishim vetëm duke Javascript kodin që u interpretua me vetëm ndonjë përkthyesi i vjetër mund të jetë i ngadalshëm. Përfitimet Pra Nyja nga që ka kjo përkthyes super të shpejtë V8. Dhe unë nuk e di nëse ata e quajtur atë sepse mu V8 në ballin gjë, por OK. Kështu që unë kam përgatitur disa shembuj në këtë URL. Pas seminarit, unë jam lloj të shkuar në të flasim rreth asaj se si ju mund të merrni të vendosur Nyja lart, por tani për tani, unë vetëm lloj i duan të ecin nëpër disa shembuj të kodit. Pra, nëse ju doni të ndjekin së bashku, të gjithë Kodi burimor është në dispozicion atje. OK? Kështu që unë do të iki këtë URL për pak. Dhe atëherë unë jam vetëm do të kaloni në terminal. A është e mirë me të gjithë këtë URL? Kështu që unë jam duke shkuar për të kaluar mbi të terminalit tim këtu. Kështu që këtu është kodi që Unë kam për sot. Pse nuk e bëjnë të fillojmë me simpler.js paraqesë? Gjëja tjetër është se e tërë kjo kodi do të jetë e shkruar në JavaScript cilat ju mund ose nuk mund të jetë njohur me të. I guess disa gjëra është se shumë e kodit JavaScript është lloji i Sintaksa dhe struktura është shumë e ngjashme me C, kështu që ju mund të lloj të vini ta merrni si ju shkojnë së bashku. Unë e kam provuar për të shkruar një shumë të duke filluar Kodi për këtë në një mënyrë që është ngjashme me C që është pak më shumë i lexueshëm. Por si ne progres, unë do të jetë duke demonstruar disa prej shtesë tiparet e JavaScript që janë lloj i ftohtë. Por le të shohim në këtë program të mostrës. Them se çdo gjë është e prerë atje. Unë jam vetëm duke shkuar për të rregulluar atë vërtetë të shpejtë në qoftë se kjo është në rregull apo jo. Unë nuk e di se çfarë kjo do të bëjë. Është se një pak më të mirë? A mund të shihni var dhe sende? OK. Pra, linja e parë është si JavaScript version i një variabël deklaratë. Pra, vetëm për të nxjerrë në pah atë që kjo do të duket si në C. Pra, kjo është vetëm si Indeksi mua duke thënë se është e barabartë me tre ose diçka të tillë. Kështu që unë nuk e specifikon llojin. JavaScript nuk kanë lloje, por është e shumë të shtypur dinamike në natyrë, në mënyrë nuk ka ofruar asnjë lloj lloji në të. Pra, ajo vetëm ka var. Kjo është si variabël. OK? Dhe unë jam duke e quajtur këtë HTTP ndryshueshme. Dhe në të djathtë anën time, unë kam shprehje që unë dua të vënë në HTTP. Dhe kjo thotë kërkojnë HTTP. Pra, kjo është lloj i ngjashëm për të përfshirë. Kjo është pak më shumë si i fuqishëm se përfshijnë në kuptimin që përfshijnë vetëm do të kopjoni header paraqesin për prototypes funksion ose çdo gjë me përkufizimet tipit. Por kërkojnë është në të vërtetë ndodh për të na marrë kodin. Kështu që ju mund të mendoni për atë si importimin e disa kodin. Pra, diku në modulin Node.js sistem apo çfarëdo, ata kanë të gjitha këto Kodi HTTP server kështu që unë jam vetëm duke ngarkuar atë për mi përdorim personal në këtë program. OK? Pra, atëherë unë kam këtë funksion që unë kam shkruar. Dhe vini re unë nuk duhet të specifikojë Lloji i kthimit ose llojin e argumente përsëri. Pra, lloji të lirshme shtypur në kjo lloj kuptim. Dy argumentet që ai merr në, kërkesa dhe përgjigje. Pra, kjo është konceptualisht lloj si të njohur nga fotografia që kemi pasur në ekran para sepse ne kemi marrë këtë kërkesë që ne kanë nga përdoruesit. Dhe pastaj ne kemi një përgjigje që ne mund të shkruaj gjëra për të. Pra, linja e parë e kjo nuk res.writeHead 200 dhe atëherë kjo tipi i përmbajtjes tekst të thjeshtë. Pra, le të kuptuar këtë përveç pak. Pra, le të vetëm të përqëndrohet në res.write për pak. Pra shkruaj është në thelb, dhe shkruani kokën, janë vetëm mënyra për lloj të shkruajnë jashtë gjëra të përgjigjen. OK? Pra shkruani kokë, në qoftë se dikush mban mend nga HTTP leksion, bëni ju djema mos harroni headers në lartë e HTTP gjë? Pra, pse nuk e kam vetëm demo headers vërtetë të shpejtë. Do që të jetë e dobishme? Ose duhet ne vetëm lloj - OK. I sigurt. Pra, kur browser-i juaj shkon në google.com ose diçka të tillë, ka në fakt një pak më shumë - kjo është si një sekret - ka si pak më shumë informacion që vjen përmes tub se vetëm kërko pak dhe çdo gjë. Pra, për të ju tregojnë këtë, unë jam duke shkuar për të përdorur një program të quajtur Curl. OK? Pra, kjo është diçka që ju mund të kandidojë në linjë juaj command Mac OSX ose në aplikim apo çfarëdo. Dhe kështu që në qoftë se unë do të Curl HTTP google.com, Unë jam duke shkuar për të parë HTML. Dhe kjo është, në drejtësi, vetëm HTML atë gjë e ju tregon për të përcjellëse për www nëse shfletuesi juaj nuk automatikisht të trajtojë redirection. Pra, kjo është vetëm HTML, por unë jam duke shkuar për të shtuar në Curl këtë vizë ndarëse I Flamuri. OK? Dhe kjo do të tregojë mua headers. Pra, kjo është edhe informacioni që vjen nëpërmjet kur ta gjej këtë përgjigje. OK? Pra, në krye, shihni këtë HTTP 301 të lëvizur përgjithmonë. Dhe kjo është lloj i rëndësishme sepse kjo ka të bëjë me kodin e statusit. Pra, 301 këtu është kodi statusi, e cila është në thelb vetëm një numër të plotë që tregon shfletuesit apo kushdo-së e lexuar këtë, në qoftë se ju të pretendojë se ju jeni një shfletues dhe ju jeni duke parë këtë, në thelb tani, nëse ju shikoni në që dhe ju shihni një 301, ju e dini se unë kam për të bërë diçka të veçantë në bazë të 301, ose diçka ka ndodhur veçantë bazuar në 301. Kështu ai thotë lëvizur përgjithmonë. Dhe pastaj, në thelb, ne kemi një bandë e palë kryesore me vlerë. Pra, ne të merrni vendin është www.google.com. Dhe pastaj lloj të gjitha këto gjëra të tjera, por në thelb, ajo që është vend duke thënë se është vend i ri është në www.google.com. Deri tani, nëse ju shkoni në google.com, ju do të lloj shohim llojin e shfletuesit të injoroj për një të dytë dhe pastaj përcjellëse të të drejtën përsëri në www.google.com. Pra, përgjigjet mund të përmbajnë këto headers. Dhe disa gjëra për të nxjerr në pah. Pra, le të thonë se ne kemi qenë në të vërtetë i suksesshëm në vizituar një faqe web. Pra më lejoni të shkoj në - çfarë është një website të mirë? Unë jam e keqe në të menduarit të mirë faqet e internetit në vend. Audienca: Wikipedia. KEVIN Schmid: OK. Le të bëjmë Wikipedia. Kështu që këtu unë u zhvendos. Oh wait. A ishte unë? Po, unë kam qenë. OK. Kështu që unë kam për të bërë www. Kështu që unë jam duke shkuar për të bërë www. Dhe si ju mund të shihni, këtu është e gjitha HTML se shfletuesi do të përpunojë për Wikipedia. Por në qoftë se unë mbaj scrolling deri këtu, ajo që unë do të shoh në krye - wow, nuk ka shumë të HTML në Wikipedia - por ajo që unë mund të shoh në krye këtu është ky kod 200 Statusi në krahasim me 301 se kam parë më parë. Dhe vini re se ajo ka një të mirë OK miqësore tjetër për të. Pra, kjo është si të kodit të mirë të statusit. A të duket e njohur se numri 200? Po sepse kur kam bërë simpler.js, I shkroi një 200 atje. Pra, kjo është në thelb duke thënë them Shfletuesi apo kushdo që është duke u përpjekur për të marrë për të kjo se ata ishin të suksesshme. Apo se lloj i si ne ishin të suksesshme shumë. Dhe nuk ka ky lloj i sintaksës veçantë në Javascript për shpalljen e një Harta e këtyre çelësave si lloj përmbajtje dhe këto vlera si plain text. Pra, nëse ju shikoni në përgjigjen që ne kam kthyer nga Wikipedia më parë, - Unë do të përpiqen për të lundruar deri pak më të shpejtë - ju keni këto çelësat si server dhe këto vlera Apache. Pra, ju keni marrë çelësat dhe vlerat. Dhe ju mund të specifikoni këtë në Nyja çfarë për të dërguar përsëri. Pra, kjo është në fakt lloj, në disa mënyra, dhe në disa mënyra kjo nuk është e me të vërtetë, por kjo është një nivel pak më të ulët se kodin PHP që ju mund të jenë të shkrim për P vënë shtatë sepse PHP dhe Apache lloj të kujdeset për disa nga këto gjëra për ju. Në PHP, ju mund të pranoj default Sjellja duke shkruar headers tuaj. Por, për qëllimet e kësaj, ne marrim të shkruar nga vetë headers tona. Pra, nuk do vijë kuptim të të gjithë, linja kreu shkruaj? OK. Awesome. Pra, atëherë ajo që unë bëj është I dhënë fund përgjigje duke thënë përshëndetje botë. OK. Por kjo është vetëm një funksion quajtur mbajtës kërkesë. Deri tani unë në fakt duhet të lloj të bërë diçka me këtë funksion, apo jo? Kështu që këtu është ajo që unë bëj nuk është ky linja e cila e bën var barabartë me server HTTP.create server, dhe pastaj unë të kalojë në mbajtës kërkesës. Pra, kjo është lloj i Nyja mënyrë e krijimit të një server. Dhe vini re se unë jam duke kaluar në mbajtës kërkesës. Pra, kjo është e thënë të createServer funksion që unë dua që ju të bëni më një server, dhe kur se server merr një përgjigje, kam nevojë për ju për të thirrur këtë të kërkojë funksionin mbajtës. OK? Kështu që linjë shumë e shumë përfundon menjëherë. Pra, linja e var server është bërë e drejtë pasi të keni bërë këtë shumë e shumë. Unë do të thotë, se ka për të ngritur disa të brendshme shtet të dini se ju do të duhet të telefononi atë funksion mbajtës kërkesë, por ajo nuk do të rrinë atje dhe të le të themi ka përdorues dërguar me një kërkesë ende? Më ka dërguar përdoruesi një kërkesë ende? Pra, kjo nuk do të bllokojë. OK? Pra, çfarë do të bëjë kjo është ajo në thelb tani ruan një tregues për këtë kod, ky funksion mbajtës kërkesë, dhe më pas do të kandidojë atë kod, kur dikush bën një kërkesë. Dhe atëherë ne bëjmë server.listen. 1337 nuk është shumë arbitrar. Unë nuk kishte asnjë arsye të veçantë për picking atë numër. Ajo ishte krejtësisht e rastësishme. Por kjo vetëm specifikon portin. Pra, shumica e serverat e web ju do të shihni se ata përdorin portin 80 sepse kjo është lloj e si konventës. Pra, nëse unë shkoj në diçka si, Unë nuk e di, Wikipedia.org, dhe kam vënë dy pika 8 - oh wow, ju nuk mund të shihni se. Më vjen keq. Por nëse i bëj Wikipedia - Unë do të shkruaj këtu vetëm në mënyrë që është e qartë në kamera. Por në qoftë se unë të marrë këtë në një shfletues me një zorrë e trashë 80, që specifikon të shkojnë në Wikipedia.org në portin 80. Pra, kjo është si se si Shtetet e Bashkuara kanë portet të shumta si, ku ju mund të anijeve gjërat në lloj. Pra, kjo është si të shkoni në këtë të veçantë zhvillohet në këtë server. OK. Kështu që unë vetëm të zgjodha 1337. Ka një gamë të tërë të numrave që ju mund të vini. Kjo nuk ishte krejtësisht i veçantë. Por ajo që unë jam duke shkuar për të bërë tani po unë jam duke shkuar për të drejtuar Nyja. Më lejoni të hyjnë në të vërtetë që një çift Linjat poshtë në mënyrë që ju mund të shihni atë. Unë jam duke shkuar për të bërë Nyja, dhe unë jam do të kandidojë simpler.js. Dhe ne do të flasim rreth asaj se si për të marrë Nyja krijua në pak. Por tani ajo është vetëm duke server. Pra, një gjë që ne mund të përpiqemi të cilat nuk mund të të jetë emocionuese është se ne mund të vërtetë të përpiqet për të hyrë në atë në të rehatohem. Kështu që unë mund të bëjë Curl, dhe kur makinë është host lokale. Ju do të shihni këtë shkrim si kjo ndonjëherë. Presë lokale dhe 127.0.0.1 janë lloji e si kompjuterin tuaj në shtëpi. Pra, kjo është si duke folur me kompjuterin tuaj. OK. Dhe atëherë unë mund të them 1337. Pra, nëse unë të drejtuar këtë linjë të kodit, ai thotë përshëndetje botë. Dhe nëse kam kërkuar për të parë se sende që kishte text lloj përmbajtje të thjeshtë ose çdo gjë, unë mund edhe të vënë këtë këtu. Dhe vini re se ai e thotë OK. Dhe unë kam të qartë tekst. Dhe pastaj nuk ka lloj i gjithë kësaj tjera sende që Nyja do të shtojë në aty për mua. Kjo nuk është super i rëndësishëm. Unë do të thotë, ka një lloj teknike aspekte të AT që janë lloj i ftohtë për të folur rreth, por vetëm për të treguar ju, unë gjithashtu kanë fuqinë për të ndryshojë këto rreth. Kështu që unë mund vetëm të shtoni një bandë të stuff like that. Dhe pastaj tani, në qoftë se unë shoh në mia prodhimit, ajo do të jetë se. Pra, këto headers të thotë gjëra të caktuara të shfletuesit dhe gjëra të tilla si se. Dhe headers në thelb mund të tregoni një shfletues se si të përgjigjen në diçka. Nëse ju keni dëgjuar ndonjëherë të cookie-t më parë, ose në qoftë se ju keni qenë ndonjëherë i mërzitur nga një web faqe vendosjen cookies, ose u kthye në bllok cookie ose diçka të tillë. Ju mund të vendosni në të vërtetë cookie-t në këto headers. Pra, ata tregojnë një shfletues si të Sjellja në disa raste. OK. Kështu që ishte simpler.js. A ka dikush ndonjë pyetje në këtë dosje kod burim? OK. Ftohtë. Pra, le të hiqni r nga ajo dhe të kërkoni në simple.js. Pra, kjo është shumë e shumë njëjtin. Unë vetëm shkroi atë pak ndryshe sepse kam kërkuar për të zgjidhur të theksoj disa karakteristika të JavaScript. Pra, vini re se mbajtës kërkesa Funksioni i ka zhdukur tërësisht. Oh yep, a keni një pyetje? Audienca: Po, argumentet që kalohen se funksioni, cilat janë ato? KEVIN Schmid: Pra, këto janë JavaScript objekte. Në dokumentacionin Node.js, ajo në thelb thotë se çfarë metoda janë në dispozicion në to. Ne vetëm ndodh që të ketë qasje në kjo metodë quhet kreu shkruaj dhe fundi dhe stuff like that. Por ka një bandë e tërë më shumë metoda. Dhe për shembull, si një prej tyre në veçanti në rec, ju mund të bëni diçka si rec.method e cila do të ju them nëse kjo është një HTTP të marrë ose Kërkesat HTTP postare dhe gjëra të tilla si se. Pra, ka të gjitha llojet e ndryshme pronat, por ata janë të dyja JavaScript objekte, dhe ata vetëm kanë Funksionet e bashkëngjitura atyre që ju mund të shkruaj gjëra për të. OK? Pra të vini re se mbajtës kërkesën është zhdukur krejtësisht. Por kodin që kam pasur në kërkesë mbajtës është ende atje. Unë ende e kanë këtë res.writeHead dhe unë ende e kanë këtë res.end. Dhe ajo që ky është një shembull i në JavaScript është kjo ideja e një funksion anonim. dhe anonim është si një emër i përshtatshëm për atë, sepse ajo fjalë për fjalë nuk ka kanë një emër. Nuk ka asnjë kërkesë funksion mbajtës në atje. Nuk ka emër, por ajo ende është duke marrë një argument. Kështu që unë ende të marrë rec dhe res. Dhe unë ende kanë kodin. Kjo është e përkryer gjobë JavaScript code. Kështu që unë mund të deklaroj një funksion pa duke i dhënë në mënyrë të qartë një emër. Është pak konfuz në fillim. Ka disa gjëra të dobishme si që ju mund të bëni me këto funksione anonime. A ka dikush ndonjë pyetje mbi këtë, apo është në rregull vetëm për të, tani për tani, lloj të vetëm të pranojë se ajo do të bëjë të njëjtën gjë? Yep? Audienca: A janë funksionet parë klasë në JavaScript? KEVIN Schmid: Ata janë parë klasë në JavaScript. Dhe vetëm e di se këto koncepte të duke kaluar në një funksion anonim si kjo zbatohet për JavaScript që ju mund të shkruani në projektin tuaj përfundimtar për web shfletues shumë. Kështu për shembull, në JavaScript në Shfletuesi juaj, është gjithashtu disi ngjarje shtyrë në kuptimin se ajo që ju do të kanë është kur përdoruesi klikimeve këtë button, unë dua që ju të drejtuar këtë kod. Pra, është e njëjta lloj ideve të anën e klientit kur një klikim të mausit apo ata miut mbi një imazh në tuaj web faqe, të drejtuar këtë kod. Kjo mund të aplikojnë për të servers. Pra, kjo është një lloj si emocionuese Arsyeja pse JavaScript është me të vërtetë njerëz të përshtatshme ose disa mendojnë se është një Gjuha e përshtatshme për këtë lloj server shofer ngjarje, sepse ju keni këto funksione anonime. Ju keni gjithë ideja e ky kod asinkron. OK. Çdokush keni ndonjë pyetje? OK. Kështu që ishte simple.js. Pra, le të shohim në një më shumë ose një çift shumë. Pra, kjo është sleep.js. Pra, është dikush i njohur me funksion gjumë C? Nga ndoshta një nga leksionet e mëparshme ose diçka të tillë? Pra, në thelb ju mund të kalojë në Unë mendoj se një Numri i sekondave ose në qoftë se ju jeni duke përdorur U fjetur një numër milisekonda ose nanoseconds. Dhe në thelb programi thjesht do të ndalet konkurrojnë për atë sasinë e kohës. E drejtë? Dhe atëherë ajo do të zgjoheni në fund dhe atëherë ajo do të vazhdojë vetëm drejtimin programi. Pra, ky server lloj jep përshtypja e fjetur. Pra, vini re se ne kemi të njëjtën gjë res.writeHead 200 me kokë si më parë, por atëherë ne jemi duke e quajtur këtë funksion të quajtur vendosur timeout. Timeout Bëje është gjithashtu në dispozicion në shfletuesi juaj web Google Chrome ose Safari apo çfarëdo. Dhe në thelb se çfarë është bërë këtu po ajo është duke marrë në një funksion. Njoftim, përsëri, kjo është një funksion anonim. Pra, kjo është lloj i ftohtë, sepse ne jemi duke përdorur një funksion anonim brenda një funksion anonim i cili mund të jetë pak i çuditshëm. Por ai është duke marrë atë funksion, i cili është në thelb duke thënë - dhe në këtë mënyrë vepra është në 5000 milisekonda, unë dua ju për të ekzekutuar atë funksion që vetëm përfundon reagimi dhe shkruan hey. Pra, kjo jep përshtypjen e si duke fjetur, por mënyra në të vërtetë kjo punon është ne do të vazhdojë deri kjo vijë shumë shpejt. Ne jemi vetëm duke shkruar diçka. Dhe pastaj ne do të vazhdojë deri kjo vijë shumë shpejt. Pra, ne nuk jemi të vërtetë do për të pritur pesë sekonda. Ne jemi vetëm do të kandidojë ky kod në çast. Dhe pastaj nuk ka, përsëri, kjo pak loop ngjarje që tani ka këtë gjë regjistrat që në thelb është vetëm vazhdimisht duke shkuar rreth në një rreth dhe duke kërkuar në e natë në një të vetme thread dhe duke thënë, ka pesë sekonda kaluar ende? Dhe pastaj, kur e sheh se i dyti dora ka lëvizur si pesë sekonda ose çfarëdo, atëherë ajo zgjohet dhe thotë, oh, çfarë duhet të bëj? Oh unë kam për të drejtuar këtë kod. Dhe atëherë ajo do të drejtuar res.end hey. Pra, përsëri, ne jemi duke pritur kurrë këtu. Pra, nuk është se ky kod brenda ky funksion do të marrë pesë sekonda për të drejtuar. Ky kod do të kandidojë shumë e shumë të menjëherë, të paktën relative të pesë sekonda që ne ishim duke folur për më herët para. Pra, vetëm për të treguar këtë në veprim, Unë mund të bëj Node.sleep.js. Dhe bëri I rrëmujë up diçka? Ndoshta. Më vjen keq. Le të shohim se çfarë mund të bëjmë për të rregulluar këtë. OK. Pra, patjetër të përdorin Node.js. Unë jam vetëm kidding. OK. Vetëm një sec. OK. Unë e di se çfarë është. Pra, çështja është se në skedën time të tjera këtu, unë ishte duke ecur Nyja tashmë në se adresa e njëjtë, 1337. Pra gabim se ky hodhi, nëse ne shikojmë në të vërtetë afër, është adresa në përdorin, EADDRINUSE. Kështu që unë u tashmë duke përdorur 1.337 këtu. Pra, nëse do të mbyll këtë off, dhe pastaj unë tani përpiqen për të drejtuar këtë, me shpresë, çdo gjë do të jetë mirë. OK. Kështu që ju mund të ketë vetëm një gjë lloj i dëgjuar në një port në të njëjtën kohë. Një zgjidhje tjetër do të ishte për mua vetëm për të redaktuar atë program dhe të bëjë ajo të jetë si 1338 apo diçka si kjo. Por tani fle po kandidon. Pra, le të vërtetë të try it out në Shfletuesi këtë kohë, sepse kjo është një pak unexciting për të parë ajo në një terminal. Kështu që unë jam vetëm do të shkojnë në atë 127 Adresa e përsëri në 1337. Dhe në qoftë se ju mund të shihni atë - Unë nuk e di nëse ju mund të - por im shfletues të marrë një shumë, shumë të gjatë kohë për të ngarkuar ose si pesë sekonda. Dhe pastaj pas kësaj, ajo më në fund përfundoi përgjigjen. Dhe ju nuk mund të shihni atë, sepse gjëja e është lëvizur mbi një pak, por në qoftë se unë bëj kjo më e vogël pak, ju mund të shihni të thotë hey. Kështu që unë kam hey, por pas pesë sekonda. Dhe kjo mund të jetë një pastruese pak për të parë kjo këtu në terminal, kështu që unë jam do të bëni një - le të bëjmë këtu - le të bëjmë Curl atë adresë përsëri me 1337. Dhe unë vetëm lloj të duhet të ulen këtu për pesë sekonda. Por vini re se serveri mund të pranojë përgjigje të reja. Pra, ai shtyp hey. Dhe për këtë demo, në thelb ajo që Unë mund të bëjë në këtë tab tjetër - kështu që le të thonë se unë bëj këtë në një tjetër tab, Unë jam duke shkuar për të bërë Curl dhe të njëjtën gjë gjë përsëri. Dhe unë jam do të përpiqen të nisin këto njerëz jashtë në të njëjtën kohë. Kështu që unë jam duke shkuar për të bërë këtë, dhe unë jam i do të racës gjatë këtu dhe unë jam do të bëjë atë përsëri. Dhe le të bëjnë atë në mënyrë që ju të mund të shihni të dy prej tyre. Se një të shtypura hey dhe se një shtypura hey të gjithë rrugën në - le ta bëjmë këtë eksperiment përsëri. Në fakt, le të përdorim këtë mashtrim, nëse kjo është në rregull. Kështu që unë jam duke shkuar për të përdorur një gjë shell që lejon mua për të kandiduar në thelb dy kopje e këtij programi në mënyrë paralele. Pra, kjo do të drejtuar programin e parë dhe Programi i dytë paralelisht. Deri tani, nëse unë shtypni Enter, ajo do për të bërë që kërkesa e shumë e shumë të menjëherë në të njëjtën kohë. Pra, le të japë këtë një e shtënë. Deri tani njoftim që thotë dy procese. Dhe në qoftë se ju jeni kurioz, se 27.000 Numri është në thelb procesi ID. Dhe pastaj të vini re, ata të shtypura hey në të njëjtën kohë. Ajo nuk ishte si ne duhet të presim pesë sekonda për një dhe pastaj pas kësaj, pesë sekonda më vonë të merrni të dytën. Kështu që është lloj, në disa mënyra, kjo është jo të vërtetë dëshmi, por është e prova intuitive se kjo nuk është vetëm si duke pritur pesë sekonda për të bllokuar egzekutimin tërë thread. OK ftohtë. Kështu Aaroni bërë një pyetje më parë se ishte, edhe ajo që në qoftë se ne do të bëjmë diçka - Yep? Audienca: Prisni. Si është se e ndryshme nga printf tampon, pse? A nuk automatikisht të bëjë këtë? Pse ne duhet të shqetësuar për këtë? KEVIN Schmid: Oh, ju mund të thonë se një herë më shumë? Audienca: Nuk i pëlqen printf buffer të bëjë të njëjtën gjë e saktë? KEVIN Schmid: printf tampon? Audienca: Po. OK. A nuk ishte në një nga kuize ata ishin duke folur për mënyrën se si nëse jeni të drejtë printf diçka dhe pastaj e kanë atë pauzë një të tillë dytë, dhe atëherë ju keni atë lak dhjetë herë, ajo do të presë dhjetë sekonda dhe atëherë printf çdo gjë së bashku? KEVIN Schmid: Oh, OK. Audienca: A është duke bërë të njëjtën gjë gjë atëherë në këtë rast? KEVIN Schmid: Pra pyetja ishte në thelb në një nga ish-kuize apo diçka, ka pasur një pyetje që në thelb nëse ju thoni të shtypura F 10 gjërat në një kohë dhe pastaj e zuri gjumi si në procesi i shtypjes atyre jashtë, në fund për disa arsye, kjo do të vetëm hale ata të gjithë jashtë në ekran. Pra, ka dy lloj të ndryshme Konceptet këtu. Kështu që unë mendoj se një gjë është që, në këtë rast, ne jemi që kanë të bëjnë me dy të ndryshme lloj njerëz duke i kërkuar në server për gjëra në të njëjtën kohë. Dhe arsyeja që lloji i printf pret si kjo dhe deponive të gjithë jashtë në të njëjtën kohë është më e lidhur me si lloj printf e - kështu mënyrë printf është në të vërtetë zbatohet është ajo në thelb ka për të bisedoni me sistemin operativ për të shkruar se stuff në tastierë. Pra, ajo nuk dëshiron të bëjë të gjitha që Sende menjëherë kur ju thoni printf disa string sepse kjo mund të të merrni të shtrenjta në qoftë se ka të të bërë këtë çdo herë. Pra, nëse ju bëni printf hey, programin tuaj mund të vërtetë nuk të shtypura që menjëherë në tastierë. Kjo mund të thotë, OK, kam shkruar atë. Dhe pastaj lloj i të presim për ju që të jepni atë një pak më shumë para se të vërtetë shkruar atë në tastierë. Pra arsyeja se që ishte rasti - dhe kjo është lloj i palidhur në gjumë - është që gjumi ishte lloj i vetëm injektuar në atje për të treguar Fakti që ajo nuk shkruani ajo sinkrone. Por arsyeja për këtë është vetëm performancës në mënyrë që ju nuk keni për të bëjnë që shumë kontakte me sistemit operativ. Por këtu, ajo që ne jemi me të vërtetë duke u përpjekur për të bërë me këtë gjë gjumit është vetëm shfaqje se kur ne kemi dy njerëz të vizituar këtë website, ajo nuk do të vënë ata në një linjë ku ajo do të të thënë Unë kam për t'ju ndihmuar, dhe pastaj kur unë jam i përfunduar krejtësisht ndihmuar ju pas këtyre pesë sekonda, atëherë unë jam duke shkuar për të veprim mbi personi tjetër. Pra, kërkesa e personit së parë nuk lidhin atë lak ngjarje në qoftë se ka kuptim. Por këtu është në të vërtetë një shembull për diçka që do të lidhin deri lak ngjarje. Kështu që këtu është një funksion i tmerrshëm për të llogaritur fibonacci n-. Kjo është fjalë për fjalë mënyra më e keqe që ju mund të të llogaritur numrin n-Fibonacci. Dhe kjo është në të vërtetë vetëm të njohë ku kjo erdhi nga, nuk ka të vërtetë - Unë do të thotë, ju mund të përpiqet për të shkuar të gjetur atë - por ka si një blog shumë të gjatë postoni se dikush ka shkruar. Është si një nga ato gjëra Reddit. Por dikush kritikuar Node.js, dhe ata kanë përdorur këtë si një shembull. Kështu që unë lloj të kërkuar për të ju tregojnë vetëm dy perspektivat e ndryshme vetëm për të marrë një kuptim i përgjithshëm i koncepteve pas këtyre dy gjërave. Por kjo është zgjedhur si vetëm një e tmerrshme, computationally tmerrshëm joefikase mënyrë intensive për të llogaritur Numri n Fibonacci. Pra, vetëm si një shënim anë, pse është ajo e tmerrshme si në një mënyrë? Yep? Audienca: Thuaj se të filloni me 1,000. 1.000 ndan në 999 dhe 998. Secili nga kjo ndahet në dy gjëra. Secili nga kjo ndahet në dy gjëra. KEVIN Schmid: E drejta. Audienca: Të gjitha mënyra poshtë. KEVIN Schmid: Pikërisht. Pra, vetëm për të përsëritur për kamera, në qoftë se unë telefononi gënjeshtër më kështu 1,000 apo diçka si kjo, nuk është e qartë më pak se ose e barabartë me një mënyrë unë do të shkoni në këtë rast tjetër, dhe atëherë unë jam duke shkuar për të thirrur gënjeshtër 999 plus gënjeshtër 998. Dhe pastaj shumë e shumë të gjithë e që Puna që bën është gënjeshtër 999 lloj në këtë nivel. Nëse ju shkoni poshtë, kjo është edhe më e tepërt se kaq, por në qoftë se ju vetëm mendoj informatikë gënjej 998 merr na shumë e afërt me gënjeshtër 999. Pra, ne duhet të vërtetë të jetë pak më zgjuar se si ne lloj ripërdorimin këto, por ne nuk jemi të ripërdorimit këto gjëra në të gjitha. Kështu që ju mund të imagjinoni këtë gjigant, pemë gjigante kjo është vetëm e tmerrshme. Por gjithsesi, OK. Kështu që ishte e gënjej. Ajo thjesht merr një kohë për të kandiduar. Yep? Audienca: [padëgjueshme]. KEVIN Schmid: Oh, ju mund të përsëris pyetjen? Audienca: [padëgjueshme]. KEVIN Schmid: Oh kështu që kjo është vetëm kod që do të jetë lloj të anën server. Pra, kjo nuk do të të gjendet në shfletuesin apo ndonjë gjë. Kjo është në thelb ajo që ne kemi është se kur përdoruesi këtu bën shumë e shumë kërkesa e tyre përsëri, kur ne lloj të bëjë një kërkesë, ne jemi duke shkuar për të thirrur ky funksion në anën e serverit. Dhe pastaj ne do të merrni rezultatin mbrapa nga duke e quajtur atë funksion. Dhe pastaj ne do të vetëm të shtypura kjo të përdoruesit. Pra, përdoruesi nuk ka të vërtetë të merret me këtë funksion shumë. A ishte kjo pyetje? A ka kjo kuptim? OK. Ftohtë. Pra, përsëri, ne e bëjmë gjithë këtë res.writeHead gjë ku të shtypura nga header. Dhe pastaj unë të përfundojë përgjigjen duke bërë numri magjik është gënjej 45. Pra, le të vetëm të drejtuar këtë server. Kështu që unë jam duke shkuar për të bërë një fib.js. nyje Deri tani serverin tim gënjej po kandidon. Dhe pastaj këtu, unë jam duke shkuar për të bërë një nga këto. OK? Kështu që unë jam vetëm duke shkuar për të thënë, Curl. Pra, kjo do të marrë pak kohë, por shpresojmë se së shpejti ajo do të përfundojë dhe të ajo do të shtypura nga të cilat 45-të Fibonacci numrin. Audienca: [padëgjueshme]. KEVIN Schmid: Ajo duhet të të marrë bërë shumë shpejt. Pra, ajo duhet të marrë 5-6 sekonda. Unë nuk e di se është vetëm V8 duke qenë super të shpejtë, por në çdo rast, kjo është një shembull shumë i shkurtër dhe me qëllim pashije e një jo-parëndësishëm llogaritje. Pra, pas një kohë, ajo ka marrë këtë. Por tani, çfarë nëse unë bëj të njëjtën lloj eksperiment si më parë ku unë bëj dy kërkesa në të njëjtën kohë? Kështu që këtu unë jam duke shkuar për një të rehatohem në që adresa, dhe unë jam duke shkuar të bëni një tjetër Curl. Dhe mbani mend, kur ne e bëmë këtë për fle server, kur ne thelb kishte atë pas pesë sekonda, që shumë e shumë të dy u kthyen të drejtë në të njëjtën kohë. Pra, nuk ishte e lidhur veçanërisht lart. Por le të provoni tani. OK, kështu që ne mori dy proceset tona. Mos harroni këto janë ID proces. Kjo do të jetë pak i vështirë, ndërsa ne stallë. Pra, le të vetëm të qëndrojë këtu dhe të presim. Pra, një prej tyre duhet të vijnë përsëri pas si - OK, kështu që erdhi prapa. Por, atëherë pse nuk e kam e dytë një të kthehet vetëm ende? Yep? Audienca: server nuk mund të bëjë asgjë ndërsa ajo e informatikë atë numër të madh. KEVIN Schmid: E drejta. Pra, përgjigja ishte vetëm se serveri me të vërtetë nuk mund të bëjë asgjë, ndërsa është e informatikë atë numër Fibonacci. Deri tani unë kam vetëm dy gjërat e mia përsëri. Por unë mendoj vetëm për të menduar për kodin pak më shumë, se si është duke punuar dhe çdo gjë. Kështu që ky funksion këtu është kodi që Unë e kam thënë këtë server për të kandiduar kur merr një kërkesë të re në hyrje. Pra, kjo është vetëm do të vazhdojë deri këtë gjithë kodin, dhe pastaj ajo do të shkojë mbështetur në lak ngjarjes dhe pastaj të vazhdojë kontrolluar për ngjarje të reja. Pra, në thelb ajo që ne kemi ndodh është server është dëgjuar për gjëra të reja. Personi i parë kërkon atë që është 45. Ne të drejtuar këtë kod për të llogaritur atë. Ky kod merr afërsisht pesë për gjashtë sekonda për të drejtuar. Pastaj ne të kthehemi në lak ngjarje dhe kontrolloni për kërkesat e reja. Pra, ky është një shembull se si, në qoftë se ju të ketë gjëra që janë të ashtu-quajtur llogaritin lidhur, ose përdorin një shumë të kompjuterike, jo pushtet, por si janë computationally intensive - I guess një gjë për të thënë për këtë është se ky funksion është duke bërë tërësisht, për pjesën më të madhe, shumë e e drejtë të punës e dobishme. E gjithë koha që se callback funksion ishte duke ecur, ajo ishte shumë e shumë të shpenzimeve më të madhe të kohës së saj vetëm informatikë numër që Fibonacci n. Por ne vetëm kishte një fije për t'u marrë me të. Në modelin Apache, kur dy njerëz e bëri kërkesën për të marrë gënjeshtër 45, ne do të kishte pasur dy temat e ndryshme. Dhe pastaj puna e sistemit operativ do të kishte qenë, ose përdorues nivel kodin që menaxhon temat, do të kemi qenë për fetë që deri në CPU, apo edhe në qoftë se keni pasur CPU të shumta, shpërndarjen e tyre në mënyrë të barabartë në të gjithë CPUs në mënyrë që ata ishin të dy të përfundojë afërsisht në të njëjtën kohë. Pra, vetëm për të treguar se si ne mund të lloj të - dhe kjo nuk është një perfekte përgjithshme zgjidhje, por lloj se si ne mund të të bëjë një të kthehen këtu dhe të bëjë pak më të mirë. Pra, ajo që kemi këtu është një program i quajtur Gënjej C. Dhe kjo në thelb përdor një tjetër një nga modulet nyje e quajtur Procesi Fëmija Module. Kështu që unë kam përfshirë që në llojin krye e si unë do të bëj një kile përfshijnë process.h fëmijë apo diçka. Tani unë kam qasje në këtë variabël CP e cila ka të gjitha funksionet e mia. Deri tani ajo që unë jam duke bërë në këtë përgjigje mbajtës është Unë jam duke këtë program dot çaj gënjeshtër 45. Pra, ajo që unë kam bërë - dhe unë jam vetëm do të hap jashtë këtij programi për një pak - po unë kam shkruar një program C që në thelb llogarit Numri n Fibonacci. Kështu që këtu është vetëm një program e kam shkruar në C që llogarit këtë. Unë mund të hartojnë atë, dhe unë mund të kandidojë ajo në rreshtin e komandave. Dhe ajo do të llogaritur Numri 45-të Fibonacci. Pra, vini re ajo merr vetëm shumë e shumë për sa kohë. Unë ndoshta mund të ketë përdorur lëvizje të shpejtë 03 të zgjedh atë ose diçka të tillë, por unë vetëm e bëri si i rregullt Cilësimet e përpiluesit. Dhe kjo printon. Por tani, çfarë jam unë lloj duke bërë? Oh vjen keq, fotografi gabuar. Kështu që unë bëj të njëjtën stuff me header si më parë. Pastaj unë bëj këtë cp.exec. Pra, çfarë kjo do të bëjë është ajo e duke shkuar për të drejtuar këtë program. Por mënyra punon kjo është që ajo nuk do të presë për se programi për të përfunduar. Ajo vetëm thelb thotë ekzekutuar këtë program. Pra, në thelb shkruani këtë në urdhëroj lloj të shpejtë të. Dhe pastaj, kur ju jeni bërë me ajo, të drejtuar këtë funksion. Deri tani kemi lloj të marrë këtë gjë e restauruar e tërë e si ne nuk jemi duke pritur. A do lloj kuptim? Yep? Audienca: [padëgjueshme]? KEVIN Schmid: Pra, kjo do të vërtetë hapur një proces të ri për të bërë atë. Pra, kjo është në të vërtetë, në disa mënyra, e keqe, jo super e keqe, por është e rëndësishme të thuhet se kjo është lloj i kthim në, nga njëra anë, Apache Modeli ku ne bëjmë temat dhe proceset për çdo kërkesë apo proceset për çdo kërkesë. Pra, kjo është lloj i ngjashëm për çfarë bën Apache. Në disa raste, ai thjesht do të përdorë një të re fije, e cila është pak më shumë dritë peshë se sa një proces, por Apache mund të përfundojë forking një proces të ri që është lloj i asaj që ne bëjmë këtu implicite duke bërë dot gënjeshtër Slash 45. Dhe atëherë në këtë rast, ne lloj të pësojë të njëjtat shpenzimet e proceseve. Pra, kjo është vetëm një gjë që ju mund të bëni. Por vetëm për të treguar këtë lloj të running. Dhe kjo bisedë është vetëm për qëllim të vërtetë në paraqitur këto lloj të programeve si një mënyrë për të treguar perspektivave të ndryshme për si për të hartuar servers si kjo. Pra, ky është i rrjedhshëm, dhe pastaj në qoftë se bëj këtë herë, kam marrë dy kartat e identitetit proces. Le të flasim për gjëra për të nxjerr në pah. Pra të vini re se ata janë incrementally. Kjo është e ftohtë. Për shkak se ajo ishte 27.122 parë. Por njoftimi tani, ata u kthyen afërsisht në të njëjtën kohë. Dhe tani, një pyetje e mirë për të pyetur në lidhje me pse ishte se rasti është, puna e të cilëve ishte ajo tani për lloj të bërë këto gjëra lloj të luajë të drejtë me njëri- të tjera, këto dy raste të dot gënjej slash 45 që unë u zhvillua apo se Nyja u zhvillua? Kush lloj i bën të drejtë se ata të dy merrni lloj i balancuar kohën drejtuar? Audienca: [padëgjueshme]. KEVIN Schmid: Po. Pra, në thelb, kur unë bëj dot gënjeshtër Slash 45 ose diçka të tillë, tani është e lloj deri në sistemin operativ te trajtuar duhur të këtyre programeve. Dhe tani ajo mund të planifikojë ato në CPU të ndryshme ose të mund të planifikojë ato. Ajo mund të fetë deri kohën që një CPU merr atë apo që ata marrin për të kandiduar në një CPU. Pra, kjo është ideja prapa se. A do të kishte kuptim për të gjithë? Deri tani Nyja nuk është me të vërtetë duke luajtur një pjesë në ndarjen e këtyre detyrave. OK. Pra, kjo është pothuajse ajo për shembuj. Unë vetëm të kërkuar për të treguar një tjetër gjë sepse një shumë e kjo deri më tani ka qenë jo krejtësisht super praktike në disa raste. Unë mund ta imagjinoj duke ardhur në shtëpi pas kësaj flasin dhe diçka e thënë si, edhe unë lloj i mori nga ajo bisedë që Unë mund të bëjë një server Fibonacci për Projekti im i fundit. Kështu që këtu është vetëm lloj i një shembull më shumë që shpresojmë se do të jetë - ndoshta jo, por ndoshta - pak më shumë lloj relevante për projekte finale dhe menduarit përpara për gjëra të tilla si se. Pra, kjo është chat.js. Pra, kjo është lloj i pëlqen disa mostër server side kodin që ju mund të përdorni për të ngritur një chat server të vogël si ju mund të keni parë në Facebook Chat apo çfarëdo. Kështu që unë nuk jam duke thënë se kjo është si të Facebook Bisedo, por kjo është lloj i si një e mirë - ndoshta jo e mirë, por ndoshta mirë - duke filluar pikë për një bisedë server për faqen tuaj te internetit për një projekt përfundimtar. Pra, le të shohim se çfarë është bërë. Pra, ne jemi duke marrë këtë gjë të veçantë në krye, kjo VAR Sio është e barabartë kërkojnë Socket.IO. Pra, kjo është një tjetër gjë që ajo nuk ka vijnë bundled me të vërtetë Nyja por ju mund ta instaloni atë. Kjo është një modul Nyja. Pra, është vetëm si disa extension për Nyja. SocketIO është në të vërtetë me të vërtetë lloj i ftohtë. Kjo është një abstraksion që në thelb ajo që ajo nuk është është ajo ju lejon të kanë këtë rrjedhë të komunikimit në mes të një web shfletues dhe një web server. Pra, për pjesën më të madhe deri më tani, ne kemi pasur këto shumë të shpejtë një të dytë ose dy komunikimet e dytë ndërmjet një web shfletues dhe web server. Pra, kjo është në thelb të shkojnë në google.com, get sende, dërgoni atë, dhe pastaj ne jemi duke bërë. Ne nuk jemi duke folur përsëri deri lloje përdorues në diçka tjetër. Por çfarë Socket.IO dhe lloj i ngjashëm i gjërat - dhe SocketIO është në fakt një nga gjërat që është ndërtuar në si WebSocket e cila është lloj i disponueshëm si pjesë e HTML5 - që ju lejon të keni këtë dialog të vazhdueshëm. Dhe kjo është shumë e dobishme në një chat server lloj gjë, sepse ajo është lloj si një dialog të vazhdueshëm në disa mënyra për shkak se në qoftë se ju jeni të biseduar me dikë, ju tani mund të thjesht dërgoni një Mesazhi poshtë tub, dhe pastaj server mund të dërgoni një mesazh poshtë tub për personin tjetër që ju jeni biseduar me të. Dhe pastaj ju mund të keni këtë shkëmbejnë si kjo. Pra, kjo është lloj i asaj SocketIO është e mirë për të. Arsyeja që SocketIO përdor WebSockets si një gjë është që në Përveç WebSockets thjesht plain vjetër, ai gjithashtu ka disa nga truket në thelb bëjnë të shfletuesit compatible. Kështu shfletues si Internet Explorer për fat të keq nuk e mbështesin WebSockets drejtë të dalë nga kutia. Pra, ai përdor një lloj tjetër të ftohtë i zoti gjërat me Adobe Flash të lejojnë ju që të ketë mbështetje nga të shfletuesit. Pra, kjo është me të vërtetë të dobishme. Dhe në të vërtetë, unë e di unë jam natyrë e drejtimin në kohë këtu, por CS50 Diskutoni, a keni parë ndonjëherë diçka si, unë nuk e di, bosh kështu dhe kështu është iu përgjigjur për këtë post apo diçka si kjo, kjo veçori? Kjo është SocketIO. Pra, kur dikush fillon të shtypni diskutojnë kuti për të bërë një përgjigje ose diçka, browser-i juaj nuk ç'pritet quajtur në SocketIO lëshon një lloj ngjarje që thotë se dikush është iu përgjigjur këtij postimi. Pastaj server thotë, OK, çfarë duhet të bëj? E pra tani unë kam për të të treguar ata djemtë e tjera të cilët janë në CS50 Diskutoni në kërkim në këtë post që dikush është duke iu përgjigjur. Pra, kjo është lloj i asaj që është SocketIO mirë për, këtë lloj të vazhdueshëm të lumë e dialogut. OK. Pra, çfarë kam këtu - dhe ne jemi vetëm do të injorojë array lidhjeve për pak - atë që bëj unë është të bëj një tjetër dëgjojnë. Pra, kjo është vetëm mënyrë në Socket.IO është duke thënë se le të dëgjojë në këtë port. Dhe atëherë unë bëj këtë në lidhje. Pra, kjo është vetëm në thelb Socket IO-së mënyrë për të thënë, kur ne kemi marrë një lidhje, unë dua t'ju për të drejtuar këtë kod. Dhe vini re se në vend të që rec dhe res kaluar në atje kam Socket. Dhe kjo ide Socket është në thelb ky gjë që ju mund të shkruani për të dhe të lexoni nga se ka përdorues të mesazhe ndoshta. Dhe mesazhet që ju do të dërgoni mund të kalojnë nëpër këtë directory. A ka kjo kuptim? Pra, është kjo gjë e vazhdueshme. Pra, ajo që unë bëj është që unë e quaj Socket.emit. Dhe të lëshojnë merr goxha shumë dy argumente. Argumenti i parë është një varg vetëm përfaqësojnë llojin e gjë që ju jeni duke emitting. Pra, për këtë rast, unë kam përdorimin ky mesazh string ri. Dhe kjo është vetëm në thelb duke thënë se llojin e këtë gjë, atë që unë jam dërguar, është një mesazh i ri. Kështu që ju mund të dëgjoni për lloje të veçanta si mesazh të ri ose çfarëdo duke përdorur dot më. Pra, lidhje dhe përdoruesit dërguar atje, në qoftë se ju shikoni në ku ne e quajmë dot më, këto janë vargjet tjera që përfaqësojnë lloje të mesazheve të përdoruesit. Pra, kjo është në thelb ju mund të keni këtë lëshojnë një nga këto lloje mesazhesh, dhe pastaj të bëjë diçka në përgjigje të një nga këto lloje mesazhesh Kështu që unë jam emitting këtë mesazh të ri. Ne jemi duke shkuar për të injoruar connections.push për një të dytë. Por atëherë unë them, përdoruesi Socket.on dërguar. Deri tani kjo është lloj i pëlqen kur përdorues dërgon një mesazh, unë dua ju për të drejtuar këtë kod. Dhe vini re se kjo funksion anonim është duke marrë në këtë variabël quajtur të dhënave e cila është në thelb duke shkuar që mesazhin e përdoruesit. Lloj Deri tani le të flasim për array lidhjet. Pra, kjo është projektuar për një klient chat ku në thelb të gjithë është lloj i në të njëjtën dhomë chat. Pra, në thelb, ajo që ne kemi nevojë për të mbajtur përreth është një grup që në thelb përfaqëson të gjithë njerëzit të biseduar në disa mënyra, në qoftë se ka kuptim. E drejtë? Sepse ne kemi nevojë të dimë se kush ata djemtë janë kështu që ne mund të dërgoni atyre mesazhe që njerëzit e tjerë për të na dërgoni. Pra, ajo që ky kod nuk është kur përdoruesi dërgon një mesazh të - kjo është lloji i ngjarje - ne jemi duke shkuar për të drejtuar këtë kod. Dhe ajo që ne bëjmë është që ne të drejtuar përmes këtij array që ne kemi quajtur lidhje. Dhe shumë e shumë për çdo lidhje përveç asaj që është e jona, kjo është ajo që ky kod thotë, ne kemi dërguar një e re Mesazhi me atë mesazh të bashkangjitur informacionit. Pra, nëse ju vini re këtu, atë që kam bërë kur përdorues të vërtetë e bën një të ri lidhje është Unë kam shtuar me Metoda JavaScript.push, kjo është në thelb vetëm duke thënë se si të shtoni që xhunto ashtu nje vlere Lidhjet koleksion tona. Deri tani, kur ky kod shkon, ajo do të dërgoni gjëra për ata të veçantë lidhjet. Pra, kjo mund të jetë një pikënisje e mirë për të bërë një chat server apo diçka të ngjashme. Dhe lloj gjë ftohtë është se kodin që ju shihni këtu për të si në dhe lëshojnë dhe stuff like that është e njëjtë lloj i kodit JavaScript që ju do shkruani në shfletuesin për të bashkëvepruar me server. Pra, kjo është arsyeja pse SocketIO është lloj i i zoti dhe i dobishëm në këtë mënyrë. Oh dhe vetëm një gjë më të vërtetë të shpejtë. Nuk ishte një projekt përfundimtar CS50 Vitin e kaluar që në thelb zbatuar një bisedë server në Node.js. Unë mendoj se është Harvardchats.org por unë nuk jam - OK. Unë nuk jam i sigurt se çfarë është URL, por Unë mund të dërgoni atë jashtë më pas. Por kjo është lloj i ftohtë çfarë ju mund të bëni me Node.js. Kështu që unë shpresoj se, në përgjithësi, ju djema keni një kuptim të mirë të asaj që është e dobishme Node.js për të dhe se si ju mund të aplikoni ndoshta për projektin tuaj përfundimtar. Unë do të jem duke dërguar disa më shumë Burimet e së bashku me këtë. Dhe ju falënderoj për të ardhur. Falemnderit. [Duartrokitje]