KEVIN Schmid: Tere kõigile. Tere tulemast CS50 seminar edasi Node.js. Minu nimi on Kevin. Olen CS50 TF. Ja ma olen omamoodi nagu väga põnevil sellest seminar. Arvan Node.js on väga lahe. Loodan, et see seminar on võimalik kasutada kui hea, ma arvan, hüppelaud mõned oma lõpliku projekti kui olete huvitatud, kasutades midagi Node.js. Me justkui alustada seminar maha räägi natuke selline taust mastaapsuse perspektiivid Node.js ja seejärel me liikuda mõned koodi näited. Ja ma pean koodi veebilehel, ja saate vaadata koodi. Ja pärast seminari, ma ajame juttu kuidas saab luua Node.js arvutisse. OK. Niisiis alustame. Nii et ma arvan, et ma lihtsalt tahan rääkida veebiserverite tegelikult esimene. Ja alustada seda arutelu, I põhimõtteliselt on skeem, mis on pärit õpik kasutada CS61, mis Võrrand näitab interaktsiooni kliendi vahelise protsess, nagu veebi brauseri või nagu teie eesmärk kliendi või midagi sellist, ja veebiserver. Seega selline sarnaneb pilt, mida nägin loengu Kolmapäev, kus põhiliselt on meil mõned klient protsess nagu Google Chrome. Ja siis esimene etapp on klient saadab taotluse. Nii et võib olla midagi hästi olgem külastada, ma ei tea, CS50.net. Nii väljastame selle taotluse. Ja kas keegi mäleta nime protokoll, mis määrab, kuidas seda taotlus peab olema üles ehitatud? Yep. Publik: [kuuldamatu]. KEVIN Schmid: Täpselt. Nii et see on nagu HTTP, eks? Nii et põhimõtteliselt kirjelduse, kuidas et taotlus tuleks tegelikult ette välja, sest lõpuks päev et taotlus on tõesti lihtsalt meeldib string, et põhimõtteliselt ütleb, et ma tahan seda. Ja spetsifikatsioon eest, mis on HTTP. Nii et nagu protokoll. Nii siis server saab et taotluse. Nii kutid on web server installeeritud aastal CS50 aparaat. See on Apache. Ja sel nädalal, kui te töötate probleem pani seitse, saate tegelikult töötavad selle veebiserver. Nii server saab seda taotlust ja siis peab selline kriimustada oma head ja öelda, nagu ka see, mida ma teen seda? Nii selle põhjal, mida ta otsustab seda teha, siis ta pöörduma mingi ressursi. Ja see allikas võiks olla palju erinevaid asju. Ühe, see võib olla just nagu staatiline HTML faili. Nii et see võib olla lihtsalt nagu mõned HTML et on nagu oma isiklik veebileht. See võib olla staatiline fail nagu pilt või nagu film, mis sul on. Võiks isegi rääkida mingi andmebaas nagu MySQL andmebaasi. Nii et see ei pea alati suhelda koos ressurss, kuid Mõnel juhul võiks. Niisiis, mida ta kavatseb teha pärast, mis on see läheb tagasi saata vastuse. Ja vastuseks sellele on Samuti täpsustada poolt HTTP. Siis saab klient saada. See võib tükkideks rebida ja neid töödelda. Ja siis sa saad veebilehe nagu Google või CS50.net või mida iganes sa läksid. OK? Nii et see on põhiline vastasmõjud me tegelema. Ja me päris palju läheb keskendudes selle osa koostoime, server. OK. Lahe. Kas kellelgi on mingeid küsimusi nii palju? OK. Nii nagu me ütlesime, web server saab Selle HTTP taotluse ja seejärel väljastab selle HTTP vastus. Ja nagu me rääkisime enne, CS50 seade veebiserver Apache. Nii et kui te töötate P pani seitse, sa lähed koos töötama Apache veebiserver. Sa ei pea tegelikult töötavad Apache otse liiga palju. Sa justkui konfigureerida Apache vähe Kui määrate virtual hosts või v võõrustajate ja me jõuame et, et natuke. Aga põhimõtteliselt, Apache veebiserver loodud töötama PHP objekti out of the box. Mis siis tegelikult juhtub, on see, kui sa lähed ühe oma veebilehed nagu, ütleme, kohalik host kaldkriipsuga index.php või midagi, on teie brauser saadab, et taotluse ja seejärel Apache istub seal ja saab aru, et teha. Ja tegevus on täita et koodi index.php ja siis saadab selle tagasi. Nii et seal on see. Nii et me justkui sellest rääkinud. Nii et see võib lihtsalt olla staatiline fail või käivitada mõned PHP kood ja seejärel teema vastus. Nii siis üldine küsimus, mis võib tulla kuni on hästi, kuidas me üldse tegelema koos võttes mitu kasutajat samal ajal? Kujutlege, kui sa olid kirjalikult web server, kui teil on olnud web server et sa üritasid kirjutada midagi nagu C või midagi sellist, Põhimõtteliselt saab mõelda, kuidas seal võiks olla mingi kood, mis saaks taotluse, kuid siis ta peab tegema kõik selle töö peal. See võib olla näiteks ühendust andmebaasi või midagi sellist. Eks ole? Ja siis ta teeks seda liiki töötlemise ja seejärel tagasi saadetud vastus. Nii et nagu kõrge tasandil ülevaate. Aga see ei ole kohe selge, kuidas saab teha nii, et kaks inimest või isegi 1000 inimesed võiksid töötada oma veebiserver samaaegselt. Seega lahendus, et Apache kasutab nimetatakse teemad või protsesse. Nii et te võib-olla kuulnud need tingimused enne. See on OK, kui sa ei ole, vaid lihtsalt arvan, umbes niidid või protsesside võimalusi operatsioonisüsteemi või kasutaja programmi või midagi sellist või veebiserver et omamoodi täita mitmeid asja korraga. Nii et te võib-olla kuulnud sõna nagu niidid täitmine. Nii et see on selline nagu sa oled omamoodi asju koos. Ja kui sa oled näinud kasti oma laptop, või midagi sellist, mitmesoonelised, mida saate teha, on teil võimalik käivitada kahte erinevat niidid eri osad CPU nii et nad suudaksid tegelikult juhtub samal ajal. Nii et see on tõesti võimas. Ja see on omamoodi Apache lahendust sellele probleemile. Nii on seal selline nagu mingeid probleeme seda lähenemist, kuigi? Nii et ma arvan, et ma nagu kirjutasin need seal. Aga nad mõlemad omamoodi kasutada palju mälu. See on väga kallis luua niit või protsessi. Ja osa põhjendus on, et lihtsalt nagu siis, kui sa kasutad C programm nagu teie peamine ja siis kõned teine ​​funktsioon, mis on mingi virna. Nii mida nõuavad ka täiesti eraldi korsten, mis võib olla üsna suur. Ja kui te võite ette kujutada, millel tonni kasutajad oma veebilehel, siis oleks palju erinevaid teemasid. See on palju korstnad hallata ja säilitada. Nii et see on suur mälumaht. Ja siis ka, ütleme, et sul on ainult üks CPU või oletame, et sul on rohkem teemasid kui sul need Multicores. Eks ole? Nii oletame, et sul oli 10 niidid ja tuli ainult viis protsessoriga. Sa omamoodi on seda asja teha, kus sa vahetada praegune See, kes töötab, sest sa ei suuda kõiki 10 korraga. Ja seda nimetatakse kontekstis lüliti. Ja seda mõistet on tegelikult paar erinevates kontekstides, kuid olgem lihtsalt ma arvan et kui üleminek kahe niidid. See võib olla üsna kallis, sest Põhimõtteliselt, mida sa pead tegema, on teil on lõpetada see, mida sa teed, välja arvatud seisund, mis töötab niit, ja siis minna kuhugi mujale. Nii ei igaüks omamoodi näha motivatsiooni, miks niidid ja protsesse võib olla natuke kogukas? Ja kas teil on küsimusi? OK. Lahe. Kas kellelgi on küsimusi? OK. Nii et kui me võtame sammu tagasi teist, seal on nagu tähelepanek, et saame teha umbes palju veebirakendusi. Ja see on tõesti nii palju neid tegelikult ei tee seda palju kasulikku töö sees niit. Niisiis on keegi algas P pani seitse üldse? Nii et sa tahad olla kirjeldama mõned osad? Kas olete töötanud login või midagi sellist? Publik: Ei. KEVIN Schmid: OK. Pole viga. Vabandust. Aga põhimõtteliselt, et P komplekti, sa oled kavatsetakse teha palju sorti päringuid andmebaasi, et saaksin teavet selle andmebaasi. Ja mida teie kood on plaanid teha, mida see Apache protsessi või et Apache niit läheb tegema samas on ta pöörduda andmebaasis on see omamoodi kavatse olla istub seal ja see saab olema ootab andmebaasi vastata. Nüüd, mis ei pruugi tunduda, et suur tegelema, sest andmebaas on teie CS50 seade, eks? Aga seal on mingi võrgu latentsus seal, sest nüüd veebis server on ka oma taotluse Andmebaasi suhelda andmebaasi ja siis saad selle andmed tagasi. Nüüd see on nagu hästi oota mind, ma olen lähen võtan midagi andmebaasi ja siis on palju oodanud toimub. Kas see on mõtet? Ja mõned asjad, see ei ole nii halb. Kui see lihtsalt on näiteks juurdepääsu mälu, et ei meeldi jube I / O latency. Ja kui ma ütlen, I / O latentsus, mida ma viidates on nagu mingit moodi sisend väljund. Aga avada faili kettal, nagu kui ma tahtsin olla staatiline HTML faili, mis on minu veebilehe või midagi sellist, mul on peatus natuke, lugesin, et fail sealt disk ja seejärel et protsess Ma ootan. Ma ei tee kasulikku tööd. See ei ole tõsi kõike, kuid see on levinud rakendused nagu P komplekt seitse ja palju rakendusi et sa ei ole tegelikult teeme palju mõtlemist. Ja kui ma ütlen mõtlemine, ma mõtlen nagu arvutilingvistika töö. Nii arvutuslikke töö võiks olla midagi nagu, ütleme, et sa tahtsid kirjutada web server et lihtsalt arvutada nda Fibonacci number. See ei kõla eriti fun veebiserver. Nagu ma ei oota, et sait Järgmise Facebook, kuid see on teatud liiki arvutuslikke töö. Ja te võite ette kujutada, mis asendab nimetatud koos mõne muu huvitav arvutuslikku tööd. Oletame, et sa kirjutasid midagi et arvutada kraadi lahususe kaks inimest või midagi sellist. Nii et ei kaasne mingit arvutamise, eks? Ja isegi siis, mida teha, et sul on veel teha palju oodanud äkki teil on päringu andmebaasi vaadata up, kes on sõbrad, kes või midagi sellist. Seega on selline mõiste algoritmide tööd. Kas see on mõtet? Kas kellelgi on küsimusi? Oh ja ma arvan, et ma panen chat serverid seal sest jututuba serverid on omamoodi üks hea näide sellest. Chat server ei ole teha palju mõtlemist. See lihtsalt peab ootama inimesi sõnumeid saata ja siis, kui nad saadavad neid. OK? Nii lihtsalt sulgege uuesti Apache ja sarnane veebiserverite niimoodi kahvel palju niidid ja protsessid, mis saab selline raiskav. Nii et ma arvan, et küsimus, mis võib tulla sellest, kas meil on vaja olla mitme lõime ja protsesside uurimiseks? Mis siis, kui meil oli just üks? Teeme liiki maalida pilti mida see näeks. Teeme kasutada ainult üks teema. OK? Nii lihtsalt ette kujutada seda ühe teema. Oletame, et me tõesti ei tee et palju kasulikku - ja kui ma ütlen kasulik, ma mõtlen arvutuslikku tööd - neis mitme lõime enne. Teeme liiki koondada Kõike arvesse üks niit. Mis siis, kui meil oli üks niit, mis liiki lihtsalt läheb ümber silmuse ja pidevalt kontrolli tegid midagi uus juhtuda. Nii näiteks, midagi uut juhtunud võib tähendada, et mul on midagi tagasi andmebaasi või keegi saata minu uus HTTP taotluse. Nii et need on omamoodi sündmused mis juhtub, eks? Ja mis ma teha saan, kui need uued asju on see sama niit täitmise, selle ühe niit täitmine, võin helistada mõned kood, mis käsitleks seda konkreetset asja. Nii näiteks, kui mul on midagi tagasi andmebaasist, ma võiks joosta mu väike arvutuslikke osa, mis tegelikult lihtsalt valmistab asi Kirjuta kasutajale tagasi. Nii teeb sellist mõtet? Aga millised on tegelikult tähendab selline? Eks ole? Sest me oleme kirjutanud palju koodi, mis - ja ma lihtsalt hüpata edasi slaidide, kui see on OK. Nii et kui sa ei pahanda, ma olen lihtsalt kavatse astuda samm tagasi. Nii selline asi on nimetatakse sündmuse ahela. OK? Ja see on selline põhi Idee Node.js. Mis siis Node.js tegelikult teeb nagu web server on seal ühe niidi mis on põhiliselt ringi tsüklina nagu kui ühte liiki alla kapuuts Node.js see pidevalt kontrollides, kas me saame midagi uut? Ja siis see kestab käitleja et te luua. Aga hea küsimus küsida, kuidas me saame teha seda juhtub olemasolevate asju? Nii panin rida C koodi siin, et põhimõtteliselt tundub, et see avatakse fail, eks? I Ta lihtsalt tuli välja album. Pidin avama oma uue faili. Niisiis, kuidas meie C kood tegutsevad - ja ma arvan, et põhjus, miks ma valisin faili oli sest see on selline määral on I / O tööd, mida me teinud oleme C selles mõttes, et seal on sisend väljund. Nii et me nimetame seda koodi kas see f avatud. Ja siis järgmisel real meie programm, saame töötada koos f. Nii oleks see näiteks midagi see on nagu sünkroonse või blokeerides sest selle esimene rida seal me ootame, kuni me saada fail lahti. Seega on teine ​​rida, me teame, et me suudab töötada f, kuid see tähendab, et et teine ​​rida ei saa tõesti joosta kuni esimene rida on tehtud. Kas see on mõtet? Nii et see oleks halb panna aasta sündmus. Ja selle põhjuseks on see, et sedalaadi ootab, eks? Nii see tagasi meid tagasi sama asi. Ja nüüd me isegi ei pea kasuks mitme lõime või protsesse, sest meil üks niit Node.js. Kas see mõttekas kõik? Publik: Oota. Mis on asendaja? KEVIN Schmid: Oh, nii et jah. Ma lähen, et saada asendamine. OK. Mis siis, kui meil on midagi mis nägi välja nagu see on? Mis siis nüüd muutsin f avada vähe? Nii et ma olen möödaminnes samas kaks argumenti nagu enne. Ma ikka armastan uus laul et ta tuli välja. Aga ma möödaminnes Kolmas asi, mis on see muutuja nimega kood. Aga milline on kood tegelikult Selles kontekstis? Kas see on nagu tavaline C muutuja? See on funktsioon, mis? Ja see võib olla veidi imelik, sest Ma tegelikult nagu praegu kulgeb toimida teise funktsiooni. Nii paar asja, mida meeles pidada seda. Üks, ma ei tegelikult kutsudes koodi funktsiooni. Nii et sa ei näe koodi vasakule paren, parem paren. Ma lihtsalt möödaminnes kood. Ja C, mida see tegelikult ei on mulle viit, et tegelik kood ja siis võib see käivitada. Aga mõtle selle peale, kui sa oled kulgeb koodi käivitumise et fail on avatud. Aga mida see tähendab, et nüüd mu ülejäänud programmi, mis võiks teha muud kraami, võib jätkata teed muid stuff kuigi me tõesti ei oodata, kuid lihtsalt taga meie peade, et kui see fail on avatud, run, et kood ülaosas. Kas see on mõtet? Ja nüüd idee Node.js on see, et koodi teha asju koos f osa peaks olema üsna lühike ja lihtne ja arusaadav ja tegelikult ei ole väga arvutuslikult intensiivne. See võib-olla avada teise faili, kuid et peaks olema päris kiire sest see tuleb lihtsalt öelda seda veel f avada ja siis nimetame seda teiste koodi. Nii lihtsalt täiesti selge, f avatud, mis teeb uue Katy Perry laulu Valmis mp3, et läheb päris palju kohe tagasi. Ja siis me võime lihtsalt jätkata teed muud asjad, sest kõik, mis nüüd f Avatud kõne ei ei ütle põhimõtteliselt aluseks f avatud koodiga seda faili avada ja kui sa oled teinud avamisel faili või kui sa saad selle tagasi, seejärel käivitada selle koodi. Aga see ei ole tegelikult töötavad, et kood. Ja teil oli küsimus? Publik: Sa näisid viitavat, mõned korda, et lisades arvutuslikult intensiivne kood omamoodi murda [Kuuldamatu] juhitud süsteem. [Kuuldamatu]? KEVIN Schmid: See on hea küsimus. Nii et ma tegelikult näide sellest, kuidas siis võiks integreerida arvutuslikult intensiivne koodi natuke. Nii et kui me saame koodi näiteid, Ma kindlasti tõmmata, et üks. Kas see on OK? Aitäh. Mis oli su nimi on? Publik: Aaron. KEVIN Schmid: Aaron avab väga hea punkt, mis seisneb selles, et kui mul oleks mõned arvutusintensiivseid kood teha asju koos f osa, ülejäänud Minu programm ei tööta ja ei saa kuulata Uute taotluste või midagi, kuni kõik mis värk on lõppenud. Nii et kui ma olen kirjalikult Sõlme kood üldiselt kui me ei tee midagi, et ma lähen soovitada hiljem, kui me vaatame koodi näiteid, et ma pean olema kindel, et minu kood ei nöörima Selle ürituse silmus. Kas see on mõtet? OK. Lahe. Nii Node.js pakub see raamistik, mis saad ehitada need sündmustepõhine servereid. Nii et see on nende liiki asünkroonne mitte-blokeeriv I / O raamatukogud, samas standard C teegid, et me oleme olnud töötamisel, nagu siis, kui sa lihtsalt neid kasutada samamoodi, et oleme kasutanud neid f avaneb ja asjad, need takistavad sest siis tegelikult on oodata et faili avada. Aga Node.js annab teile, et ja see põhiliselt sidemed arvesse Google'i V8 JavaScript mootori, mis on põhjuseks et Chrome on nii kiire töötlevate JavaScript sest on see V8 mootor. Nii et ma tean, et see kõlab nagu üks neist WWDC arendaja konverentside asi kus nad lihtsalt visata hunnik kirja number asjad töötlejatele ja öelda, et see on nii lahe. Aga see on lahe, et nad ei seda sellepärast, et JavaScript - või äkki kui sa ei ole tuttav JavaScript veel, sest meil ei ole olnud loenguid ta - aga JavaScript on tõlgendada keel. Ja see on oluline punkt ka. Seega on oluline, et meie web Serverid olema kiire, eks? Ja kui me lihtsalt töötab JavaScript koodi, mis oli tõlgendada lihtsalt iga vana tõlgi see võib olla aeglane. Nii Sõlme kasu võttes seda super kiire V8 tõlk. Ja ma ei tea, kas nad nimetasid seda sest V8 laksu otsaette asi, kuid OK. Nii et ma olen valmis mõned näited sellel aadressil. Pärast seminari Ma omamoodi kavatse rääkida, kuidas saad Sõlme komplekt up, aga praegu ma lihtsalt omamoodi taha kõndida läbi mõned koodi näited. Nii et kui soovite jälgida mööda, kõik Lähtekood on saadaval siin. OK? Nii et ma jätan selle URL sinna natuke. Ja siis ma lihtsalt läheb lülitub terminal. Kas kõik on hea, see link? Nii et ma lähen minema üle minu terminal siin. Nii et siin on kood, mis Mul on täna. Miks me ei võiks alustada simpler.js faili? Teine asi on see, et kõik käesoleva kood läheb kirjutatakse JavaScript mida võib või ei pruugi olla tuttav. Ma arvan, et paar asja on, et palju JavaScript kood on selline süntaks ja struktuur on väga sarnane C, siis võite omamoodi buffee nagu lähete mööda. Olen proovinud kirjutada palju alustades kood seda nii, et on sarnane C, nii et see veidi enam loetav. Aga nagu me edu, ma tulen näidates mõningaid täiendavaid funktsioonid JavaScript et on omamoodi lahe. Aga vaatame seda proovi programmi. Ma arvan, et kõik on ära lõigatud on. Ma lihtsalt määrata, et tõeline kiiresti, kui see on OK või mitte. Ma ei tea, mida see tegema hakkab. Kas see natuke parem? Kas te näete var ja värki? OK. Nii et esimene rida on nagu JavaScript versioon muutuja deklaratsioon. Nii lihtsalt rõhutada, mida see annaks nägema C. Nii et see on nagu mulle öelda indeks võrdub kolm või midagi sellist. Nii et ma ei täpsustanud tüüp. JavaScript ei ole tüüpi, kuid see on väga dünaamiliselt trükitud iseloomuga, nii ei näe mingit tüüpi ta. Nii see lihtsalt on var. See on nagu muutuv. OK? Ja ma helistan selle muutuja HTTP. Ja mu paremal pool, on mul väljend, mida ma tahan panna HTTP. Ja see ütleb nõuavad HTTP. Nii et see on omamoodi sarnased hulka. See on veidi rohkem nagu võimas kui lisada mõttes, et hõlmata oleks lihtsalt kopeerida ja kleepida kaudu faili funktsiooni prototüüpe või sõltumata tüübist mõisted. Aga vaja tegelikult toimub saada meile koodi. Nii et sa ei mõtle seda kui importiva mõned koodi. Nii kuskil Node.js moodul süsteem või mis iganes nad on kõik see HTTP server koodi, et ma olen lihtsalt edev see minu enda isiklikuks kasutamiseks selles programmis. OK? Nii siis on mul selle funktsiooni mis ma olen kirjutanud. Ja teate ma ei ole, et täpsustada tagastamise tüüp või liik argumendid uuesti. Nii omamoodi lahti kirjutada selline tunne. Kaks argumendid, mida ta võtab, päring ja vastus. Nii et põhimõtteliselt on nagu tuttav pilt, mis meil oli ekraanile enne, sest saame selle palve, et me on kasutaja. Ja siis on meil vastus, et saame kirjutada asju. Nii et esimene rida selles ei res.writeHead 200 ja siis see sisutüüp tekst tavaline. Teeme panema selle peale natuke. Teeme lihtsalt keskenduda res.write vähe. Nii kirjutab on põhimõtteliselt, ja kirjutada pea, on lihtsalt kuidas omamoodi kirjutada asjad vastust. OK? Nii kirjutab pea, kui keegi mäletab HTTP loeng, te poisid mäletan päised top HTTP asi? Nii et miks ei ma lihtsalt demo päised reaalne kiire. Kas see kasulik? Või peaksime justkui - OK. Muidugi. Nii et kui oma brauseri läheb google.com või midagi sellist, seal on tegelikult veidi rohkem - see on nagu saladus - seal on nagu natuke rohkem infot mis tuleb läbi toru kui lihtsalt väike otsing ja kõik. Nii, et näidata teile, ma lähen kasutada programmi nimega Curl. OK? Nii et see on midagi, mida saab käivitada Mac OSX käsureal või seade või mis iganes. Ja nii kui ma Curl HTTP google.com, Ma lähen, et näha HTML. Ja see on õigluse, vaid HTML et justkui käsib teil suunata www kui teie brauser ei toeta automaatselt hakkama ümbersuunamist. Nii et see on lihtsalt HTML, kuid ma lähen lisada Curl see sidekriips I lipp. OK? Ja see läheb näidata mind päiseid. Nii et see on ka teavet, mis pärineb kaudu, kui ma saan selle vastuse. OK? Nii ülaosas näete seda HTTP 301 liiguvad pidevalt. Ja see on selline oluline, sest see viitab seisundi kood. Nii 301 siin on staatuse kood, mis on põhimõtteliselt ainult täisarv mis ütleb brauseri või kes on lugedes seda, kui sa teeskled, et sa oled brauser ja te näete seda, põhimõtteliselt nüüd, kui te vaatate et ja sa näed 301, sa tead, et ma ei midagi erilist, mis põhineb 301, või midagi erilist juhtunud põhineb 301. Nii ta ütleb püsivalt liigutatud. Ja siis põhimõtteliselt on meil hunnik põhiväärtus paari. Me saame asukoht on www.google.com. Ja siis selline see kõik muud asjad, aga põhimõtteliselt, mis koht on ütlus on uus asukoht on www.google.com. Nüüd, kui sul minna google.com, siis saad omamoodi näha brauseri tüüpi vilkuv teine ​​ja siis suunata sind õigus tagasi www.google.com. Nii vastused võivad sisaldada need pealkirjad. Ja paar asja välja tuua. Ütleme olime tegelikult edukas külastades veebilehekülge. Nii et lubage mul minna - Mis on hea veebileht? Ma olen halb mõtlemine hea veebilehed kohapeal. Publik: Wikipedia. KEVIN Schmid: OK. Teeme Wikipedia. Nii et siin ma liigutada. Oh oota. Ma olin? Jah, ma olen. OK. Nii et ma sain teha www. Nii et ma lähen tegema, www. Ja nagu näete, siin on kõik HTML et brauser ei töödelda Wikipedia. Aga kui ma saan kerida, siia Mida ma näen ülaosas - wow, seal on palju HTML Wikipedia - kuid mida ma näen üleval siin see 200 status code erinevalt 301, mis ma nägin varem. Ja teate, et see on kena sõbralik OK kõrval. Nii et see on nagu hea seisundi kood. Kas see 200 number tundub tuttav? Jah, sest kui ma tegin simpler.js, Kirjutasin 200 seal. Nii et põhimõtteliselt öelda öelda brauseri või kes üritab saada seda, et nad olid edukad. Või et selline nagu me olid edukad ka. Ja seal on selline eriline süntaks Javascript tunnistamise kaart neid klahve nagu sisutüübi ja need väärtused nagu teksti tavaline. Nii et kui te vaatate vastuseks, et me tulin tagasi Wikipedia enne, - Ma lähen, et proovida, et kerida natuke kiiremini - sul on need võtmed nagu server ja need väärtused Apache. Nii et sul on võtmed ja väärtused. Ja te võite täpsustada selle Sõlm, mida tagasi saata. Seega see on tegelikult selline, mõnel moel, ja mõnes mõttes see ei ole tõesti, aga see on veidi madalam kui PHP koodi, mis sa võiksid olla kirjalikult P pani seitse sest PHP ja Apache omamoodi hoolitseda mõned need asjad sinu jaoks. PHP, saate vaike käitumist kirjalikult oma pealkirjad. Kuid käesoleva saame kirjutada välja oma pealkirjad. Nii see siis line mõtet kõik, kirjutada pea line? OK. Lahe. Niisiis, mida ma teha, on mul lõpuks vastus öeldes tere. OK. Aga see on lihtsalt funktsioon nimega päringu menetleja. Nüüd ma tegelikult on omamoodi teha midagi selle funktsiooni, eks? Nii et siin, mida ma teen seal on see line, mis ei var server võrdsete HTTP.create server, ja siis ma läbima teabenõude käsitleja. Nii et see on omamoodi sõlm võimalus luua serveris. Ja teate, mida ma möödaminnes taotluses käitleja. Nii et see räägib createServer funktsioon, mida ma tahan, et sa mind server, ja kui see server saab vastus, ma tahan, et sa nimetad seda päringu menetleja funktsioon. OK? Nii et joon päris palju lõpeb kohe. Nii var server rida paremalt pärast sa seda päris palju. Ma mõtlen, et see on loodud teatud sisemine riik on teada, et teil oleks helistada, et päringu menetleja ülesanne, kuid ta ei kavatse seal istuda ja ütleme on kasutaja saadetud minu taotluse veel? Kas kasutaja saatis mulle taotlust veel? Nii et see ei takista. OK? Niisiis, mida see teha on see põhimõtteliselt nüüd salvestab osuti selle koodi, Selle päringu menetleja funktsioon ja seejärel kestab see kood, kui keegi teeb taotluse. Ja siis me teeme server.listen. 1337 on üsna meelevaldne. Mul polnud erilist põhjust korjamiseks, et number. See oli täiesti juhuslik. Aga see lihtsalt täpsustab sadama. Nii et enamik veebiserverite näete, et nad kasutada port 80, sest see on omamoodi samasuguste konventsioon. Nii et kui ma lähen midagi, Ma ei tea, Wikipedia.org, ja panin koolon 8 - oh wow, sa ei näe seda. Vabandust. Aga kui ma teen Wikipedia - Ma kirjutan selle siia lihtsalt selleks, et see on selge, kaamera. Aga kui ma seda arvesse brauseri koolon 80, mis täpsustab minna Wikipedia.org sadamas 80. Nii et see on nagu, kuidas Ameerika Ühendriigid on mitu sadamate nagu, kus saab saata asju omamoodi. Nii et see on nagu minna selle konkreetse koht selles serveris. OK. Nii et ma lihtsalt valis 1337. On terve hulk numbrid et saate valida. See ei olnud täiesti eriline. Aga mida ma teen nüüd on ma lähen jooksma sõlme. Lubage mul tegelikult selles paar liinid maha, nii et saate seda näha. Ma teen sõlme, ja ma olen jooksegi simpler.js. Ja siis me räägime, kuidas saada Sõlme loodud natuke. Aga nüüd on see lihtsalt töötab server. Nii et üks asi, mida me võib proovida, mida ei olla, et põnev on saame tegelikult üritada pääsu seda Curl. Ma võin teha lokke ja minu Masin on kohalik host. Näete ka selle kirjaliku niimoodi mõnikord. Kohalik host ja 127.0.0.1 on lahke kohta nagu oma kodus arvuti. Nii et see on nagu räägid oma arvutist. OK. Ja siis ma ei saa öelda 1337. Nii et kui ma saan seda rida koodi, ta ütleb tere. Ja kui ma tahtsin näha, et asjad, mis oli sisutüübi teksti liht-või mis iganes, ma võiks isegi selle siia pani. Ja teate, et see ei öelda OK. Ja mul on tekst tavaline. Ja siis on omamoodi kõik muu asju, mis sõlme lisada minu jaoks olemas. See pole super oluline. Ma mõtlen, et seal on mingi tehniline aspektide juures, mis on omamoodi lahe rääkida, kuid ainult selleks, et näidata sa, mul on ka õigus muuta need ümber. Ma võin vaid lisada kamp asju niimoodi. Ja siis nüüd, kui ma vaatan minu väljund, siis on see, et. Nii et need pealkirjad tähendab teatud asju brauserid ja asjad niimoodi. Ja pealkirjad on põhimõtteliselt öelda brauser kuidas vastata midagi. Kui olete kunagi kuulnud küpsised enne, või kui sa oled kunagi olnud pahane poolt veebilehe küpsiste seadistamine, või sisselülitatud cookie blokeerida või midagi sellist. Võite tegelikult küpsiseid Nende pealkirjad. Nii nad ütlevad brauser kuidas käitumist mingil juhul. OK. Nii et oli simpler.js. Kas kellelgi on küsimusi selle lähtekoodi faili? OK. Lahe. Teeme eemaldada r sellest ja vaata simple.js. Nii et see on üsna palju sama programmiga. Ma kirjutasin seda natuke teistmoodi sest ma tahtsin, et sortida esiletõstmise mõned funktsioonid JavaScript. Nii teate, et taotlus handler funktsioon on täiesti kadunud. Oh jah, sul oli küsimus? Publik: Jah, argumendid mis on vastu võetud selle funktsioon, mis need on? KEVIN Schmid: Nii et need on JavaScript objektid. In Node.js dokumentatsioon, see põhimõtteliselt ütleb milliseid meetodeid on saadaval neile. Me lihtsalt juhtub olema juurdepääs seda meetodit nimetatakse kirjutada pea ja lõpuks ja värki. Aga seal on terve hulk veel meetodeid. Ja näiteks nagu üks neist eelkõige rec, saate seda teha midagi rec.method mis öelda, kas see on HTTP GET või HTTP POST päringuid ja asjad niimoodi. Nii et seal on igasuguseid erinevaid omadused, kuid nad mõlemad JavaScript objektid ja nad lihtsalt on funktsioonid neile lisatud, et teil saab kirjutada asju. OK? Nii teate, et päringu menetleja on täiesti kadunud. Aga kood, mis mul oli taotluse käitleja on endiselt olemas. Mul on veel see res.writeHead ja mul on veel see res.end. Ja mis see on näide in JavaScript on see idee anonüümne funktsioon. ja anonüümsed nagu paigaldamise nimi jaoks, sest see sõna otseses mõttes ei nime. Ei ole nõudmine handler sinna. Tal ei ole nime, kuid siiski võtab argument. Nii et ma ikka sain rec ja res. Ja mul on veel kood. See on täiesti trahvi JavaScripti koodi. Ma võin tunnistada funktsioon ilma selgesõnaliselt andes talle nime. See on natuke segane alguses. Leidub nagu kasulikke asju , mida saate teha koos need anonüümsed funktsioonid. Kas kellelgi on mingeid küsimusi selle kohta, või on see OK lihtsalt, nüüd, omamoodi lihtsalt aktsepteerima, et see teeme sama asja? Yep? Publik: Kas funktsioone esimene klassi JavaScript? KEVIN Schmid: Nad on esimene klassi JavaScript. Ja lihtsalt tean, et need mõisted kulgeb anonüümne funktsioon nagu seda kohaldada JavaScript, et sa võib kirjutada oma lõpliku projekti veebilehitseja liiga. Nii näiteks JavaScript brauseri, see on ka mõnevõrra sündmus ajendatud selles mõttes, et mida sa on, kui kasutaja klõpsab seda nuppu, ma tahan, et sa jooksed selle koodi. Nii et see on sama liiki ideid kliendi poolel, kui hiireklõpsuga või nad hiirega üle teatud pilti oma veebilehe käivitada koodi. See ei kehti servereid. Nii et see on nagu põnev miks JavaScript on tõesti sobib või mõned inimesed arvavad, et see on Sobiva keele sedalaadi Kui juht server, sest sa oled need anonüümsed funktsioonid. Sul on kogu idee see asünkroonne kood. OK. Kas kellelgi on küsimusi? OK. Nii et oli simple.js. Nii vaatame veel üks või paar rohkem. Nii et see on sleep.js. Niisiis on keegi tuttav C funktsioon magada? Alates võibolla üks varasem loengud või midagi sellist? Nii et põhimõtteliselt saab läbida ka ma arvan sekundite arvu või kui te kasutate U magada millisekundid või nanoseconds. Ja põhimõtteliselt programm lihtsalt lõpetada töötab selle ajaga. Eks ole? Ja siis ärkavad lõpuks ja siis lihtsalt jätkata jooksvate programmi. Nii et see server omamoodi annab mulje magada. Nii teate, et meil on sama res.writeHead 200 päises kui varem, kuid siis me nimetades seda funktsiooni nimetatakse set timeout. Seadke ooteaeg on saadaval ka oma veebilehitseja Google Chrome või Safari või mis iganes. Ja põhimõtteliselt mida ta siin teeb on see võtab funktsioonis. Teate, jälle, see on anonüümne funktsioon. Nii et omamoodi lahe, sest me oleme kasutades anonüümne funktsiooni anonüümne funktsioon, mis võib olla veidi imelik. Aga see võtab, et funktsioon, mis on põhimõtteliselt öelda - ja kuidas see teosed on 5000 millisekundit, ma tahan teil täita selle funktsiooni, mis lihtsalt lõpetab reageerimise ja kirjutab hei. Nii et see jätab mulje nagu magab, kuid viis, kuidas seda tegelikult töötab, on me joosta see rida väga kiiresti. Me lihtsalt kirjalikult midagi. Ja siis ka jookseb läbi see rida väga kiiresti. Nii et me tegelikult ei kavatse ootama viis sekundit. Me lihtsalt jookseks Selle koodi koheselt. Ja siis on jälle see väike Kui loop et nüüd on see asi registreid, et põhimõtteliselt on lihtsalt pidevalt käin ringi ja vaadates kella ühe niit ja ütlus on viis sekundit edasi veel? Ja siis, kui ta näeb, et teine käsi on liikunud nagu viis sekundit või mis iganes, siis ärkab ja ütleb: oh, mida ma pean tegema? Oh mul on käivitada koodi. Ja siis see läheb joosta res.end hei. Nii et taas, me ei oodanud siin. Nii see ei ole, et see kood sees Selle funktsiooni saab võtta viis sekundit joosta. See kood töötab päris palju silmapilkselt vähemalt võrreldes viis sekundit, et me ei räägi kohta varem enne. Nii lihtsalt, et näidata see toimib, Ma võin teha Node.sleep.js. Ja kas ma segi ajama midagi? Võib-olla. Vabandust. Vaatame, mida saame teha, et seda parandada. OK. Seega kindlasti kasutada Node.js. Ma tegin lihtsalt nalja. OK. Lihtsalt üks sec. OK. Ma tean, mis see on. Seega on küsimus selles, et minu teisi tab siin, ma jooksin Sõlme juba et samal aadressil, 1337. Nii viga, et see viskas, kui me vaatame seda päris täpselt, on aadress kasutada, EADDRINUSE. Nii et ma kasutan juba 1337 siin. Nii et kui ma sulgeda selle ära ja siis ma nüüd proovite käivitada see loodetavasti kõik saab trahvi. OK. Nii saab olla ainult üks asi sort kuulamise kohta port korraga. Teine lahendus oleks olnud minu jaoks lihtsalt muuta, et programm ja teha see on nagu 1338 või midagi niimoodi. Aga nüüd magama töötab. Nii et tegelikult on seda proovida sisse brauseri seekord, sest see on vähe Jännityksetön näha see terminal. Nii et ma lähen lihtsalt minema, et 127 aadress uuesti 1337. Ja kui sa ei näe seda - Ma ei tea, kas saate - kuid minu brauseri võttes väga pikk aega laadida või nagu viis sekundit. Ja siis pärast seda, kui ta lõpuks lõpetas vastuse. Ja sa ei näe seda, sest asi liigub üle vähe, kuid kui ma teen see veidi väiksem, siis näen seda ütleb hei. Nii et ma sain Hei, aga viie sekundi jooksul. Ja see võib olla veidi puhtam näha see siin on terminal, nii et ma olen teeme - Teeme siin - Teeme Curl sellele aadressile uuesti 1337. Ja ma lihtsalt selline istuma siin viis sekundit. Aga teate, et server aktsepteerib uusi lahendusi. Nii et see prindib hei. Ja demo see, põhimõtteliselt mida Ma võin teha seda teiste tab - ütleme, et ma teen seda teises jaotises Ma lähen tegema, Curl ja sama asi uuesti. Ma lähen, et proovida lüüa neid poisid välja samal ajal. Nii et ma teen seda, ja ma olen kavatse rassi üle siin ja ma olen kavatse seda uuesti teha. Ja teeme seda nii, et te saab näha mõlemaid. See üks trükitud hei, ning et üks trükitud hei kõik viis - Teeme seda katset uuesti. Tegelikult kasutame seda trikk, kui see on OK. Nii et ma lähen kasutada koorega asi, võimaldab mul põhimõtteliselt kulgema kahes eksemplaris Selle programmi paralleelselt. Nii, et see käivitada esimene programm ja Teine programm paralleelselt. Nüüd, kui ma vajutage Enter, siis läheb teha selle taotluse päris palju silmapilkselt juures samal ajal. Nii anname selle maha. Nüüd märka seda ütleb kaks protsessi. Ja kui sa oled uudishimulik, et 27000 number on põhimõtteliselt protsessi ID. Ja siis märkate, nad trükitud hei samaaegselt. See ei olnud nagu meil tuli oodata viis sekundit ühe ja siis pärast seda, viis sekundit hiljem saad teise. Nii et on selline, mõnes mõttes on see ole tegelikult tõendeid, kuid see on intuitiivne tõendeid, et see ei ole lihtsalt nagu ootab viis sekundit ja blokeerimine kogu teema. OK cool. Aaron esitasin küsimuse varem, et oli hästi, mis siis, kui me ei tee midagi - Yep? Publik: Oota. Kuidas on see erinev printf puhver, kuigi? Kas see ei automaatselt teha? Miks me ei pea muretsema selle? KEVIN Schmid: Oh, sa võisid öelda, et veel üks kord? Publik: ei meeldi printf puhver teha täpselt sama asi? KEVIN Schmid: printf puhver? Publik: Jah. OK. Ei olnud üks viktoriinid olid räägi, kuidas, kui sa õige printf midagi ja siis on see paus üks teine, ja siis on see loop kümme korda, siis ootan kümme sekundit ja siis printf kõik koos? KEVIN Schmid: Oh, OK. Publik: Kas see teeb sama asi siis selles asjas? KEVIN Schmid: Nii et küsimus oli põhiliselt ühes endises viktoriinid või midagi, tekkis küsimus, et põhimõtteliselt, kui sa ütled print f 10 asjad korraga ja siis magas nagu printimist need välja, aasta lõpus mingil põhjusel see oleks lihtsalt prügimäele need kõik välja ekraanile. Nii et seal on selline kahe erineva mõisted siin. Nii et ma arvan, et üks asi on see, et see juhul on meil tegemist kahe erineva sort inimesi küsib server asju samal ajal. Ja põhjus, et printf liiki ootab niimoodi ja puistab kõik välja korraga on rohkem seotud kuidas printf liiki - nii kuidas printf on tegelikult rakendatud on see põhimõtteliselt peab räägi operatsioonisüsteemi kirjutada mis värk konsooliga. Nii et ta ei soovi teha kõik, et asjad kohe, kui ütlete printf mõned string, sest see võib saada kallis kui see on seda iga kord. Nii et kui te printf hei, teie programm ei pruugi tegelikult printida, et kohe konsooli. Võib öelda, OK, ma kirjutasin selle. Ja siis selline ootama teil anda see veidi enne tegelikku kirjutades seda konsooli. Nii seetõttu, et see oli nii - ja see on selline sõltumatu und - on see, et uni oli omamoodi lihtsalt süstitakse seal näidata Asjaolu, et ta ei kirjuta see sünkroonselt. Aga põhjus on lihtsalt tulemuslikkuse, nii et sa ei pea teha, et paljud kontaktid operatsioonisüsteemi. Aga siin, mida me tõesti püüame teha Selle magada asi on lihtsalt näidata et kui meil on kaks inimest, kes külastavad sellel veebilehel, see ei kavatse panna neid joon, kus ta läheb öelda Mul on sind aidata, ja siis, kui ma olen täiesti valmis, et aidata teil pärast nende viis sekundit, siis ma lähen liikuge järgmisele isikule. Nii et esimese isiku taotlus ei nöörima juhul loop kui see on mõistlik. Aga siin on tegelikult näide midagi, mis seob kuni sündmus loop. Nii et siin on jube funktsiooni arvutage nda Fibonacci. See on sõna otseses mõttes halvem, kuidas sa saad arvutage nda Fibonacci number. Ja see on tegelikult lihtsalt tunnistada , kust see tuli, seal on tegelikult - Ma mõtlen, et sa võid proovida minna leida - aga seal on nagu väga pikk blogi lisada, et keegi kirjutas. See on nagu üks neist Reddit asju. Aga keegi kritiseeris Node.js ja nad kasutasid seda kui näidet. Nii et ma sellist tahtnud lihtsalt näitan sulle kaks erinevaid vaatenurki lihtsalt saada üldised teadmised mõisted taga need kaks asja. Aga see on valitud lihtsalt jube, kohutavalt ebaefektiivne arvutuslikult intensiivselt arvutada nda Fibonacci number. Nii nagu pool tähele, miks on see jube nagu ühes suunas? Yep? Publik: Ütle, et alustada läbi 1000. 1000 jaguneb 999 ja 998. Kõik see jaguneb kahte asja. Kõik see jaguneb kahte asja. KEVIN Schmid: Õigus. Publik: Täiesti alla. KEVIN Schmid: Täpselt. Nii lihtsalt korrata kaamera, kui ma kutsuvad luiskama on nagu 1000 või midagi niimoodi, et see on ilmselt vähemalt või võrdne ühega, et ma lähen minna seda veel juhul, ja siis ma lähen helistada luiskama 999 pluss luiskama 998. Ja siis päris palju kõik, et töö luiskama 999 teeb, on objekti sellel tasemel. Kui sa lähed alla, see on isegi rohkem üleliigne kui, aga kui sa lihtsalt arvan, arvutid luiskama 998 saab meile üsna lähedal luiskama 999. Seega peaksime me tõesti olla natuke rohkem tark, kuidas me sellist taaskasutada need, kuid me ei taaskasutades need asjad üldse. Seega võite ette kujutada, see hiiglaslik, hiiglaslik puu see on lihtsalt jube. Aga ikkagi, OK. Nii et oli vale. See lihtsalt võtab aega joosta. Yep? Publik: [kuuldamatu]. KEVIN Schmid: Oh, sa võisid küsimust korrata? Publik: [kuuldamatu]. KEVIN Schmid: Oh nii et see on lihtsalt kood et see saab olema omamoodi kohta serveripoolne. Nii et see ei kavatse olla leitud brauseri või midagi. See on põhimõtteliselt see, mis meil on, et kui kasutaja siin päris palju marke oma taotluse uuesti, kui me omamoodi esitavad taotluse, me nimetame Selle funktsiooni serveripoolne. Ja siis me jõuame tulemus tagasi helistatakse, et funktsioon. Ja siis me lihtsalt printida selle alla. Nii et kasutaja ei ole tegelikult tegeleda Selle funktsiooni liiga palju. Kas see oli küsimus? Kas see on mõtet? OK. Lahe. Nii et taas, me teeme seda kogu res.writeHead asi, kui me välja printida päises. Ja siis ma lõpuks vastuse, tehes maagiline number on vale 45. Teeme lihtsalt käivitada server. Nii et ma lähen tegema Sõlme fib.js. Nüüd minu luiskama server töötab. Ja siis siin, ma lähen teha üks neist. OK? Nii et ma lihtsalt ütlen, Curl. Nii see läheb võtab natuke aega, kuid loodetavasti varsti see lõpeb ja see välja printida, et 45. Fibonacci number. Publik: [kuuldamatu]. KEVIN Schmid: see peaks saad teha päris kiiresti. Nii et see peaks võtma 5-6 sekundit. Ma ei tea, see on lihtsalt V8 on super kiiresti, kuid igal juhul on see lühike ülevaade ja sihilikult maitsetu ja mitte-triviaalne arvutusvõimsus. Nii et pärast mõnda aega, see ei saa sellest aru. Aga nüüd, kui ma tean, et sama liiki eksperimendi enne, kui ma saan teha kaks taotlust samal ajal? Nii et siin ma lähen lokke edasi et aadress, ja ma lähen, teha teise Curl. Ja pidage meeles, kui me tegime seda magada server, kui me põhimõtteliselt oli see viie sekundi jooksul, siis päris palju mõlemad tulid tagasi õigus umbes samal ajal. Nii et see ei olnud eriti sidunud. Aga proovime nüüd. OK, nii et me saime kaks protsessi. Jäta need on protsessi IDd. See saab olema vähe piinlik, kui me varisemine. Teeme lihtsalt siia jääda ja oodata. Nii et üks neist peaks tulema tagasi pärast nagu - OK, nii et üks tuli tagasi. Aga miks ei ole teise üks tagasi tulla lihtsalt veel? Yep? Publik: server ei saa midagi teha kuigi see arvuti nii suur number. KEVIN Schmid: Õigus. Seega vastus oli lihtsalt, et server tõesti ei saa midagi teha, kui see on arvuti, et Fibonacci number. Nüüd ma lihtsalt sain kahte asja tagasi. Aga ma arvan, lihtsalt mõelda kood veidi rohkem, kuidas see töötab ja kõik. Nii et see funktsioon siin on kood, Ma ütlesin seda server käivitada, kui see saab uue sissetuleva taotluse. Nii see lihtsalt läheb jookseb läbi selle kogu koodi ja siis ta läheb minema Tagasi ürituse silmus ja seejärel jätkata kontrollib uusi sündmusi. Ühesõnaga, mida oleme toimub on server on kuulates uusi asju. Esimene inimene, kes küsib, mida 45 on. Me kasutasime seda koodi arvutada seda. See kood võtab umbes viis kuni kuue sekundi joosta. Siis läheme tagasi sündmuse loop ja uute taotluste. Nii et see on näide sellest, kuidas, kui sa on asju, mis on nn arvutama seotud, või kasutan palju arvutilingvistika, mitte võimu, vaid nagu on arvutusintensiivseid - Ma arvan, et üks asi, mida öelda, on see, et see funktsioon teeb täiesti, enamasti, üsna kasulik töö paremale. Kogu aeg, et callback funktsiooni töötamise ajal, see oli päris palju kulutavad suurema osa oma ajast lihtsalt computing et nda Fibonacci number. Aga meil oli ainult üks niit tegeleda. Apache mudel, kui kaks inimest esitas taotluse saada luiskama 45, me oleks kaks eri teemad. Ja siis operatsioonisüsteemi töö oleks olnud, või kasutaja tasemel kood, mis haldab niidid, poleks olnud viil, et üles CPU või isegi kui teil on olnud mitme protsessoriga, levitada neid ühtlaselt kogu protsessoriga et nad olid mõlemad viimistlus vähem samal ajal. Nii lihtsalt, et näidata, kuidas me saame sorteerida ning - ja see ei ole kokku täiuslik lahendus, kuid omamoodi kuidas saame tee siia tagasi tulla ja teha natuke parem. Niisiis, mida ma olen siin on programm nimega Luiskama C. Ja see põhiliselt kasutab veel üks sõlm moodulit nimetatakse Lapse Moodul. Nii et ma olen lisatud, et tipus lahke ja nagu ma teeksin nael hulka laps process.h või midagi. Nüüd on sellele CP muutuja kus on kõik minu funktsionaalsust. Nüüd, mida ma teen selle vastus käitleja Ma töötab selle programmi dot kärpida luiskama 45. Niisiis, mida ma olen teinud - ja ma lihtsalt välja astuma selle programmi natuke - on mul kirjutatud C programm, mis põhimõtteliselt arvutab nda Fibonacci number. Nii et siin on ainult programm, olen kirjutanud C, mis arvutab selle. Ma ei kompileerida ja võin joosta seda käsurida. Ja see saab arvutada 45. Fibonacci number. Nii märkate see lihtsalt võtab päris palju nii kaua. Ma ilmselt oleks võinud kasutada kriips 03 optimeerida või midagi sellist, aga ma tegin nagu korrapärane kompilaatori sätted. Ja ta prindib. Aga nüüd, mida ma omamoodi teen? Oh vabandust, vale faili. Nii ma seda sama kraami header kui enne. Siis ma seda cp.exec. Mis siis, et see saab teha, on see toimub programmi käivitada. Aga kuidas see toimib on see, et see ei kavatse ootama et programmi lõpuni. See lihtsalt põhimõtteliselt ütleb programmi käivitamiseks. Nii et põhimõtteliselt kirjuta seda arvesse käsureale liiki. Ja siis, kui sa oled teinud käivita see funktsioon. Nüüd me sellist saada seda kogu taastatud asja nagu me ei oodanud. Kas sellist mõtet? Yep? Publik: [kuuldamatu]? KEVIN Schmid: Nii see tegelikult avada uue protsess seda teha. Nii et see on tegelikult mõnes mõttes, kurja, ei super paha, kuid see on oluline märkida, et see on selline läheb tagasi, ühelt poolt Apache mudel, kus me niidid ja protsesside iga taotluse või protsesside iga taotluse. Nii et see on omamoodi analoogne millises Apache teeb. Mõnel juhul on see lihtsalt kasutada uute niit, mis on veidi rohkem valgust kaal kui protsess, kuid Apache võiks lõpuks hargnevate uus protsess mis on selline, mida me teeme siin kaudselt, tehes dot kaldkriipsuga luiskama 45. Ja siis sel juhul me sellist tekkida Samal kulud protsesse. Nii et see on lihtsalt üks asi, mida sa teha saad. Aga lihtsalt näidata selline jooksmine. Ja see jutt on lihtsalt tõesti suunatud esitades Sellised programmid nagu võimalus näidata erinevaid vaatenurki kuidas kavandada servereid niimoodi. Nii see käib, ja siis nüüd kui ma see uuesti, sain kaks protsessi IDd. Lähme räägime asjad meelde. Nii teate, et nad on järk-järgult. See on lahe. Sest see oli 27.122 enne. Aga teate nüüd, nad tulid tagasi umbes sama aeg. Ja nüüd, hea küsimus küsida Miks see nii on, kelle töö oli see nüüd omamoodi teha neid asju omamoodi mängida õiglane iga teised on need kaks juhtumeid dot kaldkriipsuga luiskama 45 et ma jooksin või et sõlm jooksis? Kes omamoodi muudab õiglane, et nad mõlemad saada omamoodi tasakaalustada tööaeg? Publik: [kuuldamatu]. KEVIN Schmid: Jah. Ühesõnaga, kui ma dot kaldkriipsuga luiskama 45 või midagi sellist, nüüd on objekti kuni operatsioonisüsteemi käepide runtime nende programmide. Ja nüüd ta saab ajastada neid erinevatel protsessoriga või see saab ajastada neid. Seda saab viilutada aeg, et üks CPU läheb või et nad saavad sõitma ühe protsessori. Nii et see idee, et. Kas see mõttekas kõik? Nüüd Sõlme ei ole tegelikult mängib osa jagamisel nende ülesannete täitmisel. OK. Nii et peaaegu ta näiteid. Tahtsin näidata, veel üks asi sest palju see on siiani olnud mitte täiesti super praktiline teatud juhtudel. Ma kujutan ette, tulen koju pärast seda rääkida ja midagi ja öelda, nagu, noh, ma selline välja sain, et rääkida, et Võin teha Fibonacci server minu lõplik projekt. Nii et siin on justkui üks näide mis loodetavasti saab - võib-olla mitte, aga võib-olla - veidi rohkem omamoodi seotud lõpliku projekti ja mõtlemine asjad niimoodi. Nii et see on chat.js. Nii et see on selline nagu mõned proovi serveripoolne kood, mida võiks kasutada, et luua väike chat server nagu olete näinud Facebook Chat või mis iganes. Nii et ma ei ütle, et see on nagu Facebook Vestlus, kuid see on selline nagu hea - võib-olla ei ole hea, kuid võib-olla hea - lähtepunkt chat server oma veebilehel lõpliku projekti. Seega vaatame, mida ta teeb. Nii et me saame selle eriline asi tipus, see var SIO võrdub nõuavad Socket.IO. Nii et see on teine ​​asi, et see ei tegelikult tulevad komplekteeritud Sõlme kuid võite installida. See sõlm moodul. Nii et see on nagu mõned laiendamine sõlme. SocketIO on tegelikult väga omamoodi lahe. See on abstraktsioon, mis põhimõtteliselt mida see on, on see võimaldab teil on see vool side vahel web brauser ja veebiserver. Nii et enamasti seni oleme olnud need väga kiire üks sekund või kaks teine ​​suhtlemise web brauser ja veebiserver. Nii et see on põhimõtteliselt minna google.com, saada kraami, saatke see tagasi, ja siis me oleme valmis. Me ei räägi enam, kuni kasutaja liigid midagi muud. Aga mida Socket.IO jms liiki asju - ja SocketIO on tegelikult üks asjad, mis on ehitatud nii WebSocket mis on omamoodi saadaval osana HTML5 - mis võimaldab teil on see pidev dialoog. Ja see on väga kasulik chat server selline asi, sest see on selline nagu pidev dialoog mõnes mõttes, sest kui sa oled jututoas kellegagi, saate nüüd lihtsalt saata sõnumi alla toru ja seejärel server saab saata sõnumi alla toru teisele isikule oled vestlemas. Ja siis võib olla selle vahetada niimoodi. Nii et omamoodi mida SocketIO on hea. Põhjusel, et SocketIO kasutab WebSockets üks asi on see, et Lisaks lihtsalt vana WebSockets, Samuti ei teatud trikke põhiliselt muudavad brauser ühilduvad. Nii brausereid nagu Internet Explorer Kahjuks ei toeta WebSockets õigus karbist. Nii ta kasutab mõni muu lahe puhas asjad Adobe Flash, mis võimaldab teil on rist brauseri tugi. Nii et see on tõesti kasulik. Ja tegelikult, ma tean, et ma olen selline töötab aeg siin, kuid CS50 Arutle, kas te olete kunagi näinud midagi nagu, ma ei tea, tühjaks, ja nii on vastates postitus või midagi niimoodi, et funktsioon? See SocketIO. Nii et kui keegi hakkab kirjutama arutada kasti teha vastus või midagi, kuid teie brauser ei mis kutsutud SocketIO kiirgab mingi sündmus, mis ütleb, et keegi vastates sellele ametikohale. Siis server ütleb, OK, Mida ma pean tegema? Noh nüüd ma pean need teised poisid kes on CS50 Arutle vaadates selles pärast, et keegi vastates. Nii et omamoodi mida SocketIO on hea, seda jätkuvat laadi oja dialoogi. OK. Niisiis, mida ma olen siin - ja me oleme lihtsalt kavatse ignoreerida ühendused massiivi natuke aega - mida ma teen on ma veel kuulata. Nii see on lihtsalt viis, kuidas Socket.IO on öeldes kuulame selle port. Ja siis ma teen seda ühendust. Nii et lihtsalt põhimõtteliselt Socket IO viis öelda, kui oleme saanud ühendus, ma tahan, et sa käivitada koodi. Ja teate, mis selle asemel, rec ja res läbinud seal mul Socket. Ja see Socket idee on põhimõtteliselt see asi, mida saab kirjutada ja lugeda sellest on kasutaja Sõnumite võimalik. Ja kirjad, mida saadaks ei lähe läbi, et pesa. Kas see on mõtet? Nii et see on see jätkuvalt asi. Niisiis, mida ma teha, on Kutsun Socket.emit. Ja paisata võtab päris palju kaks argumenti. Esimene argument on string lihtsalt esindavad tüüpi asi, mida sa kiirgavad. Nii sel juhul, ma olen kasutus see string uus sõnum. Ja see on lihtsalt põhimõtteliselt öelda, et tüüpi see asi, mida ma olen saatmine on uus sõnum. Nii saate kuulata teatud tüüpi nagu uus sõnum või mis iganes abil täpiga. Nii ühendus ja kasutaja sinna saata, kui te vaatate, kui me nimetame täpp, need on ka teisi stringe, mis esindavad tüüpi kasutaja sõnumeid. Nii et see on põhimõtteliselt saab olla see emit üks neist sõnumi tüüpi ning siis midagi vastuseks üks neist sõnumi tüübi Nii et ma olen kiirgavad seda uut sõnumit. Me ignoreerida connections.push teine. Aga siis ma ütlen, Socket.on kasutaja saadetud. Nüüd see on nagu siis, kui kasutaja saadab mulle sõnumi, ma tahan käivitada see kood. Ja teate, et anonüümne funktsioon võtab selle muutuja nimetatakse andmeid, mis on põhiliselt läheb on kasutaja sõnumit. Nüüd lähme jutt umbes ühendused massiivi. Nii et see on mõeldud vestlus kliendiga kus põhimõtteliselt kõik on kuidagi sisse Samal jututuba. Ühesõnaga, mida me peame hoidma ümber on mingi massiivi, et põhimõtteliselt esindab kõiki inimesi jututoas sisse Mõnes mõttes, kui see on mõistlik. Eks ole? Sest meil on vaja teada, kes need mehed on, et saaksime saata neile sõnumeid et teised inimesed Kirjuta meile. Niisiis, mida see kood teeb, kui kasutaja saadab sõnumi - see tüüp sündmus - me kasutada seda koodi. Ja mida me teeme, on meil jookseb läbi selle massiiv, et oleme kutsutud ühendused. Ja päris palju iga ühendus välja arvatud see, mis on meie oma, see on mida see kood ütleb, saadame uue sõnumi, et kinnitada sõnumi teavet. Nii et kui te märkate siin, mida ma tegin, kui kasutaja tegelikult teeb uue ühendus on mul lisatud koos JavaScript.push meetod on see põhimõtteliselt lihtsalt öeldes nagu lisada et Socket kui väärtuse Meie ühendused massiivi. Nüüd, kui see kood töötab, siis on see Kirjuta asju nende konkreetsete ühendusi. Nii et see võib olla hea lähtepunkt tegemise chat server või midagi sarnast. Ja selline lahe asi on see, et koodi, mis sa näed siin nagu on ja kiirgama ja asju, mis on sama objekti JavaScript kood, mida oleks kirjutada brauser suhelda with the server. Nii et miks SocketIO on selline puhas ja kasulikud nii. Oh ja veel üks asi, reaalne kiire. Oli CS50 lõplik projekt mullu et põhimõtteliselt rakendada chat server Node.js. Ma arvan, et see on Harvardchats.org aga ma ei ole - OK. Ma ei tea, mida URL on, kuid Võin saata see välja hiljem. Aga see on selline lahe mis saate teha Node.js. Nii et ma loodan, et üldiselt kutid on heas mõttes mida Node.js kasulik ja kuidas sa võiksid olla kohaldada oma lõpliku projekti. Ma saadan mõned rohkem vahendid koos selle. Ja aitäh, et tulite. Aitäh. [APLAUS]