>> KEVIN SCHMID: Hei kaikki.
Tervetuloa CS50 seminaari on Node.js.
Nimeni on Kevin.
Olen CS50 TF.
Ja olen tavallaan kuin todella innoissani tästä seminaarin.
Mielestäni Node.js on hyvin viileä.
Toivon, että tämä seminaari voidaan käyttää niin hyvä, luulisin, ponnahduslautana
joku opinnäytetyöt jos olet kiinnostunut käyttämään
jotain Node.js.
>> Me tavallaan alkaa seminaarin pois puhu vain hieman
Tällainen tausta skaalautuvuus näkökulmia Node.js, ja sitten
me siirtyä koodia esimerkkejä.
Ja Otan koodin verkkosivuilla, ja voit tarkastella koodia.
Ja seminaarin jälkeen, minä lajitella puhetta siitä, miten voit perustaa Node.js
tietokoneellesi.
>> OK.
Joten pääset alkuun.
Joten kai haluan vain puhua web-palvelimia, todella, ensin.
Ja aloittaa tämän keskustelun, I pohjimmiltaan on kaavio, joka on peräisin
oppikirja käytetään CS61, joka Yhtälö osoittaa lähinnä vuorovaikutus
välillä asiakkaan prosessi, kuten web selaimen tai kuten teidän tavoitteena asiakas tai
jotain, ja web-palvelin.
Joten tällainen näyttää samanlaiselta kuva että näit luento
Keskiviikko jossa pohjimmiltaan meillä on joitakin asiakasprosessi kuten Google Chrome.
>> Ja sitten ensimmäinen vaihe on Asiakas lähettää pyynnön.
Niin, että voi olla jotain hyvin katsotaanpa käy, en tiedä, CS50.net.
Joten olemme antaneet tätä pyyntöä.
Ja ei kukaan muista nimeä protokolla, joka määrittää, miten se
pyyntö olisi organisoitava?
Jep.
>> Yleisö: [kuultavissa].
>> KEVIN SCHMID: Aivan.
Joten se on kuin HTTP, eikö?
Joten periaatteessa eritelmän miten että pyyntö olisi todella vahvistettava
ulos, koska lopussa päivä, että pyyntö on todella aivan kuten
merkkijono, joka periaatteessa sanoo Haluan tämän.
Ja erittely varten, joka on HTTP.
Niin, että on kuin protokollaa.
>> Joten sitten palvelin vastaanottaa tätä pyyntöä.
Joten teillä web-palvelin on asennettu vuonna CS50 laitteen.
Se on Apache.
Ja tällä viikolla kun työtä ongelman asettaa seitsemän, sinun todella työskennellä
kanssa, että web-palvelin.
Joten palvelin vastaanottaa tämän pyynnön, ja niin se on eräänlainen raapia sen
pään ja sanoa kuin hyvin, mitä teen tämän?
>> Joten sen perusteella, mitä se päättää tehdä, niin se voi joutua ottamaan yhteyttä jonkinlainen
resurssien.
Ja että materiaalia voisi paljon erilaisia ​​asioita.
Ensinnäkin se voi olla vain kuten staattinen HTML-tiedosto.
Niin se voisi vain olla kuten jotkut HTML, että on kuin
oma verkkosivusto.
Se voisi olla staattinen tiedosto kuten kuva tai kuten elokuva, joka sinulla on.
Se voisi jopa pitää puhua jonkinlainen tietokanta
kuten MySQL-tietokanta.
Joten se ei aina tarvitse kommunikoida kanssa voimavara, mutta
Joissakin tapauksissa se voisi.
>> Joten sitten, mitä se aikoo tehdä sen jälkeen se menee
lähettää takaisin vastauksen.
Ja vastaus tähän on myös määritelty HTTP.
Niin sitten asiakas voi vastaanottaa sitä.
Se voi repiä sen lisäksi ja käsitellä sitä.
Ja sitten saat web-sivun kuten Google tai CS50.net tai
mitä menit.
OK?
>> Joten tämä on perus vuorovaikutus, joka aiomme olla tekemisissä.
Ja me aika paljon olemaan keskitytään tässä osassa
vuorovaikutusta, palvelin.
OK.
Cool.
Kellään mitään kysyttävää tähän mennessä?
OK.
>> Joten kuten sanoimme, web-palvelin vastaanottaa HTTP-pyynnön ja antaa sitten tämän
HTTP-vastaus.
Ja kuten puhuimme aiemmin, CS50 laitteen web-palvelin on Apache.
Joten kun te työskennellä P asettaa seitsemän, aiot olla kanssa
Apache www-palvelin.
Sinun ei koskaan todella työtä Apache suoraan liikaa.
Olet tavallaan määrittää Apache hieman kun olet määrittänyt virtuaalinen hosts tai
v isännät, ja me saamme kuin vuonna hieman.
>> Mutta pohjimmiltaan, Apache www-palvelin asetettu toimimaan PHP laji
on kättelyssä.
Joten mitä todella tapahtuu, on kun menet Jonkin verkkosivustoja kuten vaikkapa
paikallinen isäntä slash index.php tai jotain, on selaimesi lähettää, että
pyynnöstä, ja sitten Apache istuu siellä ja keksii tekemistä sen kanssa.
Ja toiminta on toteuttaa että koodi index.php ja
lähettää sen sitten pois takaisin.
Joten ei tuo.
Joten me tavallaan puhuneet tästä.
Niin se voisi vain palvella staattinen tiedosto tai ajaa joitakin PHP-koodin ja sitten kysymys
vastaus.
>> Niin sitten yleinen kysymys, joka voi tulla up on hyvin, miten me todella käsitellä
kanssa, joilla on useita käyttäjiä samaan aikaan?
Joten kuvitella, jos olit kirjallisesti web palvelimeen, jos sinulla on ollut web-palvelin, joka
yritit kirjoittaa jotain kuten C tai jotain,
periaatteessa voit miettiä, miten siellä voisi olla jonkinlainen koodi, joka
saisivat pyynnöstä, mutta sitten sillä on tekemistä kaiken tämän työtä.
Se voi olla, esimerkiksi, ota yhteyttä tietokanta tai jotain.
Oikea?
Ja sitten se tekisi tuollaista jalostuksen ja sitten
lähetetään takaisin vastauksen.
Niin, että on kuin suuri yleiskatsauksen.
>> Mutta se ei ole heti selvää, kuinka voit voi tehdä niin, että kaksi ihmistä tai
jopa 1000 ihmiset voisivat työskennellä oman Web-palvelin samaan aikaan.
Joten ratkaisu Apache käyttää kutsutaan kierteet tai prosesseja.
Joten olet ehkä kuullut nämä ehdot ennen.
Se on OK, jos et ole, mutta ajatelkaa noin kierteet tai prosesseja tapoja
käyttöjärjestelmän tai käyttäjän ohjelman tai jotain tai web-palvelin
tavallaan suorittaa useita asiaa kerralla.
Niin olet ehkä kuullut termin kuten suoritussäikeet.
Joten se on sellainen kuin olet eräänlainen moniajo.
>> Ja jos olet nähnyt ruutuun oman kannettava tietokone, tai jotain sellaista,
multicore, mitä voit tehdä on, voit ajaa kahdella eri langalla eri
osat CPU niin, että ne voivat itse asiassa tapahtua samaan aikaan.
Joten tämä on todella voimakas.
Ja tämä on tavallaan Apachen ratkaisu tähän ongelmaan.
>> Joten on olemassa ikään kuin mitään ongelmia Tämän lähestymistavan vaikka?
Joten kai minä tavallaan kirjoitin ne siellä.
Mutta molemmat tavallaan käyttää paljon muistia.
Se on erittäin kallista luoda lanka tai prosessi.
>> Ja osa perustelu on, että vain kuten kun käytät C-ohjelma
kuten sinun tärkein ja sitten että puhelut toinen toiminto, joka on
jonkinlainen pino.
Joten kierteet vaativat myös kokonaan erillinen pino joka
voi olla varsin suuri.
Ja jos voit kuvitella tonnia käyttäjät sivustossasi, olisit
paljon erilaisia ​​kierteitä.
Se on paljon pinot hallita ja ylläpitää.
Joten se on suuri muistin kulutusta.
>> Ja sitten, myös, sanokaamme sinulla on vain yksi prosessori, tai sanokaamme olet
enemmän kierteet kuin sinulla nämä multicores.
Oikea?
Joten sanokaamme olet ollut 10 langat ja sinulla oli vain viisi suorittimia.
Tavallaan täytyy tehdä tämä asia, jos voit vaihtaa nykyisen
yksi, joka on pysäytetty, koska voi ajaa kaikki 10 kerralla.
Ja sitä kutsutaan kontekstin vaihto.
Ja että termi on itse asiassa pari eri yhteyksissä, mutta haluan vain
ajatella sitä kytkentä kahden kierteet.
Se voi olla melko kallista, koska periaatteessa mitä sinun täytyy tehdä on sinulle
täytyy lopettaa se, mitä olet tekemässä, tallenna valtion että käynnissä lanka, ja
vaihtaa sitten jossain muualla.
>> Joten ei kaikki sellainen katso motivaatio miksi kierteet ja
prosesseissa voisi olla hieman tilaa vieviä?
Ja oliko sinulla kysymys?
OK.
Cool.
Kellään mitään kysyttävää?
OK.
>> Joten jos otamme askeleen taaksepäin toiseen, siellä on sellainen kuin
havainto, että voimme tehdä noin paljon web-sovelluksia.
Ja se on todellakin niin paljon niitä itse ei tee niin paljon hyödyllistä
työskentelevät sisällä säiettä.
Joten on joku alkoi P asettaa seitsemän ollenkaan?
Joten haluat ehkä kuvailla joitakin osia?
Olet työskennellyt login tai jotain?
>> Yleisö: Ei.
>> KEVIN SCHMID: OK.
Ei se haittaa.
Anteeksi.
Mutta pohjimmiltaan P joukko, olet aiotaan tehdä paljon eräänlainen
kyselyitä tietokantaan hakemaan tiedot tästä tietokannasta.
Ja mitä koodia aiotaan tehdä, mitä tuo Apache prosessin tai
että Apache kierre aiotaan tehdä kun se on otettava yhteyttä
tietokanta on se tavallaan olemaan istuu siellä ja se tulee olemaan
odottaa tietokannan vastata.
>> Nyt ei ehkä kuulosta kovin suuri käsitellä, koska tietokanta on teidän
CS50 laite, eikö?
Mutta on jonkinlainen verkon latenssi siellä, koska nyt web
palvelin on antaa omia pyynnön Tietokannan kommunikoida
tietokantaan ja saada siitä, että tiedot takaisin.
Joten nyt se on kuin hyvin odottaa minua, olen mene saada jotain
tietokanta ja sitten on paljon odottaa tekeillä.
Onko järkeä?
>> Ja joitakin asioita se ei ole niin paha.
Jos se vain on, esimerkiksi Access Memory, että ei ole kuin
kamala I / O-latenssi.
Ja kun sanon, I / O-latenssi, mitä olen viitaten on kuin mikä tahansa sellainen kuin
input output.
Mutta käyttää tiedoston levylle, kuten jos halusin palvella staattinen HTML
tiedostoon, joka oli minun web-sivu tai jotain, olen sellainen on
pysähtyä vähän, lukenut, että tiedosto sisään levyn, ja sitten
että prosessi Odotan.
En tee hyödyllistä työtä.
>> Tämä ei ole totta kaikesta, mutta se on yleinen sovelluksia, kuten P sarja
seitsemän ja paljon hakemuksia että et ole
todella tekee paljon ajattelua.
Ja kun sanon ajattelua, tarkoitan kuten laskennallisia työtä.
Joten laskennallinen työ voisi olla jotain kuten vaikkapa halusit
kirjoittaa web-palvelin, joka äsken lasketut nnen Fibonacci numero.
Se ei kuulosta erityisen hauskaa web-palvelin.
Kuten En odota, että sivusto on Seuraavan Facebook, mutta se on jonkin verran
Tällainen laskennallisen työtä.
>> Ja voitte kuvitella korvaavassa kanssa jokin muu mielenkiintoinen
laskennallisen työtä.
Sanotaan olit kirjoittaa jotain että laskettu astetta
toisistaan ​​kaksi ihmistä tai jotain sellaista.
Niin että ei liity jonkinlaista laskennan, eikö?
Ja silloinkin, tehdä, että sinulla on vielä tehdä paljon odottaa ehkä
sinulla on kyselyn tietokantaan etsiä ylös kuka on ystävä, kuka tai
jotain sellaista.
On siis olemassa sellainen käsite laskennallisen työtä.
Onko järkeä?
Onko kellään mitään kysyttävää?
>> Niin ja kai laittaa chat-palvelimia siellä koska chat palvelimet ovat eräänlainen
Toinen hyvä esimerkki tästä.
Chat-palvelimeen ei ole tehdä paljon ajattelua.
Se vain on odottaa, että ihmiset lähettää viestejä ja sitten kun
ne, lähettää ne.
OK?
>> Joten vain kertaus uudelleen, Apache ja vastaavat web-palvelimia kuten että haarukka
Paljon kierteet ja prosesseja, jotka voi olla sellainen tuhlausta.
Joten kai kysymys, joka voi tulla siitä on meillä täytyy olla
useita säikeitä ja prosesseja?
Mitä jos meillä oli vain yksi?
>> Joten tavallaan maalata kuvan mitä tämä näyttäisi.
Joten käyttää vain yhtä säiettä.
OK?
Joten vain kuvitella tämän yhdellä säiettä.
>> Oletetaan emme oikeastaan ​​tee että paljon hyödyllistä - ja kun sanon
hyödyllistä, tarkoitan laskennallisen työtä -
niissä useita säikeitä ennen.
Joten tavallaan lujittaa kaikki yhdeksi säiettä.
Joten mitä jos meillä olisi yksi säie tuollaista vain menee ympäri silmukan ja
jatkuvasti tarkastuksia teki jotain uusi tapahtua.
Niinpä esimerkiksi, jotain uutta on tapahtunut voisi tarkoittaa Sain jotain takaisin
tietokanta tai joku lähetti minulle uusi HTTP-pyynnön.
Joten ne ovat sellaisia ​​tapahtumia sen tapahtua, eikö?
>> Ja sitten, mitä voin tehdä näitä uusia asioita tapahtuu on tässä samassa säiettä
muuksi, tämä yksittäinen lanka toteutus, voin soittaa joitakin koodi, joka
hoitaisi kyseisen asian.
Niinpä esimerkiksi, jos minulla on jotain takaisin tietokannasta, voisin ajaa minun
pieni laskennallinen osa sitä, että oikeastaan ​​vain valmistelee asia
lähettää takaisin käyttäjälle.
Joten ei sellaista järkeä?
>> Mutta mitä ovat todella seurauksia tästä?
Oikea?
Koska olemme kirjoitettu paljon koodia, joka -
ja olen juuri menossa hypätä eteenpäin diat jos sopii.
Joten jos et mielessä, olen vain menossa ottaa askel taaksepäin.
Joten tällainen asia on nimeltään tapahtuma silmukka.
OK?
Ja se on aika perus Ajatuksena Node.js.
>> Joten mitä Node.js on todella tekee web palvelin on olemassa yksi punainen lanka
että on periaatteessa menee noin silmukka kuin taas yksi sellainen alle
huppu Node.js joka on jatkuvasti tarkkailun, ei saamme uusia asioita?
Ja sitten se ajaa käsittelijät että olet määrittänyt.
Mutta hyvä kysymys on, miten voimme tehdä tämän tapahtua
nykyisten asioita?
>> Joten laitoin linja C-koodia tässä, että periaatteessa näyttää se avaa
tiedostoon, eikö?
I Hän vain tuli ulos albumin.
Joten jouduin avaamaan hänelle uuden tiedoston.
Joten miten meidän C-koodi käyttöä varten -
ja kai syy päätin tiedostoja oli koska tämä on tavallaan määrin
I / O-työstä, jota olemme tehneet C mielessä, että siellä on tulo-lähtö.
Joten me kutsumme tätä koodia tämä F auki.
Ja sitten seuraavalla rivillä meidän ohjelma, voimme nyt työskennellä f.
>> Joten tämä olisi esimerkki jotain se on kuin synkroninen tai
estää sillä että ensimmäinen rivi siellä odotamme kunnes
saat tiedoston auki.
Niin toisella rivillä, me tiedämme, että voi työskennellä f, mutta tämä tarkoittaa, että
että toinen rivi voi oikeastaan ​​ajaa kunnes ensimmäinen rivi on tehty.
Onko järkeä?
>> Joten tämä olisi huono laittaa vuonna tapahtuman käsittelijät.
Ja syy siihen on, että tällaista odottaa, eikö?
Joten tämä palaisi meidät takaisin sama asia.
Ja nyt meillä ei edes ole hyödyksi useita säikeitä tai
prosesseissa, sillä saimme yksi kierre Node.js.
Onko järkeä kaikille?
>> Yleisö: Odota.
Niin mitä vaihto?
>> KEVIN SCHMID: Voi, niin kyllä.
Joten aion päästä korvaamisesta.
OK.
Joten mitä jos meillä olisi jotain että näytti tältä?
Joten mitä jos nyt olen muokannut f avata hieman?
Joten olen ohimennen samassa kaksi perustelua kuin ennen.
Rakastan yhä uusi biisi että hän tuli ulos.
Mutta olen ohimennen Kolmas asia, joka tämä muuttuja nimeltä koodin.
>> Mutta mikä on koodi oikeastaan tässä yhteydessä?
Onko se kuin tavallinen C muuttuja?
Se on toiminto, eikö?
Ja se voi olla hieman outoa, koska Olen oikeastaan ​​kuin nyt kulkee
funktion toisen toiminnon.
>> Joten pari asiaa huomata tästä.
Yksi, en ole oikeastaan ​​soittamalla kooditoiminto.
Joten et näe koodia vasen kantatuote, Oikea sulje.
Olen vain ohimennen koodi.
Ja C, mitä tämä voisi itse tehdä on antaa minulle osoitin, että todelliset
koodi, ja sitten tämä voisi käyttää sitä.
Mutta ajattele sitä olet kulkee koodin suorittamiseen
että tiedosto avataan.
>> Mutta mitä tämä tarkoittaa, että nyt loppuelämäni ohjelma, joka voisi tehdä
muita juttuja, voi jatkossakin tehdä muita kamaa kun me, ei oikeastaan ​​odota, mutta
vain takana päämme että kun tuo tiedoston auki, ajaa joka
koodi yläreunassa.
Onko järkeä?
>> Ja nyt ajatus Node.js on, että koodi do juttuja f
osa pitäisi olla aika lyhyt ja yksinkertainen ja suoraviivaista eikä oikeastaan ​​olla
hyvin laskentaintensiivisiä.
Se voi olla avata toinen tiedosto, mutta että pitäisi olla myös melko nopeasti
koska se olisi vain sanoa tehdä uuden f avata ja sitten kutsua tätä muu koodi.
>> Joten vain olla täysin selvä, f avaa joka tekee uuden Katy Perry biisi
Done mp3, että menee melko paljon palattava välittömästi.
Ja sitten voimme vain jatkossakin tehdä muita juttuja koska kaikki, että nyt f
open kutsussa ei ei kerro pohjimmiltaan taustalla f avoin koodi avaa tätä tiedostoa
ja kun olet valmis avaamassa tiedoston tai kun saat sen takaisin,
suorita kyseisen koodin.
Mutta se ei todella ajaa kyseisen koodin.
Ja teillä oli kysymys?
>> Yleisö: Sinun näytti osoittavan muutaman kertaa, että lisäämällä laskennallisesti
intensiivinen koodi tavallaan rikkoa [Äänetön] vetoinen.
[Äänetön]?
>> KEVIN SCHMID: Tuo on hyvä kysymys.
Joten olen oikeastaan ​​esimerkki siitä, miten voisitte ottaa laskennallisesti
intensiivinen koodia hieman.
Joten kun pääsemme koodi esimerkkejä, Tulen varmasti vetää, että yksi.
Sopiiko?
Kiitos.
>> Mikä oli nimesi?
>> Yleisö: Aaron.
>> KEVIN SCHMID: Aaron tuo hyvin hyvä pointti, joka on se, että jos minulla olisi
Joissakin laskentaintensiivisiä koodi tehdä juttuja F osan, loput
minun ohjelma ei voi suorittaa ja voi kuunnella uusia pyyntöjä tai mitään ennen kuin kaikki
että tavaraa on valmis.
Joten jos Kirjoitan Node koodi yleensä ellemme tee jotain aion
ehdottaa myöhemmin, kun katsomme koodi esimerkkejä, minun täytyy olla varma, että
minun koodi ei sido tämä tapahtuma silmukka.
Onko järkeä?
OK.
Cool.
>> Joten Node.js tarjoaa tässä yhteydessä, että voit rakentaa näitä ylläpitäjä
palvelimia.
Joten se on tällaisia ​​asynkronisten estoton I / O-kirjastot, kun taas
vakio C kirjastot, että olemme olleet kanssa, kuten jos vain
käyttää niitä samalla tavalla kuin olemme käyttänyt niitä f avautuu ja
kamaa, nämä estävät, koska sinulla todella on odotettava
että avattavan tiedoston.
>> Mutta Node.js antaa sinulle ja se periaatteessa sitoo Googlen V8
JavaScript-moottori, joka on syy että Chrome on niin nopea jalostusvaiheessa
JavaScript koska se on tämä V8-moottori.
Joten tiedän, että kuulostaa yksi niistä WWDC kehittäjä konferensseja asia
jos ne vain heittää nippu kirjain numeron asioita prosessorit
ja sanoa, tämä on niin cool.
Mutta se on cool, että he tekivät Tässä koska JavaScript -
tai ehkä jos et ole perehtynyt JavaScript vielä, koska meillä ei ole ollut
luentoja sitä -
mutta JavaScript on tulkittu kieltä.
>> Ja tämä on tärkeä asia myös.
Joten on tärkeää, meidän web palvelimet olla nopea, eikö?
Ja jos olimme juuri käynnissä JavaScript koodi, joka oli tulkittu vain
kaikki vanhat tulkki se saattaa olla hidasta.
Joten Node hyötyy ottaa tämän huippunopea V8 tulkki.
Ja en tiedä, jos he nimesivät sen koska V8 isku otsaan
asia, mutta OK.
>> Joten olen valmis joitakin esimerkkejä tässä URL-osoitteessa.
Seminaarin jälkeen olen tavallaan menossa puhua siitä, miten voit saada Node asetettu
ylös, mutta nyt olen vain eräänlainen haluavat kävellä läpi joitakin koodi esimerkkejä.
Joten jos haluat seurata pitkin, kaikki lähdekoodi on saatavilla siellä.
OK?
>> Joten jätän tämän URL jopa hieman.
Ja niin olen juuri menossa vaihda terminaaliin.
Ovatko kaikki hyviä tämän URL?
Joten aion siirtyä minun terminaalin täällä.
>> Joten tässä on koodi, joka Minulla on tänään.
Miksi emme aloita simpler.js tiedoston?
Toinen asia on, että kaikki tämän koodia aiotaan kirjoitettu
JavaScript joka voi tai ei voi olla tuttu.
Luulen pari asiaa on, että paljon JavaScript-koodi on eräänlainen
syntaksi ja rakenne on hyvin samanlainen kuin C, joten voit sellainen hakea sen
matkan varrella.
Olen yrittänyt kirjoittaa paljon aloituskoodilla tämän tavalla, joka on
samanlainen kuin C, niin että se on hieman luettavampi.
Mutta kun etenemme, otan osoittaa joitakin ylimääräisiä
piirteet JavaScriptiä ovat eräänlainen jäähtyä.
>> Mutta katsotaanpa tämän otoksen ohjelma.
Oletan kaikki on leikattu pois siellä.
Olen juuri menossa korjata, että todellinen nopeasti, jos se on OK vai ei.
En tiedä, mitä tämä aikoo tehdä.
Onko se vähän paremmin?
Näetkö var ja kamaa?
OK.
>> Joten ensimmäinen rivi on kuin JavaScript versio muuttujan
julkilausumaan.
Joten vain korostaa sitä, mitä tämä olisi näyttävät C. Joten tämä on aivan
sanon indeksi on yhtä kuin kolme tai jotain sellaista.
Joten en määritä tyyppiä.
JavaScript ei ole tyyppejä, mutta se on erittäin dynaamisesti kirjoitetaan luonnossa, joten
ei antanut minkäänlaista tyyppiä sitä.
Niin se vain on var.
Se on kuin muuttuja.
OK?
>> Ja Soitan tämän muuttujan HTTP.
Ja minun oikealla puolella, minulla on lauseke, että haluan laittaa HTTP.
Ja tämä kertoo vaativat HTTP.
Joten tämä on tavallaan samanlainen kuuluu.
Se on vähän enemmän kuin voimakas kuin sisällyttää siinä mielessä, että sisältävät
olisi vain kopioida ja liittää header tiedosto toiminto prototyyppejä tai
riippumatta tyypin määritelmiä.
Mutta ne vaativat todella tapahtuu saada meidät koodi.
>> Joten voit ajatella sitä tuo joidenkin koodi.
Joten jossain Node.js moduulin järjestelmän tai mitä tahansa, he ovat kaikki tämän
HTTP-palvelin koodia niin olen vain hakemalla sen itseni
henkilökohtaiseen käyttöön tässä ohjelmassa.
OK?
>> Niin sitten minulla on tämä toiminto että olen kirjoittanut.
Ja huomaa etten tarvitse määrittää palautuva tai tyyppi
argumentteja uudelleen.
Joten sellainen löysä kirjoitetaan sellaista tunnetta.
Kaksi väitettä, joita se toteuttaa, pyyntö ja vastaus.
Niin, että käsitteellisesti sellainen kuin tuttu kuva, että meillä oli
ruudulla ennen, koska saamme tämän pyynnön, että me
on käyttäjän.
Ja sitten meillä on vastaus, joka voimme kirjoittaa asioita.
>> Joten ensimmäinen rivi tämä ei res.writeHead 200, ja sitten tämä
sisältöä kirjoittaa tekstiä tavallista.
Joten piece hieman erilleen toisistaan.
Joten haluan vain keskittyä res.write vähän.
Joten kirjoitus on pohjimmiltaan, ja kirjoituspää, ovat vain tapoja tavallaan kirjoittaa
asioita vastausta.
OK?
Joten kirjoituspää, jos joku muistaa HTTP-luento, oletteko kaverit
Muistan otsikot päälle HTTP asia?
Joten miksi en vain demo otsikot todella nopeasti.
Olisiko se hyödyllistä?
Vai pitäisikö vain eräänlainen -
OK.
Toki.
>> Joten kun selain menee google.com tai jotain,
siellä on todella vähän enemmän -
tämä on kuin salaisuus -
siellä on kuin pieni lisätietoa joka tulee putken läpi kuin vain
pikku etsintä ja kaikkea.
Joten näyttää sinulle tämän, aion käyttää ohjelmaa nimeltä Curl.
OK?
Joten tämä on jotain, voit ajaa Mac OSX komentoriviltä tai
laitteen tai mitä tahansa.
Ja niin jos en Curl HTTP google.com, Aion nähdä HTML.
Ja tämä on, oikeudenmukaisuus, vain HTML tuollainen käskee
ohjata www, jos selain ei automaattisesti kahva
uudelleenohjaus.
>> Joten tämä on vain HTML, mutta aion lisätä Curl tämän väliviivaa I lippu.
OK?
Ja tämä on menossa näyttämään minulle otsikot.
Joten tämä on myös tietoa, joka tulee läpi, kun saan tämän vastauksen.
OK?
>> Joten yläreunassa, näet tämän HTTP 301 muuttaa pysyvästi.
Ja tämä on tavallaan tärkeä, koska Tämä viittaa tilakoodi.
Joten 301 tässä tilakoodin, joka on pohjimmiltaan vain kokonaisluku
joka kertoo selaimen tai kuka on luet tätä, jos teeskennellä, että
olet selaimen ja te näette tämän, periaatteessa nyt jos tarkastellaan
että ja näet 301, tiedät minulla on tehdä jotain erityistä, joka perustuu
301, tai jotain erityistä tapahtui perustuu 301.
Niin se sanoo muutti pysyvästi.
>> Ja sitten, pohjimmiltaan olemme joukko keskeisiä arvo-pareja.
Joten saamme sijainti on www.google.com.
Ja sitten tavallaan kaikki tämä muita juttuja, mutta pohjimmiltaan, mikä paikka on
sanonta on uusi paikka on osoitteessa www.google.com.
Joten nyt jos menet google.com, sinun tavallaan nähdä selaimen sellainen vilkkuvat
toista ja sitten ohjata sinut oikeus takaisin www.google.com.
Joten vastauksia voi sisältää nämä otsikot.
>> Ja pari asiaa huomauttaa.
Joten sanokaamme olimme todella onnistuneita luona Web-sivun.
Joten anna minun mennä -
mikä on hyvä sivusto?
Olen huono ajattelu hyviä sivustot paikan päällä.
>> Yleisö: Wikipedia.
>> KEVIN SCHMID: OK.
Tehdään Wikipedia.
Joten tässä olin muuttanut.
Voi odottaa.
Olinko?
Kyllä, olin.
OK.
Joten sain tehdä www.
Joten aion tehdä www.
Ja kuten näette, tässä on kaikki HTML että selain käsittelisi
Wikipedia.
>> Mutta jos pidän vieritys tänne, mitä Nähdään huipulla -
wow, siellä on paljon HTML on Wikipedia -
mutta mitä näen yläreunassa tässä Tämän 200 tilakoodin vastakohtana
301, että olen nähnyt aikaisemmin.
Ja huomaa, että se on kiva ystävällinen OK sen vieressä.
Joten tämä on kuin hyvä tila koodia.
>> Tarkoittaako tämä 200 numero tutulta?
Kyllä sillä kun tein simpler.js, Kirjoitin 200 siellä.
Niin, että on pohjimmiltaan sanomalla kertoa selain tai kuka yrittää päästä
tämä, että he onnistuivat.
Tai että ikään kuin me menestyivät myös.
>> Ja siellä on tällaista erityistä syntaksia Javascript julistamisesta
kartta näistä näppäimistä, kuten sisällön tyyppi ja nämä arvot, kuten tekstiä plain.
Joten jos tarkastellaan vastauksen, että me Saavuimme Wikipedia ennen, -
Aion yrittää vierittää jopa hieman nopeammin -
sinulla on nämä avaimet, kuten palvelin ja nämä arvot Apache.
Joten sinulla avaimia ja arvoja.
Ja voit määrittää tämän Solmuun mitä lähettää takaisin.
>> Joten tämä on oikeastaan ​​aika joissakin tavoilla, ja tietyllä tavalla se ei ole
todella, mutta se on hieman alemmalla tasolla kuin PHP-koodin että saatat olla
kirjallisesti P asettaa seitsemän, koska PHP ja Apache tavallaan huolehtia joidenkin
nämä asiat sinulle.
PHP, voit ohittaa oletuksena käyttäytymistä kirjoittamalla omia otsikot.
Mutta tämän, saamme kirjoittaa ulos oman otsikot.
>> Joten tuo linja järkevää kaikki, kirjoituspää linja?
OK.
Mahtava.
>> Joten sitten mitä teen, on lopettaa vastaus sanomalla hello world.
OK.
Mutta se on vain toiminto nimeltään pyynnön käsittelijä.
Joten nyt olen oikeastaan ​​tarvitse sellaista tehdä jotain tätä toimintoa, eikö?
>> Joten tässä mitä teen on on tämä linjaa, joka ei var-palvelin tasavertaisina
HTTP.create palvelin, ja sitten minä kulkea pyynnön käsittelijä.
Joten tämä on tavallaan Node tapa luoda palvelimelle.
Ja huomaa, että olen ohimennen pyynnössä käsittelijä.
Joten tämä kertoo createServer toiminto, jonka haluan sinun tehdä minulle
palvelin, ja kun tuo palvelin vastaanottaa vastaus, tarvitsen sinua kutsua tätä
Pyyntökäsittely toiminto.
OK?
>> Niin että viiva aika paljon päättyy heti.
Joten var-palvelin linja on tehty oikein kun tehdään, että melko paljon.
Tarkoitan, se on perustettu joitakin sisäisiä valtio tietää, että sinulla olisi
soittaa, että pyynnön käsittelijä toiminto, mutta se ei tule istua siellä ja
sananvaltaa on käyttäjän lähetettävä minulle pyynnön vielä?
On käyttäjä lähetti minulle pyynnön vielä?
Joten se ei estä.
OK?
>> Joten mitä tämä tekee on se pohjimmiltaan nyt tallentaa osoitin tämän koodin,
Tämän pyynnön käsittelijä toiminnon kohdalle ja valitse ajaa kyseisen koodin kun joku
tekee pyynnöstä.
Ja sitten teemme server.listen.
>> 1337 on melko mielivaltainen.
Minulla ei ollut mitään erityistä syytä poiminta että numero.
Se oli täysin sattumanvaraisesti.
Mutta se vain määrittää portin.
Joten useimmat web-palvelimet näet, että he käyttää porttia 80, koska se on eräänlainen
samankaltaisten sopimusta.
Joten jos menen jotain, En tiedä, Wikipedia.org,
ja laitoin paksusuolen 8 -
Oh wow, et näe sitä.
Olen pahoillani.
Mutta jos teen Wikipedia -
Kirjoitan sen tänne vain niin, että se on selvää kameran.
Mutta jos otan tämän huomioon selaimen paksusuolen 80, joka määrittää mennä
Wikipedia.org satamassa 80.
Joten se on kuin miten Yhdysvallat on useita portteja kuten missä voit postittaa
asioita tavallaan.
Joten se on kuin mennä tässä aseta tällä palvelimella.
OK.
>> Joten en juuri valitsi 1337.
On koko joukko numeroita että voit poimia.
Se ei ollut aivan erityinen.
>> Mutta mitä aion tehdä nyt on Aion juosta Node.
Saanen itse kirjoittaa, että pari linjat alas niin, että voit nähdä sen.
Aion tehdä Node, ja olen menossa ajaa simpler.js.
Ja me puhumme siitä, miten saada Solmun perustettiin vuonna hieman.
Mutta nyt se on juuri käynnissä palvelimessa.
>> Joten yksi asia, mitä voimme yrittää, jotka eivät saa olla, että jännittävä on todella voimme
yrität käyttää sitä Curl.
Joten en voi tehdä Curl, ja minun kone on paikallinen isäntä.
Näet myös tämän kirjallisen näin joskus.
Paikallinen isäntä ja 127.0.0.1 ovat ystävällisiä samankaltaisten kotikoneelta.
Joten se on kuin puhuisi oma tietokone.
OK.
>> Ja sitten voin sanoa 1337.
Joten jos juoksen tämän Koodirivin se sanoo hello world.
Ja jos halusin nähdä, että tavaraa, joka oli sisältöä kirjoittaa tekstiä tavallista tai
mitä voisin jopa laittaa tämän tänne.
Ja huomaa, että se ei sano OK.
Ja minulla on tekstiä plain.
Ja sitten on eräänlainen kaikkien näiden muiden tavaraa, että solmu lisätä
siellä minua.
Se ei ole Super tärkeää.
>> Tarkoitan, on olemassa jonkinlainen teknisiä näkökohtia tuohon ovat ystävällisiä
viileä puhua, mutta vain näyttää te, minulla on myös valta
muuttaa näitä ympärillä.
Joten voin vain lisätä nippu ja muuta vastaavaa.
Ja sitten nyt, jos katson minun lähtö, se on, että.
Joten nämä otsikot tarkoittaa tiettyjä asioita selaimille ja tuollaista.
>> Ja otsikot voi periaatteessa kertoa selaimen miten vastata jotain.
Jos olet koskaan kuullut evästeet ennen, tai jos olet joskus ollut harmissaan
jonka web-sivun, jossa evästeet, tai päällä evästeen estää tai
jotain sellaista.
Voit itse asettaa evästeitä Näissä otsikot.
Joten he kertovat selaimen miten käyttäytymisen joissakin tapauksissa.
OK.
>> Niin että oli simpler.js.
Onko kellään mitään kysyttävää siitä, että lähdekoodi tiedosto?
OK.
Cool.
>> Joten poista r kyseisestä ja katso simple.js.
Joten tämä on melko paljon samaa ohjelmaa.
Minä vain kirjoitti sen hieman eri tavalla koska halusin lajitella kohokohta
joitakin piirteitä JavaScript.
>> Niin huomaa, että pyynnön käsittelijä toiminta on täysin kadonnut.
Ai juu, oliko sinulla kysymys?
>> Yleisö: Joo, perustelut että johdetaan, että
toiminto, mitä ne ovat?
>> KEVIN SCHMID: Joten ne ovat JavaScript esineitä.
Vuonna Node.js asiakirjoihin, pohjimmiltaan sanoo mitä menetelmiä ovat
saatavilla niitä.
Me vain sattuu olemaan pääsy tätä menetelmää kutsutaan kirjoituspää ja lopussa
ja muuta vastaavaa.
Mutta on koko joukko enemmän menetelmiä.
>> Ja esimerkiksi kuten yksi heistä erityisesti rec, voit tehdä
jotain rec.method joka kertoa, onko se HTTP saada tai
HTTP POST-pyyntöjä ja tuollaista.
Joten siellä on kaikenlaisia ​​erilaisia ominaisuuksia, mutta he molemmat
JavaScript esineitä, ja ne on vain toiminnot liitetään heille, että olet
voi kirjoittaa asioita.
OK?
>> Niin huomaa, että pyynnön käsittelijä on täysin poissa.
Mutta koodi, joka minulla oli pyyntö käsittelijä on edelleen olemassa.
Minulla on vielä tämä res.writeHead ja minulla on vielä tätä res.end.
Ja mitä tämä on esimerkki vuonna JavaScript on ajatusta
Nimetön toiminto.
ja nimetön on kuin sopiva nimi sitä, koska se kirjaimellisesti ei
ole nimeä.
Ei ole toimintoa pyyntöä käsittelijä siellä.
>> Ei ole nimeä, mutta se on edelleen on ottaa argumentti.
Joten en silti saanut rec ja res.
Ja minulla on vielä koodia.
Tämä on täysin kunnossa JavaScript-koodia.
Joten en voi julistaa toiminnosta nimenomaisesti antaa sille nimi.
Se on vähän sekava aluksi.
On joitakin, kuten hyödyllisiä asioita että voit tehdä
näitä nimettömiä toimintoja.
Onko kellään mitään kysyttävää tästä, vai onko se ok vain, nyt,
tavallaan vain hyväksyä, että se tulee tehdä sama asia?
Jep?
>> Yleisö: Ovatko toiminnot ensin luokan JavaScript?
>> KEVIN SCHMID: He ovat ensin luokan JavaScript.
Ja juuri tietää, että nämä käsitteet ohimennen Nimetön toiminto, kuten
tätä sovelletaan JavaScriptiä sinua voi kirjoittaa lopulliseen hanke
Web-selain myös.
Joten esimerkiksi Javascriptin selaimen, se on myös jonkin verran tapahtuma
ajetaan siinä mielessä, että mitä sinun on on, kun käyttäjä napsauttaa tämän
painiketta, haluan sinun suorittaa tämän koodin.
>> Joten se on samanlaista ajatuksia asiakkaan puolella, kun hiiren napsautuksella tai ne
hiiri joitakin kuvan omalle Web-sivu, suorittaa tämän koodin.
Joita voidaan soveltaa palvelimia.
Niin, että on ikään kuin jännittävä Syy miksi JavaScript on todella
sopivia tai jotkut ihmiset ajattelevat, että soveltuvat kieli tällaiselle
Jos kuljettaja palvelin, koska olet näitä nimettömiä toimintoja.
Sinulla on koko ajatus Tämän asynkroninen koodi.
OK.
Kellään mitään kysyttävää?
>> OK.
Niin että oli simple.js.
Joten katsokaamme yksi tai pari enemmän.
Joten tämä on sleep.js.
Joten on joku tuttu C toiminto nukkua?
Alkaen ehkä yksi aikaisempi luentoja tai jotain?
>> Joten periaatteessa voit kulkea mielestäni sekuntien tai jos käytät U
nukkua millisekuntien määrän tai nanosekuntia.
Ja pohjimmiltaan ohjelma vain lopettaa käynnissä että aikaa.
Oikea?
Ja sitten se herää lopulta ja niin se tulee vain edelleen käynnissä
ohjelma.
>> Joten tämä palvelin tavallaan antaa vaikutelman nukkumassa.
Niin huomaa, että meillä on sama res.writeHead 200 kanssa myös otsikon
ennen, mutta sitten olemme kutsuneet tätä toiminto nimeltään set timeout.
Aseta aikaraja on saatavilla myös selaimessasi Google Chrome
tai Safari tai mitä tahansa.
Ja periaatteessa mitä se tekee täällä on se ryhtyy toiminto.
Ilmoitusta, jälleen, se on Nimetön toiminto.
Niin, että aika siistiä, koska olemme käyttäen anonyymi toimintoa
Nimetön toiminto, joka voi olla vähän outo.
>> Mutta se kestää, että toiminto, joka on pohjimmiltaan sanovat - ja miten tämä
työt on 5000 millisekuntia, haluan voit suorittaa tämän tehtävän, joka
vain päättyy vasteen ja kirjoittaa hei.
Joten tämä antaa vaikutelman kuin nukkuminen, mutta miten tämä todellisuudessa
toimii, me läpi tämän linjan hyvin nopeasti.
Me vain kirjoittaa jotain.
Ja sitten me myös ajaa läpi tämän linjan hyvin nopeasti.
Joten emme todella menossa odottamaan viisi sekuntia.
Olemme juuri menossa ajaa Tämän koodin heti.
>> Ja sitten on taas tämä pieni Jos silmukka, joka on nyt tämä asia
rekistereitä, että pohjimmiltaan on vain jatkuvasti menossa ympyrää
ja katsot kelloa yhdessä lanka ja sanonta, on viisi sekuntia
kulunut vielä?
Ja sitten kun se näkee, että toinen käsi on siirtynyt kuten viisi sekuntia
mitä tahansa, niin se herää ja sanoo, Voi, mitä minun täytyy tehdä?
Voi pitää juosta tämän koodin.
Ja sitten se tulee ajaa res.end hei.
>> Joten jälleen, että me emme koskaan täällä odottaa.
Joten se ei ole, että tätä koodia sisällä tämä toiminto vie viisi
sekuntia juosta.
Tämä koodi toimii melko paljon välittömästi, ainakin suhteessa
viiden sekunnin että puhuimme noin aikaisemmin ennen.
>> Joten vain osoittaa tähän toimintoon Voin tehdä Node.sleep.js.
Ja tein sotkea jotain?
Mahdollisesti.
Anteeksi.
Katsotaan, mitä voimme tehdä tilanteen korjaamiseksi.
OK.
Joten ehdottomasti käyttää Node.js.
Olen vain leikkiä.
OK.
Vain yksi sek.
OK.
En tiedä mitä se on.
>> Joten kysymys on, että minun toinen välilehti Täältä Juoksin Node jo
että samassa osoitteessa, 1337.
Niin virhe, että tämä heitti, jos katsomme sitä todellista tarkasti, on osoite
käyttää, EADDRINUSE.
Joten olin jo käytössä 1337 täällä.
Joten jos suljen tämän pois, ja sitten minä nyt yrittää ajaa tätä, toivottavasti kaikki
on hieno.
OK.
Joten sinulla voi olla vain yksi asia tavallaan kuunnella portissa kerralla.
Toinen ratkaisu olisi ollut minulle vain muokata kyseisen ohjelman ja tehdä
se on kuin 1338 tai jotain niin.
>> Mutta nyt nukkumaan käydessä.
Joten itse kokeilla sitä selain tällä hetkellä, koska se on
pikku unexciting nähdä se terminaali.
Joten olen juuri menossa mennä, että 127 osoitetta uudelleen 1337.
Ja jos näet sen -
En tiedä, jos voit - mutta minun selaimen ottaen hyvin, hyvin pitkä
aikaa ladata tai kuten viisi sekuntia.
>> Ja sitten sen jälkeen, että se lopulta päättyi vastausta.
Ja et näe sitä, koska asia liikutetaan vähän, mutta jos teen
Tässä hieman pienempi, voit voi nähdä se sanoo hei.
Joten sain hei, mutta viiden sekunnin kuluttua.
Ja se voisi olla hieman puhtaampi nähdä se täällä terminaali, joten olen
aikoo tehdä -
Tehdään tänne -
Tehdään Curl osoitteeseen jälleen 1337.
Ja minä vain sellaista tarvitse istua täällä viisi sekuntia.
Mutta huomaa, että palvelin voi hyväksyä uusia ratkaisuja.
Niin se tulostaa hei.
>> Ja demo tämän, pohjimmiltaan Voin tehdä tässä toisessa välilehdessä -
joten haluan sanoa, että en tässä toisessa välilehdessä Aion tehdä Curl ja sama
asia uudelleen.
Ja aion yrittää potkia näitä tyyppejä pois samaan aikaan.
Joten aion tehdä tämän, ja olen menossa kilpaa tänne ja olen
aio tehdä sitä uudestaan.
>> Ja tehkäämme niin, että sinulla voidaan nähdä molemmat.
Että yksi painettu hey ja että yksi painetut hei kaikki käynnissä -
Tehdäänpä että kokeilun uudelleen.
Tai oikeastaan ​​käytä tätä huijata, jos sopii.
>> Joten aion käyttää shell asia, että antaa minulle mahdollisuuden periaatteessa ajaa kaksi kopiota
Tämän ohjelman rinnakkain.
Joten se ajaa ensimmäinen ohjelma ja Toinen ohjelma rinnakkain.
Joten nyt jos painan Enter, se tulee tekemään pyyntöön melko paljon
välittömästi samaan aikaan.
Joten antaa tämän laukaus.
>> Joten nyt huomaa sanotaan kaksi prosessia.
Ja jos olet kiinnostunut, että 27000 numero on pohjimmiltaan prosessi ID.
Ja sitten huomaa, ne tulostetaan hei samaan aikaan.
Se ei ollut meidän piti odottaa viisi sekuntia yhden ja sitten sen jälkeen,
viiden sekunnin kuluttua saat toisen.
Niin, että on tavallaan, tietyllä tavalla, se on ei oikeastaan ​​todisteita, mutta se on
intuitiivinen näyttöä siitä, että se ei ole vain kuten odottaa viisi sekuntia ja estää
koko säiettä.
OK viileä.
>> Niin Aaron kysyi kysymyksen aiemmin, että oli, hyvin, mitä jos emme tee jotain -
Jep?
>> Yleisö: Odota.
Miten on, että eroaa printf puskuria, vaikka?
Eikö se automaattisesti tehdä?
Miksi meidän täytyy huolehtia siitä?
>> KEVIN SCHMID: Voi, voi sinua sanoa, että vielä kerran?
>> Yleisö: Ei pidä printf puskuria tehdä täsmälleen sama asia?
>> KEVIN SCHMID: printf puskuri?
>> Yleisö: Joo.
OK.
Ei ollut yksi tietokilpailuja he olivat puhumme siitä, miten jos oikea printf
jotain ja sitten on se tauko yksi Toinen, ja sitten on se silmukan kymmenen
kertaa, se odottaa kymmenen sekuntia ja sitten printf kaikki yhdessä?
>> KEVIN SCHMID: Oh, OK.
>> Yleisö: se tekee saman asia sitten tässä tapauksessa?
>> KEVIN SCHMID: Eli kysymys oli periaatteessa yksi entisen tietokilpailuja
tai jotain, siellä oli kysymys, että Periaatteessa jos sanot print f 10
asioita kerrallaan ja sitten nukuin kuin vuonna prosessi tulostaa ne pois,
lopussa jostain syystä, se olisi vain dump nämä kaikki ruudulla.
Niin siellä on tavallaan kaksi eri käsitteitä täällä.
>> Joten kai yksi asia on, että tässä tapauksessa olemme tekemisissä kahden eri
tavallaan ihmiset pyytävät palvelin asioita samalla kertaa.
Ja siitä syystä, että printf sellainen odottaa kaltainen ja kaatopaikkojen sen kaiken ulos
kerralla liittyy enemmän miten printf sellainen -
niin tapa printf on todella täytäntöön on se pohjimmiltaan on
puhua käyttöjärjestelmän kirjoittaa että tavaraa konsoliin.
Joten se ei halua tehdä kaikkea tätä kamaa heti kun sanot printf
Joissakin merkkijono koska joka voisi tulla kalliiksi, jos se on
tehdä joka kerta.
>> Joten jos et printf hei, ohjelma ehkä todellisuudessa tulostaa, että
välittömästi konsoliin.
Voisi sanoa, OK, kirjoitin sen.
Ja sitten tavallaan odottaa sinua antamaan se hieman ennen itse
kirjoittaa sen ulos konsolin.
>> Niin siitä syystä, että näin oli -
ja se on tavallaan liity to sleep -
on, että uni oli tavallaan vain pistetään osoitetaan,
se, että se ei kirjoita se synkronoidusti.
Mutta syy siihen on juuri tehokkuutta niin, että sinun ei tarvitse
tehdä, että monet yhteydet käyttöjärjestelmä.
>> Mutta täällä, mitä me todella yrittää tehdä tämä uni asia on juuri näytä
että kun meillä on kaksi ihmistä vierailevat tällä sivustolla, se ei tule laittaa
niitä kohtaan, jossa se aikoo sanoa Minun täytyy auttaa sinua, ja sitten kun olen
täysin valmis auttamaan sinua näiden jälkeen viisi sekuntia ja aion
siirtyy seuraavalle henkilölle.
Joten ensimmäinen henkilön pyyntö ei sitoa Tällöin silmukka
jos se on järkevää.
>> Mutta tässä on todella esimerkki jotain, joka sitoo
up tapahtuma silmukka.
Joten tässä on kamala toiminto laskea nnen Fibonacci.
Se on kirjaimellisesti pahempi tavalla voit laskea nnen Fibonaccin numero.
Ja tämä on oikeastaan ​​vain tunnustamaan jos tämä tuli,
siellä on todella -
Tarkoitan, voit yrittää mennä etsimään sitä - mutta siellä on kuin hyvin pitkä blogi
viesti, että joku kirjoitti.
Se on kuin yksi niistä Reddit asioita.
Mutta joku kritisoi Node.js ja he käyttivät tätä esimerkkinä.
Joten olen sellainen halusin vain näyttää teille kaksi erilaisia ​​näkökulmia vain saada
yleinen käsitys käsitteiden takana nämä kaksi asiaa.
>> Mutta tämä on valittu vain kamala, hirvittävän tehoton laskennallisesti
intensiivinen tapa laskea nnen Fibonacci numero.
Aivan kuten Sivuhuomautuksena, miksi se kamala kuin yhdellä tavalla?
Jep?
>> Yleisö: Sano aloitat ulos 1000.
1000 jakautuu 999 ja 998.
Jokainen tämän jakautuu kaksi asiaa.
>> KEVIN SCHMID: Oikea.
>> Yleisö: Kaikki alas.
>> KEVIN SCHMID: Aivan.
Joten vain toista kameraa, jos olen soita fib on kuten 1000 tai jotain
niin, se on tietysti vähintään tai yhtä suuri kuin niin aion
mennä tähän muuta tapauksessa ja sitten aion soittaa fib 999 plus fiber 998.
Ja sitten jokseenkin kaikki, jotka työtä, fib 999 ei on
Tällainen tällä tasolla.
Jos menet alas, se on vieläkin tarpeeton kuin että, mutta jos vain
ajatella computing FIB 998 saa meitä melko lähellä fiber 999.
Oikeastaan ​​meidän pitäisi siis olla hieman fiksu siitä, miten me tavallaan uudelleen
Näistä mutta emme uudelleenkäyttö näitä asioita ollenkaan.
Joten voitte kuvitella tämä jättiläismäinen, jättimäinen puu, joka on vain kamala.
>> Mutta joka tapauksessa, OK.
Niin että oli kammiovärinää.
Se vain vie aikaa ajaa.
Jep?
>> Yleisö: [kuultavissa].
>> KEVIN SCHMID: Voi, voi sinua toistaa kysymyksen?
>> Yleisö: [kuultavissa].
>> KEVIN SCHMID: Ai niin tämä on vain koodi että tulee olemaan eräänlainen päälle
palvelimen puolella.
Joten tämä ei aio löydy selaimessa tai mitään.
Se on pohjimmiltaan mitä meillä on, että kun käyttäjä täällä melko paljon merkkeihin
niiden pyynnöstä uudelleen, kun me tavallaan pyytävät, aiomme soittaa
tämä toiminto palvelimen puolella.
Ja sitten saamme tuloksen takaisin kutsumasta tätä toiminnallisuutta.
Ja sitten me vain tulostaa sen käyttäjälle.
Joten käyttäjän ei oikeastaan ​​käsitellä Tällä toiminnolla liikaa.
>> Oliko tuo kysymys?
Onko järkeä?
OK.
Cool.
>> Joten jälleen, me teemme näin koko res.writeHead asia, jossa me tulostaa
otsikon.
Ja sitten päätän vastausta tekemällä maaginen numero on FIB 45.
Joten haluan vain ajaa tällä palvelimella.
Joten aion tehdä Node fib.js.
Joten nyt minun valehdella palvelin on käynnissä.
>> Ja sitten täällä, aion tehdä yksi näistä.
OK?
Joten olen juuri menossa sanoa, Curl.
Joten se vie vähän aikaa, mutta toivottavasti pian se loppuun ja
se tulostaa, että 45th Fibonacci numero.
>> Yleisö: [kuultavissa].
>> KEVIN SCHMID: sen pitäisi saada tehdyksi melko pian.
Joten sen pitäisi kestää viisi vaille kuusi sekuntia.
En tiedä, se on vain V8 oloa nopeasti, mutta joka tapauksessa tämä on
hyvin lyhyt esimerkki ja tarkoituksella kömpelö ja ei-triviaali
laskenta.
Niin sen jälkeen kun, se ei saa tätä.
>> Mutta nyt, mitä jos teen sen samanlaista Kokeilun kuin ennen, jos teen
kaksi pyyntöä samaan aikaan?
Joten tässä aion käpertymät osoitteeseen, ja aion
tehdä toisen Curl.
Ja muistakaa, kun teimme tätä nukkua palvelin, kun olemme periaatteessa ollut sitä
viiden sekunnin kuluttua, he melko paljon molemmat tulivat takaisin oikealle
samoihin aikoihin.
Joten se ei ollut erityisen sidottu.
>> Mutta katsotaanpa kokeilla sitä nyt.
OK, joten saimme kaksi prosessia.
Muistatko ne ovat prosessin tunnukset.
Tämä tulee olemaan hieman hankala kun me pitkittyä.
Joten haluan vain jäädä tänne ja odota.
>> Joten yksi heistä pitäisi tulla takaisin jälkeen kuten -
OK, joten yksi tuli takaisin.
Mutta miksi ei toista yksi palata ihan vielä?
Jep?
>> Yleisö: palvelin ei voi tehdä mitään kun se on laskentatehoa, että suuri määrä.
>> KEVIN SCHMID: Oikea.
Joten vastaus oli vain, että palvelin todellakaan voi tehdä mitään, ennen kuin
se computing että Fibonacci numero.
Joten nyt olen juuri saanut kaksi asiaa takaisin.
Mutta kai vain ajatella koodi hieman, miten se toimii
ja kaikkea.
>> Joten tämä toiminto tässä koodi, joka Olen kertonut tämän palvelimen suoritettavaksi, kun se
vastaanottaa uuden saapuvan pyynnön.
Niin se vain menee läpi tämän koko koodi, ja sitten se tulee menemään
Takaisin tapahtuman silmukka ja jatka sitten tarkistaa uusia tapahtumia.
Joten periaatteessa mitä olemme tapahtumassa on palvelin on
kuuntelee uusia asioita.
Ensimmäinen henkilö pyytää mitä 45 on.
Otamme tämän koodin laskea sitä.
Tämä koodi otetaan noin viisi kuusi sekuntia juosta.
Sitten palaamme tapahtuman silmukka ja tarkista uusia pyyntöjä.
>> Joten tämä on esimerkki siitä, miten, jos ovat asioita, jotka ovat ns compute
sidottu, tai käytä paljon laskennallisia, ei valtaa, mutta kuten on
laskentaintensiivisiä -
Oletan yksi asia sanottavana tästä on että tämä toiminto tekee täysin,
suurimmaksi osaksi, melko hyödyllistä työtä oikeassa.
Koko ajan, että soittopyynnön toiminto on käynnissä, se oli aika
paljon viettävät suurimman osan ajastaan ​​vain computing että nnen Fibonacci numero.
>> Mutta meillä oli vain yksi säie käsitellä.
Apache mallissa, kun kaksi ihmistä esittänyt pyynnön saada fiber 45, me
olisi ollut kaksi eri langalla.
Ja sitten käyttöjärjestelmän työtä olisi ollut, tai käyttäjän tasolla
koodi, joka hallinnoi kierteet, olis ollut viipaloida että ylös
CPU, tai vaikka olet ollut useita suorittimia, jakaa ne tasaisesti prosessorien
niin että he olivat molemmat viimeistely suunnilleen samaan aikaan.
>> Joten vain näyttää, miten voimme tavallaan - ja tämä ei ole yhteensä täydellinen
ratkaisu, mutta tavallaan, miten voimme tehdä tulla takaisin tänne ja tehdä
hieman paremmin.
Joten mitä olen tässä ohjelma nimeltä Fib C. Ja tämä periaatteessa käyttää
jälleen yksi solmun moduuleja kutsutaan Lapsi prosessimoduuliin.
Joten olen mukana, että huipulla laji samankaltaisten tekisin punnan kuuluvat
lapsi process.h tai jotain.
Nyt minulla on pääsy tähän CP muuttujan jolla on kaikki minun toiminnot.
>> Joten nyt mitä teen tässä vastaus käsittelijä on juosten tämän ohjelman
dot slash FIB 45.
Joten mitä olen tehnyt - ja olen juuri menossa astua ulos tämän ohjelman
vähän -
on Olen kirjoittanut C-ohjelma, joka pohjimmiltaan laskee
nnen Fibonacci numero.
Joten tässä on vain ohjelma, olen kirjoittanut C, joka laskee tämän.
Voin kääntää sen, ja voin ajaa se komentoriviltä.
Ja se tulee laskea 45. Fibonacci numero.
>> Niin huomaa se vain vie melko paljon niin kauan.
Olen luultavasti voinut käyttää viiva 03 to optimoida sen tai jotain,
mutta tein kuten säännöllinen kääntäjä asetukset.
Ja se tulostaa sen.
>> Mutta nyt, mitä minä olen sellainen tekee?
Voi anteeksi, väärän tiedoston.
Joten teen saman juttuja header kuin ennen.
Sitten teen tämän cp.exec.
Joten mitä tämä aikoo tehdä, on se aikoo suorittaa tämän ohjelman.
Mutta miten tämä toimii on se, että se ei tule odottaa
että ohjelman loppuun.
Se vain pohjimmiltaan sanoo Ohjelman toteutuksen.
Joten periaatteessa kirjoita tämä otetaan komentokehotteen sellainen.
>> Ja sitten, kun olet valmis kanssa se, suorita tämä toiminto.
Joten nyt sellaista saada tämän koko palautettu asia
kuten emme odottaneet.
Onko sellaista järkeä?
Jep?
>> Yleisö: [kuultavissa]?
>> KEVIN SCHMID: Eli tämä todella avata uusi prosessi tehdä se.
Joten tämä on todella, jollain tapaa, paha, ole super paha, mutta se on
tärkeää todeta, että tämä on tavallaan menee takaisin, toisaalta Apache
malli, jossa teemme kierteet ja prosessien kunkin pyynnön tai
prosessit kullekin pyynnölle.
Joten tämä on tavallaan analoginen mitä Apache tekee.
Joissakin tapauksissa se vain käyttää uutta lanka, joka on hieman enemmän valoa
painoarvoa kuin prosessi, mutta Apache voisi päätyä forking uusi prosessi
joka on sellainen mitä me teemme täällä epäsuorasti tekemällä dot slash FIB 45.
>> Ja niin siinä tapauksessa, me tavallaan aiheutuu samoista kuluista prosessien.
Joten tämä on vain yksi asia mitä voi tehdä.
Mutta vain osoittaa tällaista käynnissä.
Ja tämä puhe on vain todella, joilla pyritään esittää tällaisia ​​ohjelmia
tapa osoittaa erilaisia ​​näkökulmia miten suunnitella palvelimia niin.
Joten tämä on käynnissä, ja niin nyt jos teen Tässä taas, sain kaksi prosessia tunnukset.
>> Haluan vain puhua asioita huomauttaa.
Niin huomaa, että he ovat vähitellen.
Se on siistiä.
Koska se oli 27,122 ennen.
Mutta ilmoitusta nyt he tulivat takaisin suunnilleen samaan aikaan.
>> Ja nyt, hyvä kysymys kysyä miksi oli, että tapaus on, jonka tehtävänä
oli se nyt tavallaan tehdä näitä asioita Tällainen pelata rehellisesti keskenään
muuta, nämä kaksi tapausta dot slash FIB 45 että juoksin
tai että Node juoksi?
Kuka tavallaan tekee oikeudenmukaista, että he molemmat päästä eräänlainen mielipiteiden ajoaika?
>> Yleisö: [kuultavissa].
>> KEVIN SCHMID: Joo.
Joten periaatteessa, kun en dot slash FIB 45 tai jotain, nyt se on
Tällainen jopa käyttöjärjestelmän käsitellä runtime näiden ohjelmien.
Ja nyt se voi ajoittaa ne eri suorittimia tai sen
voi ajoittaa ne.
Se voi paloitella aikaa, että yksi CPU saa sitä tai että he saavat
toimimaan yksi prosessori.
Niin, että ajatus siitä.
Onko järkeä kaikille?
Joten nyt Node ei oikeastaan ​​pelaa osaa jakaminen näihin tehtäviin.
OK.
>> Niin, että on melkein se esimerkkejä.
Halusin vain näyttää yksi asia koska paljon tämä on tähän mennessä ollut
ole täysin Super käytännön joissakin tapauksissa.
Voin kuvitella kotiin tämän jälkeen puhua ja jotain ja sanovat kuten,
hyvin olen sellainen riistäytynyt että puhetta, että Voin tehdä Fibonacci palvelin
Opinnäytetyöni.
Joten tässä on vain eräänlainen yksi esimerkki että toivottavasti tulee -
ehkä ei, mutta ehkä - hieman enemmän tavallaan liittyvät opinnäytetyöt ja
ajatellen tuollaista.
>> Joten tämä on chat.js.
Joten tämä on ikään kuin jonkin näytteen server side koodin, jota voisi käyttää
perustaa pienen chat-palvelimen, kuten olet ehkä nähnyt
Facebook Chat tai mitä tahansa.
Joten en sano tätä on kuin Facebook Chat, mutta tämä on tavallaan
kuten hyvä - ehkä ei hyvä, mutta ehkä hyvä - lähtökohta chat
palvelin sivustollesi ja opinnäytetyön.
Joten katsotaanpa mitä se tekee.
>> Joten saamme tämän erityinen asia yläosassa, tämä var SIO
vastaa vaativat Socket.IO.
Joten tämä on toinen asia, että se ei todella tulevat kylkiäisenä
Solmu, mutta voit asentaa sen.
Se on Node-moduuli.
Joten se on aivan kuin joidenkin laajennus Node.
>> SocketIO on itse asiassa todella eräänlainen jäähtyä.
Se on abstraktio, joka pohjimmiltaan mitä se on, on sen avulla voit
on tämä sarja viestintä välillä web
selaimen ja web-palvelin.
Joten suurin osa tähän mennessä meillä on ollut Näiden hyvin nopeasti yhden sekunnin tai kaksi
Toinen välisen viestinnän web selaimen ja web-palvelin.
Joten se on periaatteessa mennä google.com, get kamaa, lähettää sen takaisin, ja sitten
olemme valmiit.
Emme koskaan puhu uudelleen ennen käyttäjä on jotain muuta.
>> Mutta mitä Socket.IO ja samantyyppinen asioita - ja SocketIO on oikeastaan ​​yksi
asioita, jotka on rakennettu kuin WebSocket joka on eräänlainen saatavilla
osana HTML5 -
jonka avulla voit saada tämä jatkuvaa vuoropuhelua.
Ja tämä on erittäin hyödyllinen chat-palvelimen sellainen asia, koska se on
ikään kuin jatkuvaa vuoropuhelua Jollain tavalla koska jos olet chattailuun
jonkun kanssa, voit nyt vain lähettää Viestin alas putkeen, ja sitten
palvelin voi lähettää viestin alas putken toinen henkilö olet
chattailuun.
Ja sitten voit olla tämän vaihtaa niin.
>> Niin, että sellainen mitä SocketIO on hyvä.
Syystä, että SocketIO käyttää WebSockets yksi asia on, että
lisäksi vain tavallinen vanha WebSockets, se myös tekee joitakin temppuja pohjimmiltaan
tehdä selaimen kanssa.
Joten selaimissa, kuten Internet Explorer valitettavasti eivät tue WebSockets
oikeus kättelyssä.
Joten se käyttää joitakin muita eräänlainen jäähtyä siisti asioita Adobe Flash sallia
voit olla rajat selain tukee.
Joten se on todella hyödyllinen.
>> Ja oikeastaan ​​tiedän, että olen sellainen käynnissä aikaa täällä, mutta CS50
Keskustele, oletko koskaan nähnyt jotain kuten, en tiedä, tyhjä niin ja niin on
vastaamalla tähän viestiin tai jotain niin, että ominaisuus?
Se on SocketIO.
Joten kun joku alkaa kirjoittamalla keskustella laatikko tehdä vastauksen tai
jotain, selaimesi ei mitä kutsutaan SocketIO säteilee jonkinlainen
Jos sanoo jonkun vastaamalla tähän virkaan.
>> Sitten palvelin sanoo, OK, Mitä minun täytyy tehdä?
No nyt minun täytyy kertoa ne muut kaverit jotka ovat CS50 Keskustele näköinen
tätä viestiä, että joku vastaaminen.
Niin, että sellainen mitä SocketIO on hyvä, tämä jatkuva tällaista
virta vuoropuhelua.
OK.
>> Joten mitä minulla on täällä - ja olemme vain menossa sivuuttaa yhteydet array
varten hieman -
mitä teen, on minulla toinen kuuntele.
Joten se on vain tapa Socket.IO on sanomalla Kuunnellaan tässä portissa.
Ja sitten tehdä tämän yhteyden.
Joten se on vain pohjimmiltaan Socket IO: n tapa sanoa, kun saamme
yhteydessä haluan sinun suorittaa tämän koodin.
>> Ja huomaa, että sen sijaan, rec ja res läpäissyt siellä minulla on Socket.
Ja tämä Socket idea on periaatteessa tämän asia, että voit lukea ja kirjoittaa
alkaen, että on käyttäjän viestien mahdollisesti.
Ja viestejä, joita voit lähettää voi mennä läpi, että Socket.
Onko järkeä?
Joten se on tämä jatkuva asia.
>> Joten mitä teen, on soittaa Socket.emit.
Ja Emit vie melko paljon kaksi argumenttia.
Ensimmäinen argumentti on merkkijono vain edustavat tyyppi
asia olet emitting.
Joten tässä tapauksessa, olen käyttöön tämä merkkijono uusi viesti.
Ja tämä on vain pohjimmiltaan sanomalla, että tyyppi tämä asia, mitä olen
lähettäminen, on uusi viesti.
Joten voit kuunnella tietyntyyppisiä kuten uuden viestin tai jotain
käyttämällä pisteellä.
>> Joten yhteys ja käyttäjän sinne lähetetään, jos katsot missä me kutsumme piste,
ne ovat muiden kielien, jotka edustavat erilaisten käyttäjien viestejä.
Joten se on periaatteessa voit saada tämän emit yksi näistä viestin tyyppejä, ja
sitten tehdä jotain vastaukseksi yksi näistä viestin tyypit
>> Joten olen emitting tämän uuden viestin.
Aiomme jättää connections.push toista.
Mutta sitten sanon, Socket.on käyttäjän lähetetty.
Joten nyt se on tavallaan kuin silloin, kun käyttäjä lähettää minulle viestin, haluan
voit suorittaa tämän koodin.
Ja huomaa, että tämä nimetön funktio ryhtyy tämän muuttujan
nimeltään data joka on pohjimmiltaan menossa on käyttäjän viestin.
>> Joten Nyt sellainen puhua liitännät array.
Joten tämä on suunniteltu chat client jossa periaatteessa kaikki on tavallaan vuonna
sama chat.
Joten periaatteessa, mitä meidän täytyy pitää noin on noin array että pohjimmiltaan
edustaa kaikkia ihmisiä jutteleminen Jollain tavalla, jos se on järkevää.
Oikea?
Koska meidän täytyy tietää, kuka ne tyypit niin voimme lähettää heille viestejä
että muut ihmiset lähettävät meille.
>> Joten mitä tämä koodi tekee on, kun käyttäjä lähettää viestin - se tyyppi
tapahtuma -
aiomme suorittaa tämän koodin.
Ja mitä teemme on käymme läpi tätä array että olemme kutsuneet yhteyksiä.
Ja melko paljon jokainen liitäntä paitsi yksi, joka on meidän, se on
mitä tämä koodi sanoo, lähetämme uuden viestin, että liitetty viesti
tietoja.
>> Joten jos huomaat täällä, mitä tein, kun käyttäjä todella tekee uuden
yhteys on Olen lisännyt kanssa JavaScript.push menetelmä, tämä on
pohjimmiltaan vain sanomalla, kuten lisätä että Socket arvona osaksi
yhteytemme array.
Joten nyt kun tämä koodi suoritetaan, se Lähetä asioita kyseisiä
liitännät.
Joten tämä voi olla hyvä lähtökohta tehdä chat-palvelimen
tai jotain vastaavaa.
>> Ja sellainen cool juttu on, että koodi jonka näet täällä vastaavaa ja
lähettävät ja tavaraa niin on sama Tällainen JavaScript-koodia, joka olisit
kirjoittaa selaimen vuorovaikutuksessa palvelimen kanssa.
Joten siksi SocketIO on eräänlainen siisti ja käyttökelpoinen tällä tavalla.
>> Niin ja vielä yksi asia todella nopeasti.
Oli CS50 opinnäytetyön viime vuonna että pohjimmiltaan toteutettu chat
palvelin Node.js.
Minusta se on Harvardchats.org mutta en ole -
OK.
En ole varma, mitä URL-osoite on, mutta Voin lähettää, että jälkeenpäin.
Mutta se on tavallaan jäähtyä mitä voit tehdä Node.js.
>> Joten toivon, yleensä teillä hyvän tunteen, mitä Node.js on hyödyllistä
ja miten voisit ehkä hakea oman opinnäytetyön.
Aion lähettää lisää resursseja yhdessä tämän.
Ja kiitos että tulitte.
Kiitos.
>> [APPLAUSE]