KEVIN SCHMID: Sveiki visiem. Laipni lūdzam CS50 seminārā gada Node.js. Mans vārds ir Kevin. Es esmu CS50 TF. Un es esmu veida, piemēram, patiesi satraukti par šo semināru. Es domāju, ka Node.js ir ļoti foršs. Es ceru, ka šis seminārs var izmantot kā labu, es domāju, atspēriena daži no jūsu gala projektu, ja jūs interesē, izmantojot kaut kas līdzīgs Node.js. Mēs kārtot sāk semināru off tikai runā par mazliet veida fona mērogojamību perspektīvas Node.js, un pēc tam mēs pārietu uz dažām koda piemērus. Un es ņemšu kodu uz mājas lapā, un jūs varat apskatīt kodu. Un pēc semināra, es kārtotu runāt par to, kā jūs varat izveidot Node.js datorā. OK. Tātad, pieņemsim sāktu. Tāpēc es domāju, es tikai gribu runāt par web serveri, tiešām, vispirms. Un uzsākt šo diskusiju, es pamatā ir shēma, kas ir no mācību grāmata, ko izmanto CS61, kuru būtībā parāda mijiedarbība starp klienta procesā, piemēram, jūsu mājas pārlūku vai, piemēram, jūsu mērķis klientu vai kaut kas tamlīdzīgs, un web serveri. Tātad šāda veida izskatās līdzīgs attēlu, ka jūs redzēju lekciju par Trešdiena, kur būtībā mums ir dažas klients process, piemēram, Google Chrome. Un tad viens solis klients sūta pieprasījumu. Tā, ka var būt kaut kas līdzīgs Nu pieņemsim apmeklēt, es nezinu, CS50.net. Tāpēc mēs izdot šo lūgumu. Un vai kāds atcerēties nosaukumu protokols, kas nosaka, kā tas lūgums būtu strukturēts? Yep. Mērķauditorija: [nedzirdama]. KEVIN SCHMID: Tieši tā. Tātad, tas ir, piemēram, HTTP, vai ne? Vārdu sakot, specifikācija, kā šis lūgums faktiski būtu jānosaka out, jo beigās, dienā, šis lūgums ir patiešām tāpat kā virkne, kas būtībā saka, ka es gribu to. Un specifikācija jo tas ir HTTP. Tātad tas ir tāpat kā protokolu. Tātad serveris saņem šis lūgums. Tātad jums puiši ir web serveris, kas instalēts ar CS50 ierīces. Tas ir Apache. Un šonedēļ, kad jūs strādājat par problēmu noteikti septiņi, jūs faktiski strādā ar šo web serveri. Tāpēc serveris saņem šo pieprasījumu, un tad tas ir sava veida ieskrāpēt savu galvu un teikt, piemēram, labi, ko man darīt ar šo? Tātad, pamatojoties uz to, ko tā nolems to darīt, tad tas var būt, lai sazinātos ar kādu Resursa. Un tas resurss varētu būt dažādas lietas daudz. Attiecībā uz vienu, tas varētu būt tikai piemēram, statiskā HTML failu. Tātad tas varētu vienkārši būt, piemēram, daži HTML, kas ir kā jūsu personīgo mājas lapā. Tas varētu būt statisks fails, piemēram, attēlu vai kā filma, kas jums ir. Tas pat varētu būt, lai runātu uz kādu datubāzi piemēram, MySQL datu bāze. Tātad, tas ne vienmēr ir, lai sazinātos ar resurss, bet Dažos gadījumos, tas varētu notikt. Tātad, ko tā gatavojas darīt pēc tam, kad tas notiek, lai nosūta atpakaļ atbildi. Un atbilde ir tas, arī norādījis HTTP. Tātad, klients var saņemt. Tā var saplēst to nošķir un apstrādāt. Un tad jūs saņemsiet mājas lapu piemēram, Google vai CS50.net vai ko jūs devās uz. OK? Tāpēc tas ir pamata mijiedarbība, kas mēs gribam būt darīšana ar. Un mēs esam diezgan daudz būs koncentrējoties uz šo daļu mijiedarbība, serveris. OK. Atdzist. Kāds ir kādi jautājumi līdz šim? OK. Tā kā mēs teicām, web serveris saņem Tas HTTP pieprasījumu un pēc tam izdod šo HTTP atbilde. Un, kā mēs runājām iepriekš, CS50 ierīce tīmekļa serveris ir Apache. Tātad, ja jūs guys strādāt P noteikti septiņi, jūs esat būs strādāt ar Apache web serveri. Jums nekad nav īsti strādāt ar Apache tieši pārāk daudz. Jūs veida konfigurēt Apache nedaudz ja jūs norādāt virtuālās saimniekiem vai V saimniekiem, un mēs iegūtu to, ka mazliet. Bet būtībā, Apache web serveri izveidota, lai strādātu ar PHP veida un no kastes. Tātad, kas īsti notiek, ir, kad jūs iet uz vienu no jūsu mājas lapas, piemēram, teiksim, vietējā uzņēmēja slash index.php vai kaut ko, ir jūsu pārlūkprogramma sūta, ka pieprasījums, un tad Apache sēž tur un skaitļi, ko darīt ar to. Un darbība ir izpildīt ka kods index.php un pēc tam nosūtīt to off atpakaļ. Tāpēc tur ir, ka. Tātad, mēs veida runāja par to. Tātad tas varētu vienkārši būt statisku failu vai palaist kādu PHP kodu un tad jautājums atbilde. Tātad kopīgs jautājums, kas var nākt up ir labi, kā mēs patiesi risināt ar ar vairākiem lietotājiem vienlaicīgi? Tātad, iedomājieties, ja jūs rakstāt internetā serveri, ja jums bija web serveri, kas jūs mēģināt rakstīt kaut ko piemēram, C vai kaut kas tamlīdzīgs, būtībā jūs varat domāt par to, kā tur varētu būt sava veida kodu, saņemtu lūgumu, bet tad tas ir jādara visu šo darbu par to. Tas var būt, piemēram, kontaktēties datubāzi vai kaut kas tamlīdzīgs. Tiesības? Un tad tas būtu jādara šāda veida Apstrādes un tad nosūtīja atpakaļ atbildi. Tātad tas ir, piemēram, augstas līmeņa pārskats. Bet tas nav uzreiz skaidrs, kā jūs var darīt tā, ka divi cilvēki vai pat 1000 cilvēku varētu strādāt ar savu tīmekļa serveris, tajā pašā laikā. Tāpēc risinājums, ka Apache izmanto sauc tēmas vai procesi. Tātad, jums var būt dzirdējuši par šie noteikumi pirms. Tas ir OK, ja jums nav, bet tikai domā par vītnēm vai procesiem veidos operētājsistēma vai lietotājs programmu vai kaut kā tā vai tīmekļa serveris lai veida izpildīt vairākus lietas uzreiz. Tātad, jums var būt dzirdējuši terminu līdzīgi pavedieni izpildi. Tātad, tas ir veids, kā jūs veida multitasking. Un, ja esat redzējuši uz kastīti jūsu klēpjdatoru, vai kaut kas tamlīdzīgs, daudzkodolu, ko jūs varat darīt, ir iespējams palaist divas dažādas tēmas par dažādiem daļas CPU, lai tās varētu faktiski notikt vienlaikus. Tāpēc tas ir ļoti spēcīgs. Un tas ir sava veida Apache risinājums šai problēmai. Tā ir tur veids, piemēram, visiem jautājumiem ar šo pieeju, lai gan? Tāpēc es domāju, es veida uzrakstīju viņiem tur. Bet gan no tiem veida izmantot daudz atmiņas. Tas ir ļoti dārgi, lai izveidotu pavediens vai process. Un daļa no pamatojuma, ka tikai piemēram, kad jūs izmantojat C programmu kā jūsu galvenais un tad zvani citu funkciju, kas ir sava veida kaudze. Tāpēc tēmas arī pieprasīt pilnībā atsevišķa kaudze, kas var būt diezgan liels. Un, ja jūs varat iedomāties, kam t lietotājiem uz jūsu mājas lapā, jums būs daudz dažādas tēmas. Tas ir daudz skursteņi pārvaldīt un uzturēt. Tātad, tas ir liels atmiņas patēriņu. Un tad arī, pieņemsim, ka jums ir tikai viens CPU, vai pieņemsim, ka jums ir vairāk diegiem, nekā jums ir šie multicores. Tiesības? Tātad pieņemsim, ka jums bija 10 tēmas un tev bija tikai pieci CPU. Jūs veida ir darīt šo lietu, kurā jums pārslēgties starp pašreizējo viens, kas darbojas, jo jūs nevar palaist visus 10 uzreiz. Un ka sauc konteksts slēdzis. Un šis jēdziens faktiski ir pāris dažādos kontekstos, bet pieņemsim tikai domā par to kā pārslēgšanās starp diviem diegiem. Tas var būt diezgan dārga, jo Pamatā to, kas jums jādara, ir jums ir pārtraukt to, ko jūs darāt, saglabājiet situācija, ka darbojas pavedienu, un tad pāriet uz kaut ko citu. Lai vai visi veida redzēt motivācija, kāpēc pavedieni un process var būt nedaudz lielgabarīta? Un vai jums ir jautājums? OK. Atdzist. Kāds ir kādi jautājumi? OK. Tātad, ja mēs soli atpakaļ uz otru, tur ir veids, piemēram, novērojums, ka mēs varam padarīt par daudz tīmekļa lietojumprogrammas. Un tas ir patiesi, ka daudzi no viņiem tiešām nav darīt, ka daudz noderīgu strādāt iekšpusē pavedienu. Tātad ir kāds sākās P noteikti septiņi vispār? Tātad jūs vēlaties, lai varbūt aprakstītu daži no daļām? Vai Jūs strādājāt pie login vai kaut kas tamlīdzīgs? Mērķauditorija: Nē. KEVIN SCHMID: OK. Nekas. Piedodiet. Bet būtībā, jo P komplektu, jūs būs padarīt daudz veida vaicājumus uz datu bāzi, lai iegūtu dažus informāciju no šīs datubāzes. Un kādas ir jūsu kods būs darīt, ko tas Apache process vai ka Apache pavediens ir gatavojas darīt kamēr tā ir jāsazinās Datu bāze ir tas sava veida būs sēž tur, un tas būs gaida datu bāzi, lai atbildētu. Tagad, iespējams, neizklausās, ka liels risināt, jo datubāze ir jūsu CS50 ierīces, vai ne? Bet tur ir kaut kāda veida tīkla latentuma ir tāpēc, ka tagad web serveris ir izdot savu pieprasījumu datu bāzi, lai sazinātos ar datu bāzē un pēc tam iegūt, ka informācijas atpakaļ. Tāpēc tagad tas ir tāpat arī gaidīt uz mani, es esmu gatavojas iet saņemt kaut ko no datubāzē un tad tur ir gaidīšanas notiek daudz. Vai tas ir jēga? Un par dažām lietām, tas nav tik slikti. Ja tas tikai ir, piemēram, piekļuves atmiņa, kas ir nepatīk briesmīgs I / O latentuma. Un, kad es saku, I / O latentuma, ko es esmu atsaucoties uz ir tāpat kā jebkura veida, piemēram, ievades izvades. , Bet, lai piekļūtu failu uz diska, piemēram ja es gribēju, lai kalpotu statisku HTML failu, kas bija par manu mājas lapā vai kaut kas tamlīdzīgs, es veida ir apstāties, lai mazliet, lasīt šo failu no diska, un pēc tam ka process es gaidu. Es to nedaru noderīgu darbu. Tas nav taisnība par visu, bet tas ir izplatīts lietojumprogrammas, piemēram, P komplektā septiņi un daudz pieteikumu ka jūs neesat faktiski dara daudz domāšanu. Un, kad es saku domāt, es domāju piemēram, skaitļošanas darbu. Tāpēc skaitļošanas darbu varētu būt kaut kas tāpat kā, teiksim, jūs vēlaties, lai uzrakstīt web serveri, kas tikko ir aprēķināta n Fibonacci numuru. Tas neizklausās īpaši fun tīmekļa servera. Piemēram, es nevarētu gaidīt, ka vietā, lai nākamais Facebook, bet tas ir daži veida skaitļošanas darbu. Un jūs varat iedomāties, aizstāt, ka ar kāda cita veida interesantu skaitļošanas darbu. Pieņemsim, ka jums bija rakstīt kaut ko kas aprēķināta pakāpi dalījums starp diviem cilvēkiem vai kaut kas tamlīdzīgs. Tāpēc, ka tas ir kaut kāda veida Aprēķina, vai ne? Un pat tad, darīt, ka jums vēl joprojām ir darīt daudz gaida varbūt Jums ir, lai vaicājumu datu bāzi, lai meklētu up, kas ir draugos ar kurš vai kaut kā tā. Tāpēc tur ir, ka sava veida jēdziena skaitļošanas darbu. Vai tas ir jēga? Vai kāds ir kādi jautājumi? Ak, un es domāju, man tērzēšanas serverus tur jo tērzēšanas serveri ir sava veida vēl viens labs piemērs. Tērzēšanas serverim nav darīt daudz domāšanu. Tas vienkārši ir jāgaida, lai cilvēki varētu sūtīt ziņojumus un pēc tam, kad tie, sūtīt tos. OK? Tik vienkārši, lai Atgādinājums atkal, Apache un līdzīgi web serveri, piemēram, ka dakšas a pavedieni un procesu daudz kas var būt sava veida izšķērdīgs. Tāpēc es domāju, ka jautājums, kas var nākt No kas mums ir nepieciešams, lai būtu vairākas tēmas un procesus? Ko darīt, ja mēs tikko bija viens? Tāpēc pieņemsim veida uzzīmēt zīmējumu par to, ko tas izskatās. Tā ļauj izmantot tikai vienu pavedienu. OK? Tik vienkārši iedomāties to ar vienu pavedienu. Pieņemsim, ka mēs īsti darām ka daudz noderīga - un kad es saku noderīgs, es domāju skaitļošanas darbs - Šādos vairākiem diegiem pirms tam. Tāpēc pieņemsim veida konsolidēt viss vienā pavedienu. Tātad, ko tad, ja mums bija viens pavediens, kas veida vienkārši iet apkārt cilpu un pastāvīgi pārbaudes izdarīja kaut ko Jaunais notikt. Tā, piemēram, kaut kas jauns noticis varētu nozīmēt Man kaut ko atpakaļ no datu bāzē, vai kāds nosūta man jaunu HTTP pieprasījumu. Tātad tie ir sava veida notikumu tā notiek, vai ne? Un tad ko es varu darīt, ja tie ir jauni lietas notiek, ir šajā pašā pavedienu izpildes, šī vienotā pavediens izpildi, es varu zvanīt kādu kodu, kas varētu rīkoties šo konkrēto lietu. Tā, piemēram, ja es saņēmu kaut ko atpakaļ no datubāzes, es varētu palaist manu neliela skaitļošanas daļa no tā, kas faktiski tikai sagatavo lieta nosūta atpakaļ uz lietotāja. Tātad tas, ka sava veida jēga? Bet to, kas ir patiešām sekas ir? Tiesības? Jo mēs esam rakstiski daudz kodu, kas - un es esmu tikai gatavojas lēkt uz priekšu Slaidi, ja tas ir OK. Tātad, ja jums nav prātā, es esmu tikai gatavojas spert soli atpakaļ. Tātad šāda veida lieta ir sauc notikums cilpu. OK? Un tas ir sava veida pamata Ideja Node.js. Tātad, kas Node.js īsti dara, kā web serveris ir tur viens pavediens , kas būtībā notiek apkārt pa apli piemēram, bet viena veida nepietiekami kapuci Node.js kas ir pastāvīgi pārbaudot, vai mēs saņemt jaunas lietas? Un tad tas darbosies manipulatori kas jums izveidot. Bet labs jautājums uzdot ir, kā mēs varam padarīt šo notikt ar esošām lietām? Tāpēc man līnijas C kodu šeit, ka būtībā izskatās, ka tas ir atverot failu, vai ne? Es Viņa tikko iznāca ar albumu. Tāpēc man nācās atvērt viņai jaunu failu. Tā kā mūsu C kodu, kas darbojas - un es domāju, iemesls, kāpēc es izvēlējos failus biju jo tas ir veids, ciktāl no I / O darbu, ko mēs esam darījuši C sajūta, ka tur ir ieejas izejas. Tāpēc mēs saucam šo kodu, kas dara f atvērts. Un tad nākamajā līnijas mūsu programmu, mēs tagad varam strādāt ar f. Tātad tas varētu būt piemērs kaut tas ir tāpat kā sinhronas vai bloķēt jo šajā pirmajā rindā tur mēs gaidām, kamēr mēs get failu atvērt. Tātad otrajā rindā, mēs zinām, ka mēs var strādāt ar F, bet tas nozīmē, ka ka otrajā rindā nevar īsti darboties līdz pirmā līnija tiek darīts. Vai tas ir jēga? Tāpēc tas būtu slikti, lai kādā notikumu apdarinātājs. Un iemesls tam ir tas, ka šāda veida gaida, vai ne? Tāpēc tas atgriezīsies mūs uz vienu un to pašu. Un tagad mēs pat nebūtu Ieguvums no vairākiem diegiem, vai procesi, jo mēs saņēmām viens pavediens Node.js. Vai tas ir jēga, lai visiem? Mērķauditorija: Pagaidiet. Tātad, kas ir nomaiņa? KEVIN SCHMID: Ak, tā jā. Tāpēc es esmu gatavojas nokļūt nomaiņa. OK. Tātad, ko tad, ja mums bija kaut kas ka izskatījās? Tātad, ko tad tagad es edited f atvērt maz? Tāpēc es veidā, kas pats divi argumenti, kā agrāk. Es joprojām mīlu jaunu dziesmu ka viņa nāca klajā ar. Bet es esmu iet trešā lieta, kas ir šis mainīgais sauc kodu. Bet to, kas ir kods, kas faktiski šajā kontekstā? Tas ir tāpat kā regulāru C mainīgo? Tā ir funkcija, vai ne? , Un kas var būt nedaudz dīvaini, jo Es tiešām, piemēram, tagad iet darbotos uz citu funkciju. Tāpēc pāris lietas, kas piezīmi par to. Viens, es neesmu faktiski aicinot koda funkciju. Tātad jūs neredzat kodu, pa kreisi paren, tiesības paren. Es esmu tikai garāmejot kodu. Un C, ko tas patiesībā darīt ir man rādītāju, ka faktiskais kodu, un tad tas varētu vadīt to. Bet tikai domā par to, kā jūs esat iet kodu, lai palaistu, kad ka fails ir atvērts. Bet ko tas nozīmē, ka tagad pārējo manu programmu, kas varētu darīt citas lietas, var turpināt darīt citas sīkumi, kamēr mēs, nav īsti gaidīt, bet vienkārši ir aizmugurē mūsu galvām, ka ja šis fails ir atvērts, palaist, ka kods augšpusē. Vai tas ir jēga? Un tagad ideja Node.js ir tāda, ka kods, kas darīt lietas ar f daļai vajadzētu būt diezgan īss un vienkāršs un vienkārša, un nav īsti Ļoti skaitļošanas intensīva. Tā var būt, lai atvērtu citu failu, bet tas arī būtu diezgan ātri tāpēc, ka tas ir tikai teikt, darīt citas f atvērt un tad to sauc citu kodu. Tik vienkārši, lai būtu pilnīgi skaidrs, f atvērtu, ka tas jaunais Katy Perry dziesmu darīts mp3, kas notiek uz diezgan daudz atpakaļ nekavējoties. Un tad mēs varam tikai turpināt darīt citas lietas, jo viss, kas tagad ir f Atklāts konkurss tas ir pateikt pamatā Pamatā f atvērta koda atvērt šo failu un, kad esat pabeidzis atvērt šo failu vai tad, kad jums to atpakaļ, tad palaist šo kodu. Bet tas nav reāli palaist šo kodu. Un jums bija jautājums? Mērķauditorija: Jums šķita nozīmē dažas reizes, ka pievienojot skaitļošanas intensīva kods veida pauze [Dzirdams] orientētu sistēmu. [Dzirdams]? KEVIN SCHMID: Tas ir liels jautājums. Tāpēc man tiešām ir piemērs tam, kā jūs varētu integrēt skaitļošanas intensīva kodu mazliet. Tātad, kad mēs nokļūt koda piemērus, Es būšu pārliecināts pull, ka viens. Vai tas ir OK? Paldies. Kāds bija tavs vārds? Mērķauditorija: Aaron. KEVIN SCHMID: Aaron parādīs ļoti labs punkts, kas ir tas, ka, ja man bija daži skaitļošanas intensīva kods do sīkumi ar F daļa, pārējā mana programma nevar darboties un nevar klausīties jaunām prasībām vai neko, līdz viss ka sīkumi ir pabeigta. Tātad, ja es esmu rakstot Node kodu vispār ja mēs kaut ko darīt, piemēram, es esmu gatavojas ieteikt vēlāk, kad mēs skatāmies koda piemērus, man ir jābūt pārliecinātiem, ka mans kods nav sasiet šis notikums cilpa. Vai tas ir jēga? OK. Atdzist. Tāpēc Node.js piedāvā šo sistēmu, kas Jūs varat veidot šo notikumu orientētu serveri ar. Tāpēc tas ir šos asinhronā veida ne-bloķēšanu I / O bibliotēkas, bet standarta C bibliotēkas, ka mēs esam bijuši strādā ar, piemēram, ja jūs vienkārši izmantot tos tādā pašā veidā, ka esam bijis, izmantojot tos ar f atveras un sīkumi, tie bloķē, jo Jums tiešām ir jāgaida ka failu atvērt. Bet Node.js dod jums šo un to Pamatā saites uz Google V8 JavaScript dzinējs, kas ir iemesls, ka Chrome ir tik ātri pie apstrādei JavaScript jo ir šo V8 dzinēju. Tāpēc es zinu, ka izklausās kā viens no tiem, WWDC izstrādātāju konferences lieta ja viņi vienkārši mest ķekars Vēstulē numurs lietas, pārstrādātājiem un teikt, tas ir tik forši. Bet tas ir forši, ka viņi darīja Tas tāpēc, ka JavaScript - vai varbūt, ja jūs neesat pazīstams ar JavaScript vēl jo mums nav bijis lekcijas par to - bet JavaScript ir interpretējams valoda. Un tas ir svarīgs jautājums arī. Tātad, tas ir svarīgi, lai mūsu mājas serveriem, lai būtu ātri, vai ne? Un, ja mēs vienkārši darbojas JavaScript kods, kas tika interpretēts tikai ar jebkurš vecs tulks tas varētu būt lēna. Tāpēc Mezgls priekšrocības no šīs super ātri V8 tulks. Un es nezinu, vai viņi nosauca to jo V8 pļauka pieres lieta, bet OK. Tāpēc es esmu sagatavojis dažus piemērus Šajā URL. Pēc semināra, es esmu veida gatavojas runāt par to, kā jūs varat iegūt Node komplektu augšu, bet tagad, es tikai veida vēlaties iet caur kādu koda piemērus. Tātad, ja jūs vēlaties sekot līdzi, visi pirmkods ir pieejams tur. OK? Tāpēc es ņemšu atvaļinājumu šo URL up maz. Un tad es esmu tikai gatavojas pāriet uz terminālu. Ir visiem labi ar šo URL? Tāpēc es esmu gatavojas, lai pārslēgtos manu termināla šeit. Tātad, šeit ir kods, kas Man ir šodien. Kāpēc ne mēs sākam ar simpler.js failu? Otra lieta ir tā, ka tas viss kods tiks rakstīts JavaScript kas jūs var vai var nebūt pazīstami ar. Es domāju, pāris lietas, ir tas, ka daudz JavaScript kods ir sava veida sintakse un struktūra ir ļoti līdzīga C, lai jūs varētu veida paņemt to, kā jums iet līdzi. Es esmu mēģinājis uzrakstīt daudz sākot kodu šo tādā veidā, ka ir līdzīga C tā, ka tas ir nedaudz vairāk lasāms. Bet kā mēs progress, es būšu parādot dažas papildu iezīmes JavaScript ka ir veida atdzist. Bet aplūkosim šīs programmas paraugā. Es domāju, viss ir nogriezts tur. Es esmu tikai gatavojas noteikt, ka reālā ātri, ja tas ir OK, vai ne. Es nezinu, kas tas ir gatavojas darīt. Ir tāds, ka mazliet labāk? Vai jūs varat redzēt Var un stuff? OK. Tātad pirmā līnija ir kā JavaScript variants ir mainīgs deklarācija. Tik vienkārši, lai izceltu to, ko tas izskatās C. Tātad tas ir tāpat kā man sakot indekss ir trīs vai kaut kas tamlīdzīgs. Tāpēc es neprecizēja veidu. JavaScript tiešām ir veidi, bet tas ir ļoti dinamiski drukāti raksturs, tāpēc nesniedza nekādu rakstīt par to. Tātad, tas vienkārši ir var. Tas ir tāpat kā mainīgais. OK? Un es esmu aicinot šo mainīgo HTTP. Un manā labajā pusē, man ir izteiksme, ka es gribu, lai HTTP. Un tas saka nepieciešama HTTP. Tātad tas ir sava veida līdzīgs iekļaut. Tas ir nedaudz vairāk kā spēcīgu, nekā iekļaut tādā nozīmē, kas ietver vienkārši kopēt un ielīmēt galveni failu funkciju prototipus vai kāds ar tipa definīcijām. Bet tas prasa patiesībā notiek lai iegūtu mums kodu. Tātad, jūs varat domāt par to kā importē daži kodu. Tātad kaut kur Node.js modulī sistēma vai kāds viņiem ir tas viss HTTP serveri kodu, tāpēc es esmu tikai Ienesot to mana personīgai lietošanai šajā programmā. OK? Tātad man ir šo funkciju ka es esmu uzrakstījis. Un paziņojums, man nav jānorāda atgriešanās veidu vai par veidu argumenti vēlreiz. Tā veida vaļīgi ierakstījāt šāda veida ziņā. Divi argumenti, ka tā veic, pieprasījums un atbilde. Tātad tas ir konceptuāli veida, piemēram, pazīstams no attēla, ka mums bija uz ekrāna pirms, jo mēs šo lūgumu, lai mēs ir no lietotāja. Un tad mums ir atbildes, kas mēs varam rakstīt lietas. Tāpēc pirmajā rindā tas tomēr res.writeHead 200 un tad tas satura tipa tekstu plain. Tāpēc pieņemsim gabals šis izņemot maz. Tāpēc pieņemsim tikai koncentrēties uz res.write par maz. Tāpēc rakstīt pamatā, un rakstīt galvu, ir tikai veidi, kā sava veida rakstīt out lietas, kas atbildes. OK? Tātad rakstīt galvu, ja kāds atceras no HTTP lekciju, jūs guys atcerieties galvenes at top HTTP lieta? Tātad, kāpēc ne es tikai demo galvenes reālā ātri. Tas var būt noderīgs? Vai mums vajadzētu vienkārši veida - OK. Pārliecināts. Tātad, ja jūsu pārlūkprogrammā iet uz google.com vai kaut kas tamlīdzīgs, tur tiešām nedaudz vairāk - tas ir kā noslēpums - tur ir kā nedaudz vairāk informācijas kas nāk caur cauruli, nevis tikai maz meklēšanas un viss. Tātad, lai parādītu jums, es esmu gatavojas izmantot programmu, ko sauc Curl. OK? Tāpēc tas ir kaut kas, ka jūs varat palaist Mac OSX komandrindas vai ierīce vai kāds. Un tāpēc, ja man Curl HTTP google.com, Es esmu gatavojas, lai redzētu HTML. Un tas ir, taisnīgumu, tikai HTML ka veida stāsta jums novirzīt uz www, ja jūsu pārlūkprogrammā nav automātiski apstrādāt redirection. Tāpēc tas ir tikai HTML, bet es esmu gatavojas pievienot Curl šo defisi I karogu. OK? Un tas notiek, lai parādītu me galvenes. Tātad tas ir arī informācija, kas nāk cauri, ja es varu saņemt šo atbildi. OK? Tā augšpusē, redzat šo HTTP 301 pārvietot pastāvīgi. Un tas ir sava veida svarīga, jo Tas attiecas uz statusa kodu. Tātad 301 šeit ir statusa kods, , kas ir būtībā tikai vesels skaitlis , kas stāsta pārlūku vai kurš ir piemērots lasot šo, ja jūs izlikties, ka tu esi pārlūku un jūs redzēt to, būtībā tagad, ja paskatās ka, un jūs redzat 301, jūs zināt, man ir darīt kaut ko īpašu, pamatojoties uz 301, vai arī kaut kas īpašs noticis pamatojoties uz 301. Tāpēc tā saka pārvietots pastāvīgi. Un tad, būtībā, mēs esam ķekars galveno vērtību pārus. Lai mēs iegūtu vietu ir www.google.com. Un tad veida visu šo citas lietas, bet būtībā, kāda vieta ir teiciens ir jauna vieta ir www.google.com. Tāpēc tagad, ja jūs doties uz google.com, jūs veida redzēt pārlūka veida mirgot par otro un pēc tam novirzīt jūs tiesības atpakaļ uz www.google.com. Tāpēc atbildes var saturēt šīs galvenes. Un pāris lietas norādīt. Tātad pieņemsim, ka mēs faktiski veiksmīgi apmeklējot mājas lapā. Tātad, ļaujiet man iet - kas ir labs mājas lapā? Es esmu slikti domāt labas mājas lapas uz vietas. Mērķauditorija: Wikipedia. KEVIN SCHMID: OK. Darīsim Wikipedia. Tātad, šeit es tika pārvietota. Oh wait. Es biju? Jā, es biju. OK. Tāpēc es got darīt www. Tāpēc es esmu gatavojas darīt www. Un, kā jūs varat redzēt, šeit viss ir HTML ka pārlūks varētu apstrādāt Wikipedia. Bet, ja Es turpinu ritināšanu šeit, tas, ko es redzu augšā - wow, tur ir daudz HTML Wikipedia - bet tas, ko es redzu augšā šeit ir šis 200 statusa kods atšķirībā no 301, ko es redzēju agrāk. Un paziņo, ka tā ir jauka draudzīgu OK blakus tai. Tātad tas ir kā labs statusa kodu. Tas, ka 200 numuru izskatās pazīstami? Jā, jo, kad man bija simpler.js, Es uzrakstīju 200 tur. Tātad, kas ir būtībā sakot pateikt pārlūku vai kurš mēģina nokļūt Tas, ka viņi bija veiksmīgas. Vai šāda veida kā mēs bijuši veiksmīgi too. Un tur ir šī veida īpašu sintaksi Javascript, lai deklarētu karte no šiem taustiņiem, piemēram, satura tipam un šīs vērtības, piemēram, teksta līdzenumā. Tātad, ja paskatās reakciju, kas mums atgriezos no Wikipedia, pirms - Es esmu gatavojas izmēģināt, lai ritinātu up nedaudz ātrāk - jums ir šīs atslēgas, piemēram, servera un šīs vērtības Apache. Tātad jūs esat ieguvuši atslēgas un vērtības. Un jūs varat norādīt to Mezglu, ko sūtīt atpakaļ. Tātad tas ir faktiski veida, dažās veidus, un dažos veidos, tas nav tiešām, bet tas ir nedaudz zemāks līmenis kā PHP kodu, kas jums varētu būt rakstot P noteikti septiņi jo PHP un Apache veida rūpēties par dažu šīs lietas jums. PHP, jūs varat ignorēt noklusējuma uzvedību, rakstot savas galvenes. Bet ar to vajadzībām, mēs rakstīt no mūsu pašu galvenes. Tātad tas, ka līnija ir jēga visi, rakstīt galvas līnija? OK. Awesome. Tātad, ko es daru, ir man beigt atbildes pasakot hello world. OK. Bet tas ir tikai funkcija sauc pieprasījuma apstrādātājiem. Tāpēc tagad es tiešām ir sava veida darīt kaut kas ar šo funkciju, vai ne? Tātad, šeit to, ko es daru, ir, ka tas tiek līnija, kas nav Var servera vienāds HTTP.create serveris, un tad es pāriet pieprasījuma apdarinātājs. Tātad tas ir sava veida mezglā veidā radot serveri. Un paziņo, ka es esmu iet pieprasījumā apdarinātājs. Tātad šī stāsta createServer funkcija, ko es gribu, lai jūs, lai mani serveris, un, kad tas serveris saņem atbildes, man vajag, lai tu nosaukt šo pieprasīt apdarinātājs funkciju. OK? Tāpēc, ka līnija ir diezgan daudz apdari uzreiz. Tātad VAR serveris līnija ir darīts labi pēc tam, kad jūs darīt, ka diezgan daudz. Es domāju, tas ir jāizveido dažas iekšējās valsts, zināt, ka jums būtu zvans, ka pieprasījums apdarinātājs funkciju, bet tas nav gatavojas sēdēt tur un teiksim ir lietotājam nosūtīts me pieprasījums vēl? Vai lietotājs man atsūtīja pieprasījumu vēl? Tāpēc tas nebloķē. OK? Tātad, ko tas būs jādara, ir tas būtībā Tagad veikalos rādītājs šo kodu, Šis pieprasījums kopējs funkciju, un pēc tam darbosies šo kodu, ja kāds iesniedz pieprasījumu. Un tad mēs server.listen. 1337 ir diezgan patvaļīgi. Man nebija īpaša iemesla picking šo numuru. Tas bija pilnīgi nejauši. Bet tas tikai norāda portu. Tāpēc lielākā daļa web serveri jūs redzēsiet, ka viņi izmantot ostas 80, jo tas ir veids, , piemēram konvencijas. Tātad, ja es eju uz kaut ko līdzīgu, Es nezinu, Wikipedia.org, un man kolu 8 - oh wow, jūs nevarat redzēt. Piedod. Bet ja es daru Wikipedia - Es uzrakstīšu to šeit tikai tāpēc, ka tas ir skaidrs, uz kameru. Bet, ja es to ņemtu pārlūkprogrammā ar resnās 80, kas norāda dodieties uz Wikipedia.org ostā 80. Tātad, tas ir tāpat, kā Amerikas Savienotās Valstis ir vairākas ostas, piemēram, kur jūs varat nosūtīt lietas, kas veida. Tātad, tas ir tāpat kā iet uz šo konkrēto vietu šajā serverī. OK. Tāpēc es vienkārši izvēlējās 1337. Tur ir vesela virkne skaitļu ka jūs varat izvēlēties. Tas nebija pilnīgi īpašs. Bet to, ko es esmu gatavojas darīt tagad ir es esmu gatavojas palaist mezglā. Ļaujiet man faktiski stājas ka pāris līnijas uz leju, lai jūs varētu redzēt to. Es esmu gatavojas darīt mezglā, un es esmu gatavojas palaist simpler.js. Un mēs runājam par to, kā iegūt Mezglu izveidota mazliet. Bet tagad tas ir tikai darbojas serverī. Tātad viena lieta, mēs varam mēģināt, kas nedrīkst būt, ka aizraujoši ir mēs varam faktiski mēģināt piekļūt to Curl. Tāpēc es varu darīt Curl, un mana Mašīna ir vietējā uzņēmēja. Jūs arī redzēt šo rakstīts kā šis reizēm. Vietējā uzņēmēja un 127.0.0.1 ir laipni no kā jūsu mājas datora. Tātad, tas ir tāpat kā runāt ar savu datoru. OK. Un tad es varu teikt 1337. Tātad, ja man palaist šo līniju kodu, tā saka hello world. Un, ja es gribēju redzēt, ka sīkumi, kas bija satura tipu tekstu plain vai kāds, es pat varētu likt šo šeit. Un paziņo, ka tā saka OK. Un man ir teksta līdzenumu. Un tad tur ir sava veida viss cits sīkumi, kas Mezgls būs pievienot tur par mani. Tas nav super svarīgi. Es domāju, ka ir kaut kāda veida tehnisko aspekti Tajā ir sava veida atdzist runāt, bet tikai, lai parādītu tu, man ir arī tiesības tos mainītu apkārt. Tāpēc es varu tikai piebilst ķekars stuff, piemēram, ka. Un tad tagad, ja es paskatos manā izeja, tā, ka. Tātad šie galvenes nozīmē dažas lietas pārlūkiem un lietām, piemēram, ka. Un galvenes var būtībā pateikt pārlūkprogrammu kā reaģēt uz kaut ko. Ja jūs esat kādreiz dzirdējuši par cookies pirms vai, ja jūs esat kādreiz bijis kaitina ar web lapu, kurā cookies, vai ieslēgts sīkdatņu bloku vai kaut kā tā. Jūs faktiski var iestatīt sīkfailus Šajās galvenes. Lai viņi pateiks pārlūkā, kā uzvedība dažos gadījumos. OK. Tā, ka bija simpler.js. Vai kāds ir kādi jautājumi šajā pirmkoda fails? OK. Atdzist. Tāpēc pieņemsim noņemt r no tā un apskatīt simple.js. Tātad tas ir diezgan daudz pati programma. Es tikai uzrakstīju to nedaudz savādāk jo es gribēju, lai sakārtotu un izcelt dažas iezīmes JavaScript. Tā ievēroju, ka pieprasījuma apstrādātājiem funkcija ir pilnībā izzudis. Ak Yep, jūs ir jautājums? Mērķauditorija: Jā, argumenti , kas tiek nodota, ka funkcija, kas viņi ir? KEVIN SCHMID: Tātad tie ir JavaScript objekti. Jo Node.js dokumentāciju, tā būtībā saka to, ko metodes pieejami uz tiem. Mums vienkārši gadīties, ka piekļuve Šo metodi sauc rakstīt galvu un beigas un sīkumi, piemēram, ka. Bet tur ir vesels bars vairāk metodes. Un, piemēram, kā viens no tiem jo īpaši attiecībā uz REC, jūs varat darīt, kaut kas līdzīgs rec.method kas būs pateikt, vai tas ir HTTP saņemt vai HTTP POST pieprasījumus un lietas, piemēram, ka. Tātad tur ir visi dažādu veidu īpašības, bet viņi abi JavaScript objekti, un viņi vienkārši ir , kas uz tām funkcijām, kas jums var rakstīt lietas. OK? Tāpēc ievērosiet, ka pieprasījuma apstrādātājiem ir pilnīgi pagājis. Bet kodu, kas man bija pieprasījumā apdarinātājs ir joprojām. Man joprojām ir šī res.writeHead un man joprojām ir šī res.end. Un ko tas ir piemērs, kas JavaScript ir šī ideja anonīms funkcija. un anonīms ir kā montāžas nosaukumu par to, jo tas burtiski nav ir nosaukums. Nav funkcija pieprasījums apdarinātājs tur. Nav nosaukuma, bet tas joprojām ir veikt arguments. Tāpēc es joprojām got rec un res. Un man vēl ir kods. Tas ir pilnīgi naudas sodu JavaScript kodu. Lai es varētu pasludināt funkciju bez nepārprotami dodot tai nosaukumu. Tas ir nedaudz mulsinoši sākumā. Ir daži, piemēram, noderīgas lietas ka jūs varat darīt ar šie anonīmi funkcijas. Vai kāds ir kādi jautājumi par to, vai tas ir OK, lai tikai tagad, kārtot tikai pieņemt, ka tas darīs to pašu? Yep? Mērķauditorija: Vai funkcijas vispirms klases JavaScript? KEVIN SCHMID: Tie ir pirmais klases JavaScript. Un tikai zinām, ka šie jēdzieni iet uz anonīmu funkciju, piemēram, tas attiecas uz JavaScript, kas jums var rakstīt savu galīgo projektā interneta pārlūku too. Tā, piemēram, javascript pārlūkprogramma, tas ir arī nedaudz notikums brauc tādā nozīmē, ka tas, ko jūs ir, ir tad, kad lietotājs noklikšķina uz šo pogu, es gribu, lai jūs palaist šo kodu. Tātad, tas ir paša veida idejas klienta pusē, kad peles klikšķi, vai viņi peli pār kādu attēlu uz jūsu mājas lapa, palaist šo kodu. Kas var pieteikties uz serveriem. Tātad tas ir veids, piemēram, aizraujošu Iemesls, kāpēc JavaScript ir patiešām piemēroti vai daži cilvēki domā, tas ir piemērots valodu šāda veida Pasākums vadītājs servera, jo jums ir šie anonīmi funkcijas. Jums ir visa ideja par Tas asinhrono kodu. OK. Kāds ir kādi jautājumi? OK. Tā, ka bija simple.js. Tāpēc aplūkosim vēl vienu vai pāris vairāk. Tāpēc tas ir sleep.js. Tātad, ir kāds pazīstams ar C funkcija gulēt? No varbūt vienu no iepriekšējām nodarbībām vai kaut kas tamlīdzīgs? Vārdu sakot, jūs varat iet uz es domāju, sekunžu skaitu vai, ja jūs izmantojat U miega vairākas milisekundes vai nanoseconds. Un būtībā programma būs tikai apstāties darbojas šajā laika sprīdī. Tiesības? Un tad tas būs mosties vēlāk, un tad tas būs tikai turpināt darboties programmu. Tāpēc šis serveris veida dod iespaidu guļ. Tāpēc paziņojums, ka mums ir tāds pats res.writeHead 200 ar galveni, kā agrāk, bet tad mēs aicinām šo funkcija sauc iestatīt izslēgšanas. Noteikt timeout ir pieejams arī Jūsu interneta pārlūks Google Chrome vai Safari vai neatkarīgi. Un būtībā, ko tas dara šeit tas ir ņemot ar funkciju. Paziņojumu, atkal, tas ir anonīms funkcija. Tātad tas ir veida atdzist, jo mēs esam izmantojot anonīmu funkciju ietvaros anonīmu funkciju, kas var būt mazliet dīvaini. Bet tas ir ņemot šo funkciju, kas ir būtībā sakot - un kā tas darbi ir 5000 milisekundes, es gribu jums, lai izpildītu šo funkciju, kas vienkārši beidzas reaģēšanas un raksta hey. Tāpēc tas rada iespaidu, ka, piemēram, guļ, bet kā tas patiesībā darbojas, mēs palaist cauri Šī līnija ir ļoti ātri. Mēs esam tikai rakstiski kaut ko. Un tad mēs arī palaist cauri Šī līnija ir ļoti ātri. Tāpēc mēs faktiski gatavojas jāgaida piecas sekundes. Mēs esam tikai gatavojas palaist šo kodu uzreiz. Un tad tur ir, atkal, tas maz notikums cilpa, kas tagad ir šī lieta reģistriem, kas būtībā ir tikai pastāvīgi iet pa apli un skatoties uz pulksteni vienotu diegi un sakot, ir piecas sekundes pagājis vēl? Un tad, kad redz, ka otrais roka ir pārvietots, piemēram piecām sekundēm vai neatkarīgi, tad pamostas un saka: oh, kas man ir jādara? Oh man palaist šo kodu. Un tad tas notiek, lai palaist res.end hey. Tātad vēlreiz, mēs nekad gaida šeit. Tātad, tas nav, ka šis kods iekšpusē šī funkcija ir gatavojas veikt piecus sekundes, lai palaistu. Šis kods darbosies diezgan daudz uzreiz, vismaz attiecībā pret piecas sekundes, ka mēs runājām par agrāk pirms tam. Tik vienkārši, lai parādītu to darbībā, Es varu darīt Node.sleep.js. Un tomēr es izjaukt kaut ko? Iespējams. Piedodiet. Let 's redzēt, ko mēs varam darīt, lai atrisinātu šo. OK. Tāpēc noteikti izmantot Node.js. Es esmu tikai kidding. OK. Tikai viens sek. OK. Es zinu, kas tas ir. Tātad jautājums ir, ka citi mani tab šeit, es biju darbojas Node jau ka pati adrese, 1337. Tā kļūda, ka šo izmeta, ja mēs skatāmies pie tā reālā cieši, ir adrese izmantot, EADDRINUSE. Tāpēc man jau bija, izmantojot 1337 šeit. Tātad, ja es izslēdziet to off, un tad es tagad mēģināt palaist to, cerams, viss būs labi. OK. Tātad, jums var būt tikai viena lieta veida klausīšanās par ostas vienlaicīgi. Vēl viens risinājums būtu bijis par mani vienkārši rediģēt šo programmu un veikt tas ir, piemēram, 1338 vai kaut ko piemēram, ka. Bet tagad miegs darbojas. Tātad, pieņemsim, faktiski mēģina to ārā pārlūks šo laiku, jo tas ir nedaudz unexciting redzēt tā terminālī. Tāpēc es esmu tikai gatavojas iet, ka 127 adrese atkal 1337. Un, ja jūs varat redzēt to - Es nezinu, ja jūs varat - bet mana pārlūkprogramma ir ņemot ļoti, ļoti ilgi laiks, lai slodze, vai, piemēram, piecām sekundēm. Un tad pēc tam tas beidzot beidzās atbildi. Un jūs nevarat redzēt, jo lieta pārvieto pa maz, bet, ja es drīkstu Tas nedaudz mazāks, jums var redzēt, tā saka hey. Tāpēc es saņēmu hey, bet pēc piecām sekundēm. Un tas varētu būt nedaudz tīrāku, lai redzētu tas šeit terminālā, tāpēc es esmu gatavojas darīt - pieņemsim to darīt šeit - Darīsim Curl šo adresi atkal ar 1337. Un es tikko veida ir sēdēt Šeit piecas sekundes. Bet paziņo, ka serveris var pieņemt jaunus risinājumus. Tāpēc tas drukā hey. Un demo tas, būtībā to, ko Es varu darīt šajā citā tab - tāpēc pieņemsim, ka man tas citā tab, Es esmu gatavojas darīt Curl un tas pats lieta vēlreiz. Un es esmu gatavojas izmēģināt, lai kick šos džeku tajā pašā laikā. Tāpēc es esmu gatavojas darīt, un es esmu gatavojas rase nekā šeit, un es esmu gatavojas darīt to vēlreiz. Un pieņemsim darīt tā, lai jūs var redzēt gan no tiem. Ka viens drukāts hey, un ka viens drukāts hey visu ceļu pie - pieņemsim to darīt šo eksperimentu vēlreiz. Patiesībā, pieņemsim izmantot šo triks, ja tas ir OK. Tāpēc es esmu gatavojas izmantot shell lieta, ka ļauj man būtībā palaist divas kopijas Šīs programmas paralēli. Tā tas būs palaist pirmo programmu un Otrā programma paralēli. Tāpēc tagad, ja es nospiediet Enter, tas notiek lai šis lūgums diezgan daudz uzreiz, tajā pašā laikā. Tāpēc dosim šo shot. Tāpēc tagad paziņojums saka divus procesus. Un, ja jūs esat ieinteresēti, ka 27,000 skaits ir būtībā process ID. Un tad ievērosiet, viņi drukāts hey tajā pašā laikā. Tas nebija kā mums bija jāgaida piecus sekundes vienu, un tad pēc tam, piecas sekundes vēlāk saņemtu otro. Tāpēc, ka ir sava veida, dažos veidos, tas ir nav īsti pierādījumi, bet tas ir intuitīvs pierādījumi, ka tā ir ne tikai kā gaida piecas sekundes, bloķējot visu pavediens. Labi atdzesē. Tāpēc Aaron uzdeva jautājumu agrāk, ka bija arī kas notiks, ja mēs kaut ko darīt - Yep? Mērķauditorija: Pagaidiet. Kā tas atšķiras no printf buferis, lai gan? Vai nav tā automātiski darīt? Kāpēc mums būtu jāuztraucas par to? KEVIN SCHMID: Ak, vai jūs varētu saka, ka vēl vienu reizi? Mērķauditorija: Vai nepatīk printf buferi darīt tieši to pašu? KEVIN SCHMID: printf buferis? Mērķauditorija: Jā. OK. Nebija vienā no viktorīnas tie bija runā par to, kā, ja jums taisnība printf kaut ko, un tad ir tā pauze vienu otrkārt, un tad jums ir tā cilpa desmit reizes, tas būs jāgaida desmit sekundes un tad printf viss kopā? KEVIN SCHMID: Ak, OK. Mērķauditorija: Vai tas dara pats lieta tam šajā gadījumā? KEVIN SCHMID: Tātad jautājums bija būtībā vienā no iepriekšējo viktorīnas vai kaut ko, tur bija jautājums, kas būtībā, ja jūs sakāt Drukas F 10 lietas laikā un pēc tam gulēja tāpat kā process drukāšanas tiem out, beigās, kādu iemeslu dēļ, tas būtu vienkārši dump tiem visiem, kas uz ekrāna. Tātad tur ir sava veida divu atšķirīgu koncepcijas šeit. Tāpēc es domāju, viena lieta ir tas, ka šajā gadījumā mums ir darīšana ar divām dažādām veida cilvēki jautā serveri lietām, tajā pašā laikā. Un iemesls tam, ka printf veida gaida, piemēram, ka, un izgāž to visu ārā uzreiz ir vairāk saistīta ar kā printf veida - tā kā printf ir faktiski īstenot, ir tas būtībā ir runāt ar operētājsistēmu rakstīt kas stuff ar konsoli. Tāpēc tā nevēlas darīt visu, kas sīkumi uzreiz, kad jūs sakāt printf daži virkne, jo tas varētu saņemt dārgi, ja tas ir darīt, ka katru reizi. Tātad, ja jūs printf hey, savu programmu tiešām var nedrukāt, ka uzreiz ar konsoli. Tā varētu teikt, OK, es uzrakstīju to. Un tad veida gaidīt, lai jūs varētu sniegt tā nedaudz vairāk pirms faktiski rakstiski to, ar konsoli. Tā iemesla dēļ, ka tas bija gadījumā - un tas ir sava veida nesaistītiem ar miegu - ir tas, ka miegs bija sava veida tikko ievadīts, lai apliecinātu Fakts, ka tā nav rakstīt tā sinhroni. Bet iemesls tam ir tikai sniegumu tā, ka jums nav darīt, ka daudz kontaktu ar operētājsistēma. Bet šeit, ko mēs patiešām cenšas darīt ar šo miega lieta ir tikai šovs ka tad, kad mums ir divi cilvēki apmeklē šajā mājas lapā, tas nav gatavojas likt tos līnijas, kur tas notiek, lai pateikt Man ir, lai palīdzētu jums, un tad, kad es esmu pilnībā pabeigts palīdzot jums pēc šīm piecas sekundes, tad es esmu gatavojas pāriet uz nākamo personu. Tātad pirmais personas lūgums nav sasiet šo notikumu cilpa ja tas ir jēga. Bet šeit ir faktiski piemērs kaut ko, kas būs tie līdz pasākuma cilpu. Tātad, šeit ir briesmīgs funkcija aprēķināt n-Fibonacci. Tas ir burtiski sliktāk, kā jūs varat aprēķināt n-Fibonači numuru. Un tas ir faktiski tikai atzīt ja tas nāca no, tur tiešām - Es domāju, jūs varat mēģināt iet atrast - bet tur ir kā ļoti ilgstoša blog post, ka kāds rakstīja. Tā kā viens no tiem Reddit lietām. Bet kāds kritizēja Node.js, un viņi izmanto to kā piemēru. Tāpēc es veida gribēju tikai parādīt divas dažādām perspektīvām tikai, lai iegūtu vispārīga izpratne par jēdzienu Aiz šīm divām lietām. Bet tas ir izvēlēts kā tikai briesmīgs, briesmīgi neefektīva skaitļošanas intensīvā veidā, lai aprēķinātu n Fibonacci numuru. Tik vienkārši kā sānu piezīmi, kāpēc ir tas briesmīgi patīk kādā veidā? Yep? Mērķauditorija: Say jūs sākat , kas ar 1000. 1000 sadalās 999 un 998. Katrs no šī sadalās divām lietām. Katrs no šī sadalās divām lietām. KEVIN SCHMID: Right. Mērķauditorija: Visu ceļu uz leju. KEVIN SCHMID: Tieši tā. Tik vienkārši atkārtot kamerai, ja es aicināt melot par, piemēram, 1000 vai kaut ko piemēram, ka, tas, protams, ne mazāk kā vai vienāds ar vienu, tāpēc es esmu gatavojas iet uz šo citam lietas, un tad es eju zvanīt melot 999 plus melot 998. Un tad diezgan daudz viss, kas darbs, kas melot 999 tas ir veida šajā līmenī. Ja jūs iet uz leju, tas ir vēl lieku par to, bet, ja jūs vienkārši domāju skaitļošanas melot 998 izpaužas mums diezgan tuvu melot 999. Tāpēc mums patiešām vajadzētu būt nedaudz vairāk gudrs par to, kā mēs veida atkārtoti tiem, bet mēs neesam atkārtoti šīs lietas vispār. Tātad jūs varat iedomāties šo gigantisku, gigantisku koku, kas ir vienkārši briesmīgs. Bet anyway, OK. Tā, ka bija melot. Tas tikai ņem, bet, lai palaistu. Yep? Mērķauditorija: [nedzirdama]. KEVIN SCHMID: Ak, vai jūs varētu atkārtot jautājumu? Mērķauditorija: [nedzirdama]. KEVIN SCHMID: Ak tā tas ir tikai kods , kas būs sava veida uz servera pusē. Tāpēc tas nebūs atrasts pārlūkprogrammā vai neko. Tas ir būtībā kas mums ir tas, ka tad, kad lietotājs šeit diezgan daudz markas to pieprasījums atkal, kad mēs veida iesniegt pieprasījumu, mēs ejam, lai izsauktu šo funkciju uz servera pusē. Un tad mēs iegūtu rezultātu atpakaļ no zvana šo funkciju. Un tad mēs vienkārši izdrukāt tā, lai lietotājam. Tāpēc lietotājam nav īsti galā Šī funkcija ir pārāk daudz. Bija tas, ka jautājums? Vai tas ir jēga? OK. Atdzist. Tātad vēlreiz, mēs šo visu res.writeHead lieta, kur mēs izdrukāt galvenes. Un tad es galu atbildes, ko darīt burvju numurs ir melot 45. Tāpēc pieņemsim tikai palaist šo serveri. Tāpēc es esmu gatavojas darīt mezglu fib.js. Tāpēc tagad mans melot serveris darbojas. Un tad šeit, es esmu gatavojas darīt vienu no šiem. OK? Tāpēc es esmu tikai gatavojas teikt, Curl. Tātad, tas ir gatavojas veikt nedaudz, bet tomēr cerams, ka drīz tas beigsies un tas būs drukāt, ka 45. Fibonači numuru. Mērķauditorija: [nedzirdama]. KEVIN SCHMID: Tas būtu paveikt diezgan drīz. Lai tā būtu piecas līdz sešas sekundes. Es nezinu, kas ir tikai V8 ir super ātri, bet jebkurā gadījumā tas ir ļoti īss piemērs, un ar nolūku neelegants of non-trivial aprēķins. Tātad, pēc kāda laika, tas nav saņemt šo. Bet tagad, kas notiks, ja es to, ka tāda paša veida Eksperiments kā agrāk, kad es veicu divi lūgumi, tajā pašā laikā? Tātad, šeit es esmu gatavojas Curl par šī adrese, un es esmu gatavojas darīt citas Curl. Un atcerēties, kad mēs to darījām, lai gulēt serveri, kad mēs būtībā bija tā pēc piecām sekundēm, tie diezgan daudz gan atgriezās tiesības aptuveni tajā pašā laikā. Tāpēc tas nav īpaši piesaistīti. Bet pieņemsim, izmēģiniet to tagad. Labi, tāpēc mēs saņēmām mūsu divus procesus. Atcerieties, tie ir procesa ID. Tas būs nedaudz neērts, kamēr mēs apstāsies. Tāpēc pieņemsim tikai palikt šeit un gaidīt. Tāpēc viens no viņiem ir jānāk atpakaļ pēc tam, piemēram, - Labi, tāpēc viens atnāca atpakaļ. Bet tad kāpēc ne otrs viens nāk atpakaļ tikai vēl? Yep? Mērķauditorija: Serveris nevar darīt neko kamēr tas skaitļošanas šo liels skaits. KEVIN SCHMID: Right. Tātad atbilde bija tikai, ka serveris tiešām neko nevar darīt, kamēr tas ir skaitļošanas šo Fibonači numuru. Tāpēc tagad es tikko saņēmu manas divas lietas atpakaļ. Bet es domāju, tikai domāt par kodu nedaudz vairāk, kā tas strādā un viss. Tātad, šī funkcija šeit ir kods, kas Es esmu teicis šo serveri, lai darbotos, ja tā saņem jaunu ienākošo pieprasījumu. Tāpēc tas ir tikai gatavojas palaist caur šo visu kodu, un tad tas ir gatavojas iet atpakaļ uz pasākuma cilpu, un pēc tam turpināt pārbaudot jauniem notikumiem. Vārdu sakot, tas, ko mēs esam notiek ir serveris klausoties jaunas lietas. Pirmā persona lūdz par to, kas 45 ir. Mēs palaist šo kodu, lai aprēķinātu to. Šis kods aizņem apmēram piecas līdz sešām sekundēm, lai palaistu. Tad mēs ejam atpakaļ uz notikumu cilpa un pārbaudīt jaunos pieprasījumus. Tātad šis ir piemērs tam, kā, ja jums ir lietas, kas ir tā saucamā aprēķināt saistošs, vai izmantot daudz skaitļošanas, nav varas, bet, piemēram, ir skaitļošanas intensīva - Es domāju, viena lieta ko teikt par šo ir ka šī funkcija dara pilnīgi, par lielāko daļu, diezgan lietderīgs darbs labi. Visu laiku, ka šī atzvanu funkcija darbojas, tas bija diezgan daudz izdevumu lielāko daļu sava laika vienkārši skaitļošanas, ka n-tais Fibonači numuru. Bet mums bija tikai vienu pavedienu lai risinātu ar. Jo Apache modeli, kad divi cilvēki iesniegusi pieprasījumu, lai saņemtu melot 45, mēs būtu divas dažādas tēmas. Un tad operētājsistēma darbs būtu bijis, vai lietotāja līmenī kods, kas pārvalda tēmas, būtu esam bijis šķēle, kas līdzi CPU, vai pat, ja Jums bija vairāki CPU, izplatīt tās vienmērīgi visā CPU tā, ka viņi abi apdare aptuveni tajā pašā laikā. Tik vienkārši, lai parādītu jums, kā mēs varam atrisināt of - un tas nav kopējais perfect risinājums, bet gan sava veida, kā mēs varam padara atgriezties šeit un darīt mazliet labāk. Tātad, ko man šeit ir programma, ko sauc Melot C. Un tas galvenokārt izmanto vēl viens no mezgla moduļu sauc Bērnu Process modulis. Tāpēc es esmu iekļauts, ka augšējā veida no kā es varētu darīt mārciņu ietver bērns process.h vai kaut ko. Tagad man ir pieeja šai KP mainīgajam kas ir visas manas funkcijas. Tātad tagad, ko es daru ar šo atbildi apdarinātājs ir Es skrienu šo programmu dot slash melot 45. Tātad, ko es esmu darījusi - un es esmu tikai gatavojas iziet no šīs programmas mazliet - ir es esmu uzrakstījis C programmu, kas būtībā aprēķina n Fibonacci numuru. Tātad, šeit ir tikai programma, es esmu uzrakstījis C, kas aprēķina šo. Es varu sastādīt to, un es varu palaist tas pie komandrindas. Un tas notiek, lai aprēķinātu 45 Fibonacci numuru. Tāpēc pamanāt, ka tas vienkārši notiek diezgan daudz, cik ilgi. Es, iespējams, varētu izmantot domuzīme 03 līdz optimizēt to, vai kaut kas tamlīdzīgs, bet es tikai darīju tāpat regulāri kompilators iestatījumi. Un tas izdrukā to ārā. Bet tagad, ko es veida, kā to izdarīt? Ak piedodiet, nepareizi failu. Tāpēc es darīt to pašu stuff ar header kā iepriekš. Tad man darīt cp.exec. Tātad, ko tas gatavojas darīt, ir tas gatavojas palaist šo programmu. Bet kā tas darbojas, ka tas nav gatavojas gaidīt šī programma, lai pabeigtu. Tā vienkārši būtībā saka izpildīt šo programmu. Vārdu sakot, ievadiet to komandrindas veida. Un tad, kad esat pabeidzis ar tas, palaist šo funkciju. Tāpēc tagad mēs veida saņemt šo viss atjaunots lieta tāpat kā mēs neesam gaidīt. Vai šāda veida jēga? Yep? Mērķauditorija: [dzirdams]? KEVIN SCHMID: Tātad tas faktiski atvērt jaunu procesu, lai to izdarītu. Tāpēc tas ir reāli, dažos veidos, ļaunums, nevis super ļauno, bet tā ir svarīgi pateikt, ka tas ir sava veida atgriežoties, no vienas puses, Apache modeli, kur mēs pavedieni un procesus katram pieprasījuma vai procesus katru pieprasījumu. Tātad tas ir sava veida analogs , ko Apache dara. Dažos gadījumos, tas būs tikai izmantot jaunu vītne, kas ir nedaudz vairāk gaismas svars nekā procesu, bet Apache varētu galu galā forking jaunu procesu kas ir sava veida, ko mēs darām šeit netieši darot dot slash melot 45. Un tad tādā gadījumā mēs veida rasties paši izdevumi procesu. Tāpēc šī ir tikai viena lieta, ko jūs varat darīt. Bet tikai lai pierādītu šāda veida darbību. Un šī diskusija ir tikai tiešām ir vērsta uz Iesniedzot šo programmu veida, kā veids, kā parādīt dažādas perspektīvas , kā veidot serveriem, piemēram, ka. Tāpēc tas darbojas, tad tagad, ja man tas atkal, es saņēmu divus procesa ID. Pieņemsim tikai runāt par lietas norādīt. Tāpēc paziņojums, ka viņi pakāpeniski. Tas ir forši. Jo tas bija 27.122 agrāk. Bet paziņojumu tagad, viņi atgriezās pie aptuveni tajā pašā laikā. Un tagad, labs jautājums jautāt par kāpēc bija, ka lieta ir, kuru darbs tas bija tagad veida padarītu šīs lietas veida spēlē godīgi ar katru citi, šie divi gadījumi dot slash melot 45, kas man uzbrauca vai Mezgls skrēja? Kas veida padara taisnīgi, ka viņi abi get veida balstīts palaist laiku? Mērķauditorija: [nedzirdama]. KEVIN SCHMID: Jā. Tātad būtībā, kad man dot slash melot 45 vai kaut kas tamlīdzīgs, tagad tas ir veida līdz operētājsistēmas apstrādāt runtime šo programmu. Un tagad tā var ieplānot tos uz dažādiem CPU vai to var ieplānot tos. Tas var šķēle up laiku, ka viens CPU izpaužas tā, vai tie saņem palaist uz vienu CPU. Tā ka ir ideja, ka. Vai tas ir jēga, lai visiem? Tāpēc tagad Node nav īsti spēlē daļa sadalot šos uzdevumus. OK. Tātad tas ir gandrīz tas piemērus. Es tikai gribēju parādīt vēl viena lieta tāpēc, ka daļa no tā līdz šim ir bijusi nav pilnīgi super praktisks dažos gadījumos. Es varu iedomāties, nāk mājās pēc šīs runāt un kaut ko un saka, piemēram, labi es veida saņēmu no šīs runāt, ka Es varu dot Fibonači serveri mans galīgais projekts. Tātad, šeit ir tikai sava veida vēl viens piemērs , kas, cerams, būs - varbūt ne, bet varbūt - nedaudz vairāk veida, kas attiecas uz gala projektiem un domāšana uz priekšu par lietām, piemēram, ka. Tāpēc tas ir chat.js. Tātad šis ir veids kā kādu paraugu servera pusē kods, kas jūs varētu izmantot, lai izveidot nelielu tērzēšanas serveri, piemēram, Jums var būt redzējis Facebook Chat vai neatkarīgi. Tāpēc es nesaku, tas ir, piemēram, Facebook Tērzēt, bet tas ir sava veida piemēram, labi - varbūt nav labi, bet varbūt labi - sākumpunkts tērzēšanas serveri jūsu mājas lapā par galīgo projektu. Tātad, pieņemsim apskatīt to, ko tas dara. Tāpēc mēs esam iegūt šo īpašo lietu augšpusē, tas RPV SiO vienāds nepieciešama Socket.IO. Tāpēc šī ir vēl viena lieta, ka tas nav faktiski nāk komplektā ar Mezglā, bet jūs varat instalēt to. Tā ir mezgls moduli. Tātad, tas ir tāpat kā daži pagarinājumu mezglā. SocketIO patiesībā patiešām veida atdzist. Tas ir abstrakcija, kas būtībā to, ko tas ir, ir tas ļauj ir šī plūsma komunikācijas starp web pārlūkprogrammu un tīmekļa serveri. Tātad, lielākā daļa līdz šim, mēs esam bija tie ļoti ātri vienu sekundi vai divas Otrā saziņa starp web pārlūkprogrammu un tīmekļa serveri. Tāpēc tas ir būtībā iet uz google.com, get sīkumi, nosūtīt to atpakaļ, un pēc tam mēs esam darījuši. Mēs nekad runāt atkal, līdz lietotājs veidiem kaut ko citu. Bet ko Socket.IO un līdzīga veida lietas - un SocketIO faktiski ir viens par lietām, kas ir būvēts uz kā WebSocket kas ir sava veida pieejams kā daļa no HTML5 - , kas ļauj jums ir šo turpināt dialogu. Un tas ir ļoti noderīgi tērzēšanas serveri veida lieta, jo tas ir veids kā turpināt dialogu daži veidi, jo, ja jūs čatā ar kādu, jūs tagad var vienkārši sūtīt ziņu lejup caurulē, un pēc tam serveris var nosūtīt īsziņu uz leju caurules ar citu personu, jūs čatā ar. Un tad jūs varat saņemt šo apmainīties, piemēram, ka. Tātad tas ir veids, kas SocketIO ir labs. Iemesls, ka SocketIO izmanto WebSockets jo viena lieta ir tā, ka Papildus vienkārši veco WebSockets, tas arī dažas viltības, lai būtībā padara pārlūkprogrammu saderīgu. Tātad pārlūkiem, piemēram, Internet Explorer diemžēl neatbalsta WebSockets pa labi no lodziņa. Tāpēc tā izmanto kāda cita veida atdzist veikls lietas ar Adobe Flash, lai ļautu Jums ir pārrobežu pārlūku atbalsts. Tātad, tas ir patiešām noderīga. Un patiesībā, es zinu, es esmu veida darbojas uz laiku šeit, bet CS50 Apspriest, vai esat kādreiz redzējuši kaut ko piemēram, es nezinu, tukša tik un tā ir Atbildot uz šo ziņu, vai kaut kas tāpat, ka funkcija? Tas ir SocketIO. Tātad, ja kāds sāk rakstīt apspriest lodziņu, lai veiktu atbildi vai kaut ko, jūsu pārlūks, kas ir sauc SocketIO izstaro sava veida notikums, kas saka, ka kāds ir Atbildot uz šo amatu. Tad serveris saka OK, kas man ir jādara? Nu tagad man ir pateikt šos citi puiši kuri ir CS50 Apspriest meklē Šajā post, ka kāds ir atbildēt. Tātad tas ir veids, kas SocketIO ir labi, šo pastāvīgo veida plūsma dialogu. OK. Tātad, ko es esmu šeit - un mēs esam tikai gatavojas ignorēt savienojumi masīvs lai mazliet - ko es daru, ir man cits klausīties. Tātad tas ir tikai veids, Socket.IO ir sakot, pieņemsim klausīties šo ostu. Un tad es to izdarītu par savienojumu. Tātad tas ir tikai pamatā Socket IO s veids, kā pateikt, kad mēs saņemam savienojums, es gribu jums palaist šo kodu. Un paziņo, ka tā vietā, rec un res pagāja tur man Socket. Un tas Socket ideja ir būtībā tas lieta, ka jūs varat rakstīt un lasīt no tā ir lietotāja ziņas iespējams. Un ziņas, ka jūs varētu nosūtīt var iet caur šo Socket. Vai tas ir jēga? Tātad, tas ir tas turpinās lieta. Tātad, ko es daru, ir man zvanīt Socket.emit. Un izdala notiek diezgan daudz divi argumenti. Pirmais arguments ir virkne vienkārši pārstāv tādu tipu lieta, jūs, kas izstaro. Tātad šajā gadījumā, es esmu izmantošanu Šī virkne jaunu ziņu. Un tas ir tikai būtībā sakot, ka šī veida lieta, ko es esmu sūtīšanu, ir jauna ziņa. Lai jūs varētu klausīties īpaša veida piemēram, jaunu ziņu vai kāds izmantojot dot tālāk. Tā savienojumu un lietotāju nosūtīti tur, ja paskatās, kur mēs aicinām dot tālāk, tie ir citi virknes, kas pārstāv veidi lietotāju ziņas. Tātad, tas ir būtībā, jūs varat būt šo EMIT viena no šīm ziņojumu veidiem, un tad kaut ko darīt, reaģējot uz viena no šīm ziņojumu veidiem Tāpēc es esmu, kas izstaro šo jauno ziņojumu. Mēs ejam, lai ignorēt connections.push uz otru. Bet tad es saku, Socket.on lietotājs nosūtīja. Tāpēc tagad tas ir veids, piemēram, ja lietotājs sūta man ziņu, es gribu palaist šo kodu. Un paziņo, ka tas anonīms funkcija lieto šo mainīgo sauc par datu, kas būtībā notiek ir lietotāja vēstījumu. Tāpēc tagad pieņemsim veida runāt par savienojumi masīvs. Tāpēc tas ir paredzēts tērzēšanas klients kur būtībā visi ir sava veida in pats tērzēšanas telpā. Tātad būtībā, kas mums nepieciešams, lai saglabātu apkārt ir daži masīvs, kas būtībā pārstāv visus cilvēkus čatā daži veidi, ja tas ir jēga. Tiesības? Tāpēc, ka mums ir nepieciešams zināt, kas ir tie puiši ir, lai mēs varētu nosūtīt viņiem ziņas ka citi cilvēki nosūtīt mums. Tātad, ko šis kods tas ir tad, kad lietotājs nosūta ziņojumu - tas ir veids notikums - Mēs ejam, lai palaistu šo kodu. Un tas, ko mēs darām, ir, mēs palaist caur šo masīvs, ka mēs esam pieprasījuši savienojumu. Un diezgan daudz par katru savienojumu izņemot vienu, kas ir mūsu, tas ir ko tas kods saka, mēs nosūtīsim jaunu ziņojums ar šo pievienoto ziņu informāciju. Tātad, ja jūs pamanāt šeit, ko es darīju, kad lietotājs faktiski padara jaunu savienojums esmu pievienojis ar JavaScript.push metode, tas ir būtībā vienkārši sakot, piemēram, pievienot ka Socket kā vērtība stāšanās mūsu savienojumi masīvs. Tāpēc tagad, kad tas kods darbojas, tā būs nosūtīt lietas, kas īpaši savienojumus. Tāpēc tas var būt labs sākuma punkts lai padarītu tērzēšanas serveri vai kaut kas līdzīgs. Un veids atdzist lieta ir tā, ka kods, kas jūs redzēt šeit, piemēram, par un izstarot un lietas, piemēram, ir tāds pats veida JavaScript kodu, ka jūs būtu rakstīt pārlūkā mijiedarboties ar serveri. Tātad, tāpēc SocketIO ir sava veida veikls un noderīgi šādā veidā. Ak, un tikai vēl viena lieta, ļoti ātri. Tur bija CS50 galīgais projekts pagājušajā gadā kas būtībā īsteno tērzēšanu serveris Node.js. Es domāju, ka tas Harvardchats.org bet es neesmu - OK. Es neesmu pārliecināts, ko URL ir, bet Es varu nosūtīt, ka no tam. Bet tas ir sava veida atdzist, ko jūs varat darīt ar Node.js. Tāpēc es ceru, ka, kopumā, jūs guys ir labu sajūtu par to, kas Node.js ir noderīga un kā jūs varētu varbūt pieteikties uz savu galīgo projektu. Man būs izsūtot daži vairāk resursiem kopā ar to. Un paldies par ierašanos. Paldies. [Aplausi]