>> KEVIN SCHMID: Pozdrav svima.
Dobrodošli na CS50 seminara Na Node.js.
Moje ime je Kevin.
Ja sam CS50 TF.
I ja sam nešto kao jako uzbuđeni o ovom seminaru.
Mislim Node.js je vrlo cool.
Nadam se da je ovaj seminar može se koristiti kao dobro, pretpostavljam, dasku za
neke od svojih završnih projekata, ukoliko da ste zainteresirani za korištenje
nešto poput Node.js.
>> Mi ćemo svojevrsni početak seminar isključiti samo govori o malo
vrsta pozadinskog skalabilnost perspektive Node.js, a zatim
ćemo premjestiti na neke primjere koda.
I ja ću imati kod na web stranicama, a možete pogledati kôd.
I nakon seminara, Sredit ću govoriti o tome kako se postaviti Node.js
na vašem računalu.
>> OK.
Pa počnimo.
Pa mislim da samo želim razgovarati o tome Web poslužitelji, zapravo, prvi put.
A za početak ovu raspravu, ja osnovi imaju dijagram koji je od
Udžbenik koristi za CS61, koji osnovi pokazuje interakcija
između procesa klijenta, kao što je vaš web preglednik ili kao što je vaš cilj klijenta ili
nešto slično, i web poslužitelja.
Dakle, ta vrsta izgleda slično sliku koju je vidio u predavanju o
Srijeda, gdje zapravo imamo neke Proces kao što su Google Chrome klijenta.
>> A onda je jedan korak Klijent šalje zahtjev.
Tako da može biti nešto kao i neka je posjetiti, ne znam, CS50.net.
Tako smo izdati taj zahtjev.
I ne bilo tko sjetiti imena protokol koji određuje kako se to
Zahtjev treba biti strukturiran?
Yep.
>> PUBLIKA: [nečujan].
>> KEVIN SCHMID: Točno.
Dakle, to je kao HTTP, zar ne?
Tako je u osnovi specifikacija za koliko Zahtjev da se zapravo trebao biti položen
van, jer je na kraju dan, taj zahtjev zapravo samo željeli
niz koji u osnovi kaže želim to.
I specifikacija za koji je HTTP.
Dakle, to je kao protokol.
>> Pa onda poslužitelj prima taj zahtjev.
Dakle, vi imate instaliran web poslužitelj u CS50 aparata.
To je Apache.
I ovaj tjedan kad radite na problemu postaviti sedam, zapravo ćete biti rad
s tim web poslužitelja.
Dakle, poslužitelj primi taj zahtjev, a onda to mora nekako ispočetka njegova
glavu i reći kao i ono što da radim s ovim?
>> Dakle, na temelju onoga što se odluči na to, onda možda morati obratiti nekakav
od resursa.
I koji bi mogao biti izvor mnogo različitih stvari.
Za jednu, to bi mogao biti samo poput statičkog HTML datoteke.
Dakle, to samo može biti kao neki HTML koji je kao za
Vaša osobna web stranica.
To bi mogao biti statična sliku kao slika ili kao film koji imate.
To čak može razgovarati do neke vrste baze podataka
poput MySQL baze podataka.
Dakle, to ne mora uvijek komunicirati s resursima, ali u
U nekim slučajevima, to može.
>> Pa onda ono što će učiniti Nakon toga je da će
poslati natrag odgovor.
A odgovor na to je Također je navedeno od strane HTTP.
Pa onda klijent može primiti.
To ga razdire i obraditi.
I onda ste dobili web stranicu poput Google ili CS50.net ili
god otišao.
OK?
>> Dakle, to je osnovni interakcija koje ćemo se baviti.
I mi smo prilično mnogo će biti s naglaskom na ovom dijelu
interakcija, poslužitelja.
OK.
Cool.
Bilo tko imati bilo kakvih pitanja do sada?
OK.
>> Dakle, kao što smo rekli, web poslužitelj prima ovo HTTP zahtjev, a zatim donosi ovaj
HTTP odgovor.
I kao što smo razgovarali o tome i prije, CS50 aparata web poslužitelj Apache.
Dakle, kada ste dečki rade na P postaviti sedam, idete da se radi s
Apache web poslužitelj.
Vi nikada nećete morati jako raditi sa Apache izravno previše.
Vi vrsta konfiguriranje Apache malo Kada navedete virtualni domaćini ili
V domaćini, te da ćemo dobiti to da u malo.
>> Ali u osnovi, Apache web poslužitelja postavljen za rad sa PHP vrste
od out of the box.
Dakle, što se zapravo događa je kada idete na jednu od vaših web stranica kao što su, recimo,
lokalni domaćin slash index.php ili tako nešto, Je li vaš preglednik šalje da
Zahtjev, a zatim Apache sjedi postoje i figure out učiniti s njom.
I akcija je izvršiti da je kod u index.php i
a zatim ga poslati natrag.
Dakle, tamo je.
Tako smo nekako razgovarali o tome.
Dakle, to samo može poslužiti statičnu sliku ili pokrenuti neke PHP kod i onda problem
odgovor.
>> Pa onda zajedničko pitanje koje može doći gore je dobro, kako ćemo zaista bave
sa što više korisnika u isto vrijeme?
Pa zamislite da ste bili pisanju web poslužitelj, ako je web poslužitelj koji
da si pokušavao pisati u nečemu kao C ili nešto slično,
osnovi možete razmišljati o tome kako postoji bi mogla biti neka vrsta koda koji
će primiti zahtjev, ali onda to mora učiniti sve to raditi na njemu.
To možda ima, primjerice, obratite baza podataka ili nešto slično.
Zar ne?
I onda bi napraviti takvu obrade, a zatim
poslao natrag odgovor.
Tako da je kao visoki Pregled razini.
>> No, to nije odmah očito kako možete to učiniti tako da se dvije osobe ili
čak 1.000 ljudi mogli raditi sa svojim Web poslužitelj istovremeno.
Dakle, rješenje koje Apache koristi naziva teme ili procesi.
Dakle, možda ste čuli ti termini prije.
To je u redu ako niste, ali samo mislim o niti ili procesa kao načina za
operativni sustav ili program korisnika ili nešto slično ili web poslužitelj
na neki način izvršiti više stvari odjednom.
Dakle, možda ste čuli za pojam kao niti izvršenja.
Dakle, to je vrsta kao što ste svojevrsni multitasking.
>> A ako ste vidjeli na kutiji od svoje laptop, ili nešto slično,
višežilni, što možete učiniti je možete izvoditi dvije različite teme na drugačiji
dijelovi procesora, tako da oni mogu zapravo dogoditi istovremeno.
Dakle, ovo je stvarno moćan.
A to je vrsta Apache-a Rješenje ovog problema.
>> Dakle, postoje li vrste poput bilo kojeg pitanja s ovim pristupom, iako?
Pa mislim da sam nekako ih je napisao tamo.
No, obojica su nekako koriste mnogo memorije.
To je vrlo skupo za izradu nit ili procesa.
>> I dio obrazloženja je da je samo kao kad radite C program
kao što je vaš glavni, a zatim da se pozivi još jedna funkcija, koja ima
neka vrsta dimnjaka.
Dakle, niti je također zahtijevaju cijelosti odvojeno stog koji
može biti vrlo velik.
A ako možete zamisliti da tone Korisnici na svoju web stranicu, te će imati
Mnogo različite teme.
To je puno dimnjaka na upravljanje i održavanje.
Tako da je velika potrošnja memorije.
>> A onda, također, recimo imate samo jedan procesor, ili recimo imate
više niti nego što imaju ti multicores.
Zar ne?
Pa recimo da je imao 10 teme i vama je samo pet procesora.
Vi vrsta morati učiniti nešto takvo, gdje prebacujete između struje
onaj koji je pokrenut jer ste Ne mogu izvoditi svi 10 odjednom.
I to se zove switch kontekst.
I da pojam zapravo ima par različitim kontekstima, ali neka je samo
mislim da je to kao prebacivanje između dvije teme.
To može biti prilično skupo, jer osnovi ono što morate učiniti je što
morate zaustaviti ono što radite, spasiti stanje tog tekućeg nit, a
zatim se prebacite na negdje drugdje.
>> Dakle nema svatko vrsta vidjeti motivacija zašto teme i
procesi mogu biti malo prostran?
A jeste li pitanje?
OK.
Cool.
Ima li tko kakvih pitanja?
OK.
>> Dakle, ako ćemo uzeti jedan korak natrag za drugi, Tu je vrsta kao što
Kad kažemo da možemo napraviti oko Mnogo web aplikacija.
I to je stvarno tako puno njih zapravo, ne radite to puno korisniji
raditi unutar nit.
Tako je bilo tko je započeo P postaviti sedam uopće?
Dakle, želite li možda opisati Neki od dijelova?
Jeste li radili na prijavu ili nešto slično?
>> Ivanković: Ne.
>> KEVIN SCHMID: OK.
Ništa za to.
Oprostite.
Ali u osnovi, u P skupa, ti si će biti stvaranje mnogo vrsta
upita na bazu podataka kako bi dobili neki Informacije iz te baze podataka.
I ono što je kod ispravno ćete da se radi, što to Apache proces ili
da Apache nit će biti događaj a to je da se obratite
Baza je to vrsta će biti sjedi tamo i to će biti
čeka baza za odgovor.
>> Sada da možda ne zvuči kao neka velika nositi, jer je baza podataka na vašem
CS50 aparata, zar ne?
Ali postoji neka vrsta mreže latencija tamo, jer sada web
poslužitelj mora izdati svoj zahtjev za baza za komunikaciju s
baza podataka, a zatim se da Informacije natrag.
Dakle, sada je kao i čekaj me, ja sam ići dobiti nešto od
baze podataka i zatim tu je Puno čeka događa.
Ima li to smisla?
>> A za neke stvari to nije tako loše.
Ako se samo ima, na primjer, Access Memory, koji nije kao
strašno I / O latencija.
A kad kažem, I / O latencije, što sam koji se odnosi na je poput bilo koje vrste kao
ulaz izlaz.
Ali za pristup datoteku na disku, kao i ako sam želio služiti statički HTML
datoteku koja je bila na mojoj web stranici ili nešto slično, nekako moraju
zaustavi za malo, pročitati tu datoteku u iz diska, a zatim u
taj proces čekam.
Neću to korisnog rada.
>> To ne vrijedi za sve, ali to što je uobičajeno u aplikacijama kao što su P setu
sedam i puno aplikacija da ti nisi
zapravo radiš puno razmišljanja.
A kad kažem razmišljanje, mislim kao i računalne rada.
Dakle, računalna posao mogao biti nešto kao što je, recimo, vi htjeli
napisati web poslužitelj koji samo izračunanoga n-ti broj Fibonacci.
To ne zvuči kao posebno zabavno web poslužitelja.
Kao i ja ne očekujem da stranice biti Sljedeći Facebook, ali to je neki
vrsta računalne rada.
>> A možete zamisliti zamjenu da s neka druga vrsta zanimljiva
računalna rad.
Recimo da ste pisali nešto koji izračunava stupnjeva
razdvajanja između dvoje ljudi ili nešto slično.
Tako da ne uključuje neku vrstu obračuna, zar ne?
Pa čak i tada, za to još uvijek ima učiniti puno čekanja za možda
imate na upit bazu podataka za pogledati up koji je prijatelj s tko ili
nešto slično.
Dakle, ne postoji takav pojam računske rad.
Ima li to smisla?
Ima li tko kakvih pitanja?
>> Oh i ja valjda stavio sam chat poslužiteljima postoji jer chat poslužitelji su vrste
još jedan dobar primjer za to.
Chat poslužitelj nema učiniti mnogo razmišljanja.
To samo treba čekati za ljude da slati poruke i onda kada
oni, poslati ih.
OK?
>> Dakle, samo da se opet recap, Apache i slični web poslužitelja kao što je to vilica a
Mnogo teme i procesa koji može biti vrsta rastrošna.
Pa mislim da se pitanje kako mogu doći iz koje se trebamo imati
više niti i procesa?
Što ako smo upravo imali jedan?
>> Dakle, neka je vrsta slikati sliku što bi to izgledati.
Tako ćemo koristiti samo jednu nit.
OK?
Dakle, samo zamislite ovo s jedne niti.
>> Pretpostavimo da doista ne radi toliko korisna - a kad kažem
korisno, mislim računalne rad -
u tim više niti prije.
Dakle, neka je vrsta konsolidirati sve u jednu nit.
Pa što ako smo imali jednu nit koja ljubaznu samo ide okolo u petlji i
stalno provjerava učinio nešto Nova dogoditi.
Tako na primjer, nešto novo dogodilo bi moglo značiti da je dobio nešto natrag od
baza podataka, ili netko poslao mi novi HTTP zahtjev.
Dakle, oni su vrsta događaja to dogodilo, zar ne?
>> I onda ono što ja mogu učiniti kad oni novi stvari koje se događaju u tom istom thread
izvršenja, taj jedan nit izvršenja, mogu nazvati neki kod koji
će nositi tu određenu stvar.
Tako primjerice, ako sam dobio nešto natrag iz baze podataka, mogao sam pokrenuti moje
Mali računalna dio toga da zapravo samo priprema stvar
poslati natrag korisniku.
Tako se ta vrsta ima smisla?
>> No, ono što su stvarno Posljedica toga?
Zar ne?
Zato što sam napisao Mnogo kod tog -
a ja sam samo idući u skok naprijed u slajdovima, ako je to u redu.
Dakle, ako vam ne smeta, ja sam samo ide se korak unatrag.
Dakle, ovako nešto je zove događaj petlje.
OK?
I nekako je osnovni Ideja Node.js.
>> Pa što Node.js stvarno radi kao webu poslužitelj postoji jedna nit
da je u osnovi se vrtimo u petlji kao dok je jedna vrsta nedovoljne
napa od Node.js koji je stalno ček, jesmo li primati nove stvari?
I onda će se izvoditi rukuju koje ste postavili.
No, dobro pitanje to pitati je, kako možemo napraviti ovo dogodilo
s postojećim stvarima?
>> Zato sam stavio liniju C kod ovdje osnovi izgleda kao da je otvaranje
podnijeti, zar ne?
Ja je upravo izašao s albuma.
Zato sam morao joj otvoriti novu datoteku.
Dakle, način na koji naš C kod za operativni -
i mislim da razlog izabrao sam bio datoteke jer je to vrsta mjeri
od I / O poslu koji smo učinili u C u Osjećaj da je ulaz izlaz.
Dakle, mi to nazivamo kod koji čini f otvorene.
A onda je u sljedećem retku naših Program, sada možemo raditi s f.
>> Dakle, to će biti primjer nešto to je kao sinkroni ili
blokiranja, jer na toj prvoj crti postoji čekamo dok ne
dobili file otvoren.
Dakle, u drugom redu, znamo da smo može raditi s F, a to znači da se
da je druga linija stvarno ne mogu izvoditi dok se prva linija je učinio.
Ima li to smisla?
>> Dakle, to bi bilo loše da se stavi u događaj rukovatelj.
A razlog za to je da ova vrsta čeka, zar ne?
Dakle, to bi nas vratili natrag na istu stvar.
I sada mi se ne bi ni korist od više niti ili
procesi, jer smo dobili jedna nit u Node.js.
Da li to smisla svima?
>> PUBLIKA: Čekajte.
Dakle, ono što je zamjena?
>> KEVIN SCHMID: Oh, pa da.
Tako da ću doći do zamjena.
OK.
Pa što ako smo imali nešto koji je izgledao ovako?
Pa što ako sad sam uredio f otvoriti malo?
Pa ja sam u prolazu isto dva argumenta kao i prije.
Ja još uvijek volim novu pjesmu da je izašao s.
Ali ja sam prolazi treću stvar koja je ova varijabla zove code.
>> No, ono što je kod zapravo u ovom kontekstu?
Je li to kao redoviti C varijablu?
To je funkcija, zar ne?
I to može biti malo čudno, jer Ja sam zapravo kao sada prolazi
funkcionirati u drugu funkciju.
>> Dakle, par stvari koje trebate imati na umu to.
Jedan, nisam zapravo zove Kod funkcije.
Tako da ne vidim kod s lijeva zagrada, zar zagr.
Ja sam samo u prolazu u kodu.
A u C, što bi to zapravo učiniti je dati mi pokazivač da stvarna
broj, i onda bi to moglo pokrenuti ga.
Ali samo razmišljati o tome što ste položenog koda pri
da je datoteka otvorena.
>> No, što to znači da je sada Ostatak mog programa koji bi mogao napraviti
druga stvar, može nastaviti raditi druge stvari, a mi, stvarno ne čekati, ali
samo u stražnjem dijelu glave koji Kada se to dokumenti su otvorene, staza na kojoj se
Kod na vrhu.
Ima li to smisla?
>> I sada Ideja je da Node.js Kod u napraviti stvari s f
dio bi trebao biti prilično kratko i jednostavno i jasan, a ne stvarno biti
Vrlo računski intenzivna.
To će možda morati otvoriti još jednu sliku, ali koji je također trebao biti prilično brzo
jer to samo treba reći napraviti još jedan f otvoriti i onda to nazivamo drugog koda.
>> Dakle, samo da bude potpuno jasno, f otvoriti da se novi Katy Perry pjesmu
učinio mp3, da će se to prilično koliko vratiti odmah.
I onda mi samo možemo nastaviti raditi druga stvar, jer sve što je sada f
Otvoreni poziv nema je reći osnovi Temeljni f otvoren kod otvoriti ovu datoteku
i kada ste gotovi s otvaranjem ove datoteku ili kada ga dobiti natrag,
zatim pokrenuti taj kod.
No, to ne zapravo pokrenuti taj kod.
I što je pitanje?
>> PUBLIKA: Kao da si podrazumijeva nekoliko puta da dodavanje računski
intenzivna kod vrsta razbiti [Nečujan] upravljan sustav.
[Nečujan]?
>> KEVIN SCHMID: To je veliko pitanje.
Tako sam zapravo primjer kako možete integrirati računski
intenzivna kod u malo.
Dakle, kada smo dobili na primjere koda, Ja ću biti sigurni da će se povući taj jedan.
Je li to u redu?
Hvala Vam.
>> Koje je tvoje ime?
>> PUBLIKA: Aaron.
>> KEVIN SCHMID: Aaron dovodi do vrlo dobra stvar, a to je da, ako sam imao
Neki računski intenzivna kod u učiniti stvari s f dijela, ostatak
moj program ne može pokrenuti i ne mogu slušati za nove zahtjeve ili ništa dok se sve
ta stvar je gotova.
Dakle, ako ja pišem čvora kod u cjelini osim ako mi nešto kao da ću
predložiti kasnije, kada pogledamo kod primjera, moram biti siguran da
moj broj ne vezati ovaj događaj petlje.
Ima li to smisla?
OK.
Cool.
>> Dakle Node.js nudi ovaj okvir koji možete izgraditi tih događaja odvezao
poslužitelje s.
Tako da je ova vrsta asinkroni ne-blokiranje I / O knjižnice, dok je
standardne C biblioteke da smo bili rad s, kao i ako ste upravo
koristiti ih na isti način na koji smo bio koristeći ih s f otvara i
stvari, one blokiraju jer vi ste zapravo morati čekati
tu datoteku otvoriti.
>> Ali Node.js daje vam da se i to osnovi veže na Googleov V8
JavaScript engine koji je razlog da Chrome je tako brzo na obradu
JavaScript jer ima tu V8 motor.
Pa znam da zvuči kao jedan od onih WWDC razvojne konferencije stvar
gdje su samo baciti hrpu Pismo broj stvari za procesore
i kažu da je to super.
Ali, to je super da su učinili to zato JavaScript -
ili možda ako niste upoznati s JavaScript još, jer nismo imali
Predavanja na njega -
ali JavaScript je tumačiti jezik.
>> A to je važna točka previše.
Dakle, to je važno za našu webu poslužitelji biti brza, zar ne?
A ako smo samo trčanje JavaScript kod koji se tumači sa samo
bilo staro tumač to bi moglo biti spor.
Dakle Čvor koristi od toga imaju super brzo V8 tumač.
A ja ne znam da li su ga nazvali jer V8 slap u čelo
stvar, ali u redu.
>> Tako sam pripremio neke primjere na ovom URL-u.
Nakon seminara, ja sam nekako ide govoriti o tome kako možete dobiti čvora set
gore, ali za sada, samo sam nekako žele šetati kroz neke primjere koda.
Dakle, ako želite pratiti zajedno, sve Izvorni kod je dostupan ovdje.
OK?
>> Tako da ću napustiti ovaj URL za malo.
I onda sam samo ću prebaciti u terminal.
Jesu li svi dobro s ovom URL-u?
Tako da ću prijeći mom terminala ovdje.
>> Dakle, ovdje je kod koji Imam za danas.
Zašto ne počnemo s simpler.js podnijeti?
Druga stvar je da je sve to Kod će biti zapisano u
JavaScript koju svibanj ili Ne može biti upoznati.
Valjda par stvari je da je puno JavaScript kod je vrsta
sintaksa i struktura je vrlo sličan C, tako da se nekako ga pokupiti što
što ide zajedno.
Pokušao sam napisati puno počevši kod za to na način koji je
slično C, tako da je Malo više čitati.
No, kao što smo napredak, ja ću biti pokazujući neke od dodatnih
značajke JavaScript da su vrsta cool.
>> No pogledajmo ovog uzorka programa.
Mislim da je sve to cut off postoji.
Samo ću se popraviti da je Real brzo, ako je to u redu ili ne.
Ne znam što to će učiniti.
Je li to malo bolje?
Možete li vidjeti var i stvari?
OK.
>> Dakle, prva linija je poput JavaScripta verzija varijable
deklaracija.
Dakle, samo istaknuti ono što bi to izgledati u C. Dakle, to je isto kao
mene govoreći indeks jednako je tri ili nešto slično.
Pa nisam navesti vrstu.
JavaScript ima vrste, ali to je vrlo dinamično upisali u prirodi, tako
nije pružio bilo kakve vrste na njega.
Dakle, to je samo var.
To je kao varijable.
OK?
>> Zovem ovu varijablu HTTP.
I s moje desne strane, moram Izraz koji želim staviti u HTTP.
A to, kaže zahtijevaju HTTP.
Dakle, ovo je neka vrsta slična uključiti.
To je malo više kao moćniji od su u smislu da uključuju
bi samo kopirati i zalijepiti zaglavlje podnijeti za funkciju prototipa ili
god s definicijama tipa.
No, zahtijevaju se zapravo događa da bi nam kod.
>> Dakle, možete misliti o njemu kao uvoza neki kod.
Dakle, negdje u Node.js modula Sustav ili što god, oni su sve to
HTTP poslužitelj koda, tako da sam samo je donijeli za moje vlastito
osobnu uporabu u ovom programu.
OK?
>> Pa onda imam tu funkciju koji sam napisao.
I primijetiti nisam morati navesti Povrat tip ili vrsta
Argumenti opet.
Tako nekako labav upisali u takvog smisla.
Dva argumenti da je potrebno u, Zahtjev i odgovor.
Tako da je konceptualno vrsta kao upoznati sa slike koje smo imali
na zaslonu prije, jer smo dobili ovaj zahtjev koji smo
ima od korisnika.
I onda imamo odgovor koji možemo pisati stvari.
>> Dakle, prva linija to ne res.writeHead 200, a onda je to
Vrsta sadržaja teksta običan.
Pa neka je to komad osim malo.
Tako ćemo se fokusirati na res.write za malo.
Tako je u osnovi pisati, i pisati glavu, su samo načini na neki način napisati
stvari na odgovoru.
OK?
Dakle, pisati glavu, ako itko sjeća iz HTTP predavanju, da li vi momci
zapamtite zaglavlja na Vrh HTTP stvar?
Pa zašto ne ja samo demo zaglavlja vrlo brzo.
Bi li to bilo korisno?
Ili bi mi samo vrsta -
OK.
Naravno.
>> Dakle, kada vaš preglednik ide na google.com ili nešto slično,
tu je zapravo malo više -
to je kao tajna -
Tu je kao malo više informacija koji dolazi kroz cijev nego samo
malo pretraživanja i sve.
Tako da vam pokazati ovo, idem koristiti program koji se zove Curl.
OK?
Dakle, to je nešto što možete raditi na Mac OSX naredbenog retka ili u
aparata ili bilo što drugo.
I tako, ako sam ne Curl HTTP google.com, Idem vidjeti HTML.
A to je, u pravednosti, samo HTML da ti nekako govori da
preusmjeriti na www ako vaš browser ne automatski obrađuju
preusmjeravanje.
>> Dakle, ovo je samo HTML, ali idem dodati Curl ovu crticu sam zastavu.
OK?
I to će se pokazati mene su zaglavlja.
Dakle, ovo je i podatak da je u pitanju kroz kad dobijem ovaj odgovor.
OK?
>> Tako se na vrhu, vidiš ovo HTTP 301 presele trajno.
A to je vrsta važno jer ovo se odnosi na status kod.
Dakle, 301 ovdje je stanje kod, što je zapravo samo cijeli broj
koji govori preglednika ili onaj tko je ovo čitate, ako se pretvarati da
ti si browser i vidite ovo, osnovi sada ako pogledate
da i vi vidite 301, znate ja imam učiniti nešto posebno na temelju
301, ili nešto posebno dogodilo temelji na 301.
Tako je, kaže preselili trajno.
>> A onda je, u osnovi, imamo hrpa ključnih parova vrijednosti.
Tako smo dobili mjesto je www.google.com.
I onda nekako sve to druge stvari, ali u osnovi, ono mjesto je
izreka je nova lokacija je na www.google.com.
Pa sad, ako idete na google.com, vi ćete svojevrsni vidjeti preglednik kakve tren
za drugi i onda preusmjeriti vas vraćam na www.google.com.
Dakle odgovori mogu sadržavati ovi zaglavlja.
>> I par stvari koje treba istaknuti.
Pa recimo da smo bili zapravo uspješna u posjeti web stranicu.
Zato me pusti da se -
Što je dobar website?
Ja sam loše na razmišljanje dobra web stranice na licu mjesta.
>> PUBLIKA: Wikipedia.
>> KEVIN SCHMID: OK.
Učinimo Wikipediju.
Dakle, ovdje sam se preselio.
Oh čekati.
Je li?
Da, bio sam.
OK.
Tako sam dobio za napraviti www.
Tako ću učiniti www.
I kao što možete vidjeti, ovdje je sve HTML koji browser će obraditi
za Wikipediju.
>> Ali, ako sam držati pomicanje gore, ono što ću vidjeti na vrhu -
wow, ima puno HTML na Wikipediji -
ali ono što vidim na vrhu ovdje ovo 200 status code za razliku
301 koji sam vidio ranije.
I primijetiti da ima lijep prijateljski redu uz njega.
Dakle, to je kao dobar status kod.
>> Je li to 200 broj izgleda poznato?
Da, jer kad sam simpler.js, Napisao sam 200 tamo.
Tako da je u osnovi govori reći preglednik ili tko pokušava doći do
to da su oni bili uspješni.
Ili da je vrsta kao što smo mi bili su uspješni.
>> I tu je ta vrsta posebnog sintakse u JavaScript za proglašavanje
Karta tih tipki kao vrstu sadržaja i te vrijednosti kao tekst ravnici.
Dakle, ako pogledate u odgovoru koji smo vratio iz Wikipedije prije, -
Ja ću pokušati pomicanje do malo brže -
Imate li ove tipke kao poslužitelj i te vrijednosti Apache.
Tako ste dobili ključeve i vrijednosti.
I vi možete odrediti u Čvora što poslati natrag.
>> Dakle, ovo je zapravo vrsta, u nekim načina, i na neki način to nije
stvarno, ali to je nešto niža razina od PHP koda da bi moglo biti
pisanja za P postaviti sedam, jer PHP i Apache nekako srediti neke
od tih stvari za vas.
U PHP-u, što može nadjačati zadane ponašanje pisanjem vlastitih zaglavlja.
No, za potrebe ovoga, dobili smo pisati iz vlastita zaglavlja.
>> Dakle, to linija smisla svi, pisati glavu linija?
OK.
Strašan.
>> Dakle, ono što mi je činiti onda je sam kraj odgovor rekavši hello world.
OK.
No, to je samo funkcija zove Zahtjev rukovatelj.
Dakle, sad sam zapravo na neki način učiniti nešto s tom funkcijom, zar ne?
>> Pa evo što ja radim je tu je to linija koja ne var poslužitelja dosegne
HTTP.create server, a onda sam prolaze u zahtjevu rukovatelj.
Dakle, ovo je neka vrsta čvoru način stvaranja poslužitelj.
I obavijest da sam prolazi u dogovoru rukovatelj.
Dakle, ovo je priča o createServer funkcija koja želim da mi napravite
poslužitelja, a kad se to poslužitelj prima odgovor, trebam li se to zvati
zatražiti rukovatelj funkciju.
OK?
>> Tako da je linija prilično završava odmah.
Dakle var linija poslužitelja je učinio pravu Nakon što to učinite prilično mnogo.
Mislim, to je postaviti neke unutarnje Država je znati da će morati
nazvati taj zahtjev rukovatelj funkciju, ali to neće sjediti i
recimo ima korisnik poslao ja još želja?
Je user mi je poslao zahtjev još?
Tako da ne blokira.
OK?
>> Pa što će to učiniti je to u osnovi Sada pohranjuje kazaljka na ovom kodeksu,
ovaj zahtjev rukovatelj funkciju, a zatim će pokrenuti taj kod kad netko
čini zahtjev.
I onda mi server.listen.
>> 1337 je prilično proizvoljna.
Nisam imao poseban razlog za branje taj broj.
To je potpuno slučajna.
Ali to samo specificira port.
Dakle, većina web poslužitelja vidjet ćete da su oni koristiti port 80, jer to je vrsta
poput konvencije.
Dakle, ako sam ići na nešto slično, Ne znam, Wikipedia.org,
i ja staviti debelo crijevo 8 -
oh wow, ne možete vidjeti.
Žao mi je.
Ali, ako mi je činiti Wikipediju -
Ja ću ga napisati ovdje samo kako bi to je jasno na fotoaparatu.
Ali, ako sam uzeti u pregledniku sa kolona 80, koji određuje ići na
Wikipedia.org na port 80.
Dakle, to je kao kako Sjedinjene Države imaju više luka poput gdje možete brod
Stvari koje vrste.
Dakle, to je kao da ide na ovaj mjesto na ovom poslužitelju.
OK.
>> Zato sam samo izabrao 1337.
Postoji čitav niz brojeva koje možete pokupiti.
To nije bio potpuno posebna.
>> No, ono što ću učiniti sada se da ću pokrenuti čvor.
Dopustite mi zapravo ušli u to par linije prema dolje, tako da ga mogu vidjeti.
Ja ću učiniti čvor, a ja sam će pokrenuti simpler.js.
A mi ćemo govoriti o tome kako dobiti Čvora postavili u malo.
No, sada je to samo trčanje poslužitelj.
>> Dakle, jedna stvar mi možete pokušati koje nije dopušteno biti uzbudljive je možemo zapravo
pokušati pristupiti u Curl.
Dakle, ja mogu učiniti Curl, a moj Stroj je lokalni domaćin.
Također ćete vidjeti ovo napisano kao što je to ponekad.
Lokalni domaćin i 127.0.0.1 su ljubazni poput kućnom računalu.
Dakle, to je kao da u razgovoru s svoje računalo.
OK.
>> I onda ja mogu reći 1337.
Dakle, ako sam pokrenuti ovu liniju koda, piše hello world.
A ako sam želio vidjeti te stvari koje je vrsta sadržaja teksta običan ili
god, mogao sam čak stavio ovo ovdje.
I primjetite da se to ne kažu OK.
I ja imam tekst ravnicu.
A tu je i vrsta sve ovo drugo stvari koje će čvor dodati u
tu za mene.
To nije super važno.
>> Mislim, postoje neki tehnički aspekti U to su neka vrsta
cool pričati o tome, ali samo pokazati ti, ja također imaju moć
promijenili okolo.
Dakle, ja mogu samo dodati hrpa o takvim stvarima.
I onda sad, ako pogledam u mom izlaz, to će biti tako.
Dakle, ove zaglavlja znači određene stvari na preglednicima i takvim stvarima.
>> I zaglavlja može osnovi ispričati preglednik kako reagirati na nešto.
Ako ste ikada čuli za kolačiće i prije, ili ako ste ikada bili annoyed
od strane web stranice se kolačiće, ili uključen cookie blok ili
nešto slično.
Vi zapravo možete postaviti kolačiće u tim zaglavlja.
Tako kažu preglednik kako bi ponašanje u nekim slučajevima.
OK.
>> Tako da je simpler.js.
Da li itko ima bilo kakvih pitanja Na taj izvorni kod datoteke?
OK.
Cool.
>> Tako ćemo ukloniti r iz toga i pogledati simple.js.
Dakle, ovo je prilično mnogo isti program.
Upravo sam to napisao malo drugačije jer sam htjela sortirati označavanja
neke značajke JavaScript.
>> Dakle, primijetite da je zahtjev rukovatelj Funkcija je potpuno nestao.
Oh yep, jeste li pitanje?
>> Publika: Da, argumenti koji se prenose na koje
funkcija, što su oni?
>> KEVIN SCHMID: Pa oni su JavaScript objekti.
U Node.js dokumentaciji, osnovi kaže ono što su metode
dostupni na njih.
Upravo smo se dogoditi da imaju pristup ova metoda zove pisati glavu i kraj
i takve stvari.
No, tu je cijela hrpa više metoda.
>> I na primjer, kao što je jedan od njih posebice na rec, to možete učiniti
nešto kao rec.method koji će vam reći da li je HTTP dobiti ili
HTTP POST zahtjeva i takve stvari.
Dakle, tu je sve moguće svojstva, ali su obojica
JavaScript objekti, a oni samo imaju funkcija povezanih s njima da vam
može pisati stvari.
OK?
>> Dakle, primijetite da je zahtjev rukovatelj je potpuno nestala.
Ali kod koji sam imao na zahtjev rukovatelj je još uvijek tamo.
Još uvijek imam taj res.writeHead i još uvijek imam tu res.end.
A što je to primjer u JavaScript je to ideja
anonimna funkcija.
i anonimno je poput dolikuje imenu za to, jer je to doslovno ne
imati ime.
Nema zahtjeva funkcija rukovatelj tamo.
>> Nema ime, ali to još uvijek je vodeći argument.
Dakle, ja još uvijek dobio rec i res.
A ja još uvijek imam kod.
To je savršeno u redu JavaScript kod.
Dakle, ja mogu proglasiti funkciju bez izričito mu daje ime.
To je malo zbunjujuće na prvi.
Postoje neke poput korisnih stvari koje možete učiniti s
ove anonimne funkcije.
Da li itko ima bilo kakvih pitanja o tome, ili je to u redu samo da, za sada,
vrsta samo prihvatiti da je će učiniti istu stvar?
Yep?
>> PUBLIKA: Jeste funkcije prvog klasa u JavaScriptu?
>> KEVIN SCHMID: Oni su prvi klase u JavaScript.
I samo znam da su ti pojmovi prolazi u anonimnom funkcije poput
to odnosi na JavaScript da može napisati u svoj konačni projekt za
web preglednik previše.
Tako na primjer, u JavaScriptu u Vaš preglednik, to je također nešto događanje
prešao u smislu da ono što ćete ima je kada korisnik klikne to
gumb, želim vam da pokrenete ovaj kod.
>> Dakle, to je ista vrsta idejama strani klijenta kada klik miša ili ih
miša iznad neke slike na vašem web stranica, pokrenuti ovaj kod.
To se može primijeniti na poslužiteljima.
Dakle, to je vrsta kao što je uzbudljivo Razlog zašto je JavaScript je stvarno
pogodni ili neki ljudi misle da je pogodan jezik za ovu vrstu
Vozač poslužitelj događaja, jer imate ove anonimne funkcije.
Imate cijelu ideju to asinkroni kod.
OK.
Ima li tko kakvih pitanja?
>> OK.
Tako da je simple.js.
Pa pogledajmo još jednom ili par više.
Dakle, ovo je sleep.js.
Tako je bilo tko upoznat s C Funkcija spavanja?
Od možda jednom od ranijih predavanja ili nešto slično?
>> Tako je u osnovi možete proći u mislim broj sekundi ili ako koristite ü
spavati broj milisekundi ili nanosekundi.
A u osnovi program će jednostavno prestati trčanje za taj iznos od vrijeme.
Zar ne?
I onda će se probuditi i na kraju onda ću samo nastaviti prikazivati
Program.
>> Dakle, ovaj server vrsta daje Dojam spavanje.
Dakle, primijetite da imamo isti res.writeHead 200 s zaglavlje
prije, ali onda smo se zove to funkcija zove set timeout.
Postavite timeout je također dostupan u Vaš web preglednik Google Chrome
ili Safari ili bilo što drugo.
A u osnovi ono što se radi ovdje je da je uzimanje u funkciji.
Obavijest, opet, to je anonimna funkcija.
Dakle, to je vrsta cool jer smo pomoću anonimni funkciju unutar
anonimna funkcija koje može biti malo čudno.
>> No, to je uzimanje tu funkciju, što je osnovi govoreći - način na koji se
Radovi se u 5000 milisekundi, želim izvršavanje tu funkciju koja
Upravo završava odgovor i piše hej.
Dakle, to ostavlja dojam kao da spavanje, ali način na koji je to zapravo
radi je da ćemo pokrenuti kroz ova linija vrlo brzo.
Mi samo pisanje nešto.
A onda ćemo također prolaze kroz ova linija vrlo brzo.
Dakle, nismo zapravo ide čekati pet sekundi.
Samo ćemo pokrenuti ovaj broj odmah.
>> A tu je, opet, ovaj mali Događaj petlja koja sada ima ovu stvar
registri koji u osnovi je samo stalno vrtimo u krug
i gleda na sat u jednom Niti i rekao, ima pet sekundi
prošao još?
I onda kad se vidi da je druga Ruka je preselio kao pet sekundi ili
god, onda se probudi i kaže: oh, što moram učiniti?
Ma moram pokrenuti ovaj kod.
I onda se događa da pokrenuti res.end hej.
>> Pa opet, mi nikada ne čekamo ovdje.
Dakle, nije da se to kod unutar ova funkcija će potrajati pet
sekunde za pokretanje.
Ovaj broj će se izvoditi prilično istovremeno, barem u odnosu na
pet sekundi da smo razgovarali o tome prije nego što ranije.
>> Dakle, samo da se to pokazati u akciji, Ja mogu učiniti Node.sleep.js.
I učinio zabrljam nešto?
Moguće je.
Oprostite.
Da vidimo što možemo učiniti kako bi riješili ovaj.
OK.
Dakle, svakako koristite Node.js.
Samo se šalim.
OK.
Samo jedan sek.
OK.
Ja znam što je to.
>> Dakle, problem je u tome što je u mojoj drugoj kartici ovdje, bio sam trčanje čvor već na
da je ista adresa, 1337.
Dakle pogreška da se to bacio, ako ćemo gledati na to stvarna blisko, je adresa u
koristiti, EADDRINUSE.
Tako sam već koristio 1337 ovdje.
Dakle, ako sam zatvorio to off, a onda sam se sada pokušati pokrenuti to, nadamo se, sve
će biti u redu.
OK.
Dakle, možete samo imati jednu stvar kakav slušanja na portu odjednom.
Drugo rješenje bi bilo za mene samo urediti taj program i napraviti
to bilo kao 1338 ili tako nešto kao što je to.
>> Ali sada spavati radi.
Tako ćemo zapravo ga isprobati u Preglednik ovaj put, jer je to
Malo nezabavan vidjeti je u terminalu.
Tako ću i ići na to 127 adresa opet na 1337.
A ako se to vidjeti -
Ne znam, ako je moguće - ali moj browser je uzimanje jako, jako dugo
Vrijeme za učitavanje ili poput pet sekundi.
>> A nakon toga, konačno završio odgovor.
A ne možete ga vidjeti, jer je stvar se preselio na malo, ali ako sam napraviti
ovo malo manji, što Možete vidjeti što kaže hej.
Tako sam dobio hej, ali nakon pet sekundi.
A to bi moglo biti malo čišći vidjeti to ovdje na terminalu, pa sam
će učiniti -
neka je to ovdje -
Učinimo Curl toj adresi opet s 1337.
A ja nekako morati sjesti Ovdje za pet sekundi.
Ali primijetite da server može prihvatiti nove odgovore.
Tako da ispisuje hej.
>> I na demo to, u osnovi ono što Ja mogu učiniti u ovoj drugoj kartici -
pa recimo da sam to učiniti na drugu karticu, Ja ću učiniti Curl i ista
stvar opet.
A ja ću pokušati udariti njih Dečki off u isto vrijeme.
Dakle, ja ću to učiniti, a ja sam ide u utrku ovamo i ja sam
će to učiniti opet.
>> I neka je to učiniti tako da možete vidjeti oboje.
To je jedan tiskani hej i da je jedan tiskana hej sve na -
Učinimo to eksperiment opet.
Zapravo, neka je koristiti to trik, ako je to u redu.
>> Tako da ću koristiti shell stvar koja mi omogućuje osnovi pokrenuti dva primjerka
ovog programa paralelno.
Dakle, to će pokrenuti prvi program i Drugi program paralelno.
Pa sad, ako sam na tipkovnici, to se događa da bi takav zahtjev prilično mnogo
trenutačno u isto vrijeme.
Dakle, dajmo ovo metak.
>> Tako sada primijetiti piše dva procesa.
A ako vas zanima, da je 27.000 broj je u osnovi proces ID.
A onda primjetiti, oni tiskaju Hey istovremeno.
Nije bilo kao da smo morali čekati pet sekundi za jedan i onda nakon toga,
Pet sekundi kasnije dobiti drugi.
Dakle, to je vrsta, na neki način, to je zapravo i nije dokaz, ali je
intuitivno dokaz da to nije samo kao što je čekao pet sekundi i blokira
Cijeli thread.
OK super.
>> Dakle Aaron postavio pitanje ranije da bio, i što ako se ne učini nešto -
Yep?
>> PUBLIKA: Čekajte.
Kako je to drugačije od printf tampon, iako?
Ne to automatski napraviti to?
Zašto moramo brinuti o tome?
>> KEVIN SCHMID: Oh, zar ne kažu da još jednom?
>> Ivanković: Ne bih printf tampon učiniti točno istu stvar?
>> KEVIN SCHMID: printf tampon?
>> Publika: Da.
OK.
Nije bio u jednom od kvizova su bili govori o tome kako, ako ste u pravu printf
nešto, a onda su ga pauzirati jednu Drugi, a zatim ga imate petlju deset
puta, to će pričekati deset sekundi i onda printf sve zajedno?
>> KEVIN SCHMID: Oh, u redu.
>> PUBLIKA: Je li to isto , onda je u ovom slučaju?
>> KEVIN SCHMID: Dakle, pitanje je bilo osnovi u jednom od bivših kvizova
ili tako nešto, bilo je pitanje koje Uglavnom, ako ti kažeš ispisati F 10
stvari u isto vrijeme i onda spavao kao u Proces ispisa one out,
Na kraju, iz nekih razloga, to bi samo izvatkom one sve na zaslonu.
Dakle, tu je vrsta dvaju različitih pojmovi ovdje.
>> Pa mislim da je jedna stvar je da se, u ovo slučaju, imamo posla s dva različita
vrsta ljudi tražeći poslužitelj stvari u isto vrijeme.
A razlog da printf vrsta čeka kao da i potištenost sve van
odjednom se više odnosi na Kako printf vrsta -
pa kako printf je zapravo proveden je to u osnovi mora
razgovarati s operativnim sustavom pisati te stvari na konzoli.
Dakle, to ne želi učiniti sve da se stvari odmah kada kažeš printf
neki string, jer da bi dobiti skupo, ako to mora
to svaki put.
>> Dakle, ako vam je činiti printf hej, svoj program Ne zapravo mogli ispisati da
odmah na konzoli.
To bi se moglo reći, OK, to sam napisao.
I onda vrsta čekati da daju je malo više prije nego što zapravo
to pisanje na konzolu.
>> Dakle, razlog zbog kojeg je to bio slučaj -
i to je neka vrsta nevezano na spavanje -
je da je spavanje vrsta samo ubrizgava u tu pokazati
činjenica da se ne piše je sinkronizirano.
No, razlog za to je upravo performanse, tako da ne morate
bi se to mnogo kontakata u operativni sustav.
>> Ali ovdje, ono što smo zapravo pokušava učiniti s ovim spavanja stvar je samo predstava
da kad imamo dvije osobe koje posjećuju Ova web stranica, to neće staviti
ih u liniji gdje će reći Moram ti pomoći, a onda kada sam
potpuno završili pomažući vam nakon njih pet sekundi, a zatim ću
premjestiti na sljedeću osobu.
Dakle, zahtjev je prva osoba a ne vezati taj događaj petlju
ako to ima smisla.
>> Ali ovdje je zapravo primjer nečega što će se vezati
do događaja petlje.
Dakle, ovdje je strašno funkcijom izračunati n-tu Fibonacci.
To je doslovno gori način možete izračunati n-ti Fibonaccijev broj.
A to je zapravo samo priznati gdje je ovaj došao,
tu je zapravo -
Mislim, možete pokušati ići ga naći - ali Tu je kao vrlo dugotrajan blogu
objaviti da je netko pisao.
To je kao jedan od onih Reddit stvari.
No, netko je kritizirao Node.js, a se koristi kao ovaj primjer.
Tako nekako sam htjela da vam pokazati dva različite perspektive samo da bi dobili
opće razumijevanje pojmova iza ove dvije stvari.
>> No, to je izabran kao samo strašno, užasno neučinkovita računski
intenzivna način izračunati n-ti broj Fibonacci.
Dakle, baš kao strani bilješku, zašto je to strašno kao u jednom smjeru?
Yep?
>> PUBLIKA: Recite što počnete s 1000.
1.000 dijeli na 999 i 998.
Svaki od ova dijeli u dvije stvari.
>> KEVIN SCHMID: Točno.
>> Ivanković: Sve putu prema dolje.
>> KEVIN SCHMID: Točno.
Dakle, samo ponoviti za kameru, ako sam nazvati lagali na poput 1000 ili tako nešto
kao što je to, to je očito ne manje od ili jednaka jedan, tako da ću
ići na ovom drugom slučaju, a onda idem nazvati lagali 999 plus 998 lagali.
A onda je prilično puno sve to Djelo koje mi lagali 999 se je
vrsta na ovoj razini.
Ako ide dolje, to je čak i više suvišne od toga, ali ako samo
mislim računanje FIB 998 dobiva us prilično blizu lagali 999.
Dakle, mi stvarno treba biti malo više pametan o tome kako smo vrsta ponovno
to, ali nismo ponovnog te stvari uopće.
Tako da možete zamisliti ovaj gigantski, Gigantski stablo koje je jednostavno strašno.
>> No, u svakom slučaju, u redu.
Tako da je lagati.
To traje neko vrijeme za pokretanje.
Yep?
>> PUBLIKA: [nečujan].
>> KEVIN SCHMID: Oh, zar ne ponoviti pitanje?
>> PUBLIKA: [nečujan].
>> KEVIN SCHMID: Oh pa to je samo broj da će biti neka vrsta na
strani poslužitelja.
Dakle, ovo se ne događa da se naći u pregledniku ili ništa.
To je zapravo ono što mi imamo je da kada Po prvi put ovdje prilično velik dio čini
njihov zahtjev opet, kad smo vrsta uputiti zahtjev, mi ćemo nazvati
ova funkcija na strani poslužitelja.
I onda ćemo dobiti rezultat natrag nazivati ​​tu funkciju.
I onda ćemo samo ispisati je korisniku.
Tako korisnik zapravo ne bave s tom funkcijom previše.
>> Je li to bilo pitanje?
Ima li to smisla?
OK.
Cool.
>> Pa opet, mi radimo cijelu ovu res.writeHead stvar gdje smo ispisali
header.
A onda sam na kraju odgovor na taj magični broj je lagati 45.
Pa neka je samo pokrenuti ovaj poslužitelj.
Pa ja ću učiniti čvor fib.js.
Dakle, sada je moja izmišljotina poslužitelj je trčanje.
>> I onda ovdje, ja ću napraviti jedan od tih.
OK?
Dakle, ja sam samo htio reći, Curl.
Dakle, to će potrajati neko vrijeme, ali nadam se uskoro će završiti i
to će ispisati da je 45. Fibonaccijev niz.
>> PUBLIKA: [nečujan].
>> KEVIN SCHMID: To bi trebalo obaviti uskoro.
Dakle, to bi trebalo trajati pet do šest sekundi.
Ne znam da je samo V8 je super brz, ali u svakom slučaju, ovo je
Vrlo kratko je primjer i namjerno inelegant od ne-beznačajan
računanja.
Dakle, nakon nekog vremena, to ne shvaćam.
>> Ali sada, što ako ja to ista vrsta Eksperiment kao i prije, gdje sam napraviti
dva zahtjeva u isto vrijeme?
Dakle, ovdje ću rotor na da je adresa, a ja ću
učiniti još Curl.
I zapamtite, kad smo to učinili za spavati poslužitelj, kada smo u osnovi ga imali
nakon pet sekundi, što prilično koliko i vratio u pravu
otprilike u isto vrijeme.
Dakle, to nije bio posebno vezan.
>> No, pokušajmo sada.
U redu, tako da smo dobili naše dvije procese.
Zapamtite to su proces iskaznice.
To će biti malo nespretan dok odugovlačiti.
Tako ćemo ostati ovdje i čekati.
>> Tako je jedan od njih trebao doći natrag nakon što se kao -
U redu, tako da se vratio.
Ali zašto onda nije drugi jedan se vratiti samo još?
Yep?
>> PUBLIKA: poslužitelj ne može učiniti ništa dok je računalstvo taj veliki broj.
>> KEVIN SCHMID: Točno.
Dakle, odgovor je bio upravo to server stvarno ne mogu učiniti ništa dok se
to je računanje taj Fibonacci broj.
Pa sad sam upravo dobio moje dvije stvari natrag.
Ali valjda samo razmišljati o kodu malo više, kako se to radi
i sve.
>> Dakle, ova funkcija je ovdje kod koji Ja sam rekao ovo poslužitelja za rad kada je
dobiva novi dolazni zahtjev.
Dakle, to je samo idući u trčanje kroz ovaj cijeli broj, a onda će otići
Natrag na događaj petlje, a zatim nastaviti provjere za nove događaje.
Tako je u osnovi ono što smo se događa je poslužitelj
sluša za nove stvari.
Prva osoba pita za ono 45 je.
Mi smo pokrenuti ovaj kod kako bi ga izračunati.
Ovaj kod traje otprilike pet na šest sekundi za pokretanje.
Onda ćemo se vratiti na događaj petlje i provjerite za nove zahtjeve.
>> Dakle, ovo je primjer kako se, ako ima stvari koje su tzv izračunali
dužni, ili koristite mnogo računske, Ne snaga, ali kao su
računski intenzivna -
Mislim da jedna stvar za reći o tome je da je ova funkcija radi potpuno,
za najveći dio, prilično koristan rad u pravu.
Cijeli put da se u povratnom Funkcija je trčanje, to je bio prilično
koliko je proveo većinu svog vremena samo computing broj koji po tko zna koji Fibonacci.
>> No, imali smo samo jednu nit da se bave.
U Apache modelu, kada se dvije osobe podnijela zahtjev da se mi lagali 45, mi
ne bi imali dvije različite teme.
I onda je posao operativnog sustava bi bio, ili na razini korisnika
kod koji upravlja teme, nebi bila kriška da se na
CPU, ili čak i ako ste imali više procesora, distribuirati ih ravnomjerno CPU
tako da su oboje završiti otprilike u isto vrijeme.
>> Dakle, samo da vam pokazati kako možemo izdvojiti od - a to ne znači savršena
rješenje, ali nekako kako možemo bi se vratiti ovdje i napraviti
malo bolje.
Dakle, ono što imam ovdje je program pod nazivom FIB C. I to u osnovi koristi
još jedna od čvora modula zove Dijete Proces modul.
Dakle, ja sam uključen da na gornjem vrste poput bih napraviti funta uključuju
Dijete proces.h ili nešto.
Sada imam pristup tom varijablom CP koji ima sve moje funkcionalnost.
>> I što sad da radim u ovom odgovoru rukovatelj bježim ovaj program
dot slash FIB 45.
Dakle, ono što sam učinio - a ja sam samo ide izaći iz ovog programa za
malo -
je napisao sam C program koji osnovi računa
n-ti broj Fibonacci.
Dakle, ovdje je samo program sam napisao u C koji izračunava ovaj.
Mogu ga sastaviti, a ja mogu pokrenuti je na zapovjednoj liniji.
I to će se izračunati 45. Fibonacci broj.
>> Dakle primijetiti samo je potrebno prilično dugo.
I vjerojatno bi mogao imati koristi crticu 03 do optimizirati ga ili nešto slično,
, ali upravo sam se kao redoviti Postavke prevodilac.
I to ga ispisuje.
>> Ali sada, ono što sam ja vrsta radiš?
Oh ispričavam se, krivo datoteka.
Tako radim iste stvari s header kao i prije.
Onda sam napraviti ovaj cp.exec.
Dakle, što to će učiniti je to će pokrenuti ovaj program.
No, način na koji to radi je da to se neće čekati
taj program do kraja.
To samo u osnovi govori izvršiti ovaj program.
Tako je u osnovi ovaj tip u naredba brz vrste.
>> A onda, kada završite s to, pokrenuti ovu funkciju.
Dakle, sada smo nekako dobiti ovo Cijela obnovljena stvar
kao što nismo čekali.
Znači li to da vrsta ima smisla?
Yep?
>> PUBLIKA: [nečujan]?
>> KEVIN SCHMID: Dakle, ovo će zapravo otvoriti novi postupak za to.
Dakle, ovo je zapravo, na neki način, zlo, ne super zla, ali je
važno je reći da je ova vrsta vraćajući se, s jedne strane, Apache
Model u kojem radimo teme i procese za svaki zahtjev ili
procesi za svaki zahtjev.
Dakle, ovo je neka vrsta analogna da ono Apache radi.
U nekim slučajevima, to će samo koristiti novi nit, što je malo više svjetla
Težina od procesa, ali Apache mogli završiti vilica novi proces
koja je vrsta ono što mi radimo ovdje implicitno obavljajući dot kose crte FIB 45.
>> A onda je u tom slučaju, mi vrsta nastati isti troškovi procesa.
Dakle, to je samo jedna stvar koju možete učiniti.
Ali samo pokazati ovu vrstu trčanja.
I ovaj razgovor samo je jako usmjeren na predstavljanja ove vrste programa, kao
način da pokazuju različite poglede na kako dizajnirati servera kao što je to.
Dakle, to je trčanje, a onda ako sada radim to opet, dobio sam dva procesa iskaznice.
>> Ajmo govoriti o stvari koje treba istaknuti.
Dakle primijetiti da su oni postupno.
To je super.
Budući da je prije 27.122.
No, obavijest sada su se vratili u otprilike isto vrijeme.
>> I sad, dobro pitanje to pitati o zašto je to slučaj, čiji je posao
Bio je to sada na neki način bi ove stvari vrsta igrati pošteno jedni
drugi, ove dvije instance dot slash lagati 45 koje sam vodio
ili da Node ran?
Tko vrsta čini fer da su obojica dobiti vrsta uravnotežena vrijeme rada?
>> PUBLIKA: [nečujan].
>> KEVIN SCHMID: Da.
Tako je u osnovi, kada radim dot kose crte FIB 45 ili nešto slično, sad je
vrsta do operativnog sustava za nositi izvođenja tih programa.
I sada to može ih raspored na različitim CPU ili njega
Možete ih raspored.
To može narezati na vrijeme da je jedan CPU dobiva ili da su dobili
za rad na jednom CPU.
Dakle, to je ideja iza toga.
Da li to smisla svima?
Tako sada Node nije stvarno svira dio u podjelu tih zadataka.
OK.
>> Dakle, to je gotovo to za primjere.
Samo sam htjela pokazati još jednu stvar jer je puno toga do sada nije bilo
Nije potpuno super praktično u nekim slučajevima.
Mogu zamisliti dolazak kući nakon ovoga razgovarati i nešto i govori kao,
i nekako sam dobio iz tog razgovora koji Mogu napraviti Fibonacci poslužitelj za
moj konačni projekt.
Dakle, ovdje je samo kakve još jedan primjer nadamo se da će biti -
možda i ne, ali možda - nešto više kakve relevantne za konačnih projekata i
razmišljam unaprijed za takve stvari.
>> Dakle, ovo je chat.js.
Dakle, to je vrsta kao neki uzorak poslužitelj strana kod koji možete koristiti za
postaviti mali chat poslužitelj poput možda ste vidjeli na
Facebook Chat ili bilo što drugo.
Dakle, ne govorim da je to kao što su Facebook Chat, ali to je neka vrsta
kao što je dobro - možda nije dobro, ali možda Dobar - polazna točka za razgovor
poslužitelj za vaše web stranice za konačni projekt.
Pa pogledajmo što to radi.
>> Dakle, mi smo sve to posebnu stvar na vrhu, ovaj var Državni inspektorat
jednako zahtijevaju Socket.IO.
Dakle, ovo je još jedna stvar koja se ne zapravo dolaze u paketu s
Čvora, ali možete ga instalirati.
To je čvor modul.
Pa to je baš kao i neki proširenje na čvoru.
>> SocketIO je zapravo jako vrsta cool.
To je apstrakcija koja u osnovi ono što To je to je li vam omogućuje da
imati taj tok komunikacije između webu
preglednik i web server.
Dakle, za najveći dio, tako daleko, da smo imali te vrlo brzo jednu sekundu ili dvije
Drugi komunikacija između web preglednik i web server.
Tako je to u osnovi je ići na google.com, get stvari, poslati natrag, a zatim
smo gotovi.
Nikad nećemo opet govori sve korisnik upiše u nešto drugo.
>> No, ono što Socket.IO i slična vrsta stvari - i SocketIO je zapravo jedan
od stvari koja je izgrađena na što WebSocket koja je vrsta dostupan
kao dio HTML5 -
koji vam omogućuje da imaju ovo nastavka dijaloga.
A to je vrlo korisno u chat poslužitelju Takve stvari, jer je
vrsta kao što su nastavak dijaloga u neki način, jer ako razgovarate
s nekim, sada možete jednostavno poslati Poruka niz cijevi, a zatim
poslužitelj može poslati poruku prema dolje cijevi na drugu osobu s kojom
razgovor sa.
A onda možete imati ovo razmjenjivati ​​tako.
>> Dakle, to je vrsta ono što SocketIO je dobro za.
Razlog da SocketIO koristi WebSockets kao jedna stvar je da se u
dodatak samo običan stari WebSockets, Također ne neke trikove na osnovi
bi ga preglednik kompatibilan.
Dakle preglednike poput Internet Explorera nažalost ne podržavaju WebSockets
Pravo iz kutije.
Tako da koristi neku drugu vrstu super uredan stvari s Adobe Flash kako bi se omogućilo
li imati križ preglednik podrška.
Dakle, to je stvarno koristan.
>> I zapravo, znam da sam vrsta pokrenut na vrijeme ovdje, ali CS50
Raspravljati, jeste li ikada vidjeli nešto kao, ne znam, prazno, tako i tako je
odgovarate na ovaj post ili nešto kao što je to, taj lik?
To je SocketIO.
Dakle, kada netko počne upisivati ​​u raspravljati okvir da bi odgovor ili
nešto, vaš preglednik ne ono što je pozvao u SocketIO emitira neku vrstu
događaj koji kaže da je netko odgovaranje na ovom postu.
>> Zatim poslužitelja, kaže, u redu, što moram učiniti?
Pa sad moram reći tim drugim dečkima koji su na CS50 Razgovarajte potrazi
na ovom postu da netko odgovarate.
Dakle, to je vrsta ono što je SocketIO dobro, ovaj nastavak vrste
tok dijaloga.
OK.
>> Pa što ja imam ovdje - i mi smo samo će ignorirati veze niz
za malo -
ono što radim ja to još jedna slušaju.
Dakle, to je samo način na Socket.IO se rekavši Poslušajmo ovu luku.
I onda sam to učiniti na vezi.
Dakle, to je u biti samo Socket IO-a način da se kaže, kad primimo
veze, ja vam želim pokrenuti taj kod.
>> I primjetite da se, umjesto da REC i res prošli tamo imam utičnicu.
A to Socket Ideja je u osnovi to stvar koju možete pisati i čitati
iz koje je korisnik ' Poruke Moguće.
I poruke koje će poslati može proći kroz taj socket.
Ima li to smisla?
Tako da je ovo nastavak stvar.
>> Dakle, ono što radim ja zovem Socket.emit.
I čuje se prilično mnogo dva argumenta.
Prvi argument je string samo predstavlja tip
stvar koju emitiraju.
Dakle, u ovom slučaju, ja sam iskoristiti ovaj niz nova poruka.
A to je samo u osnovi kaže da Vrsta ovu stvar, ono što sam
slanja, je nova poruka.
Tako možete slušati za određene vrste kao nova poruka ili što god
pomoću točku na.
>> Dakle, veza i korisnik poslao tamo, ako je pogledate gdje mi zovemo točka na,
one su ostale žice koje predstavljaju vrste korisničkih poruka.
Dakle, to je u osnovi možete imati ovaj emitiraju jedan od tih vrsta poruka, te
zatim učinite nešto u odgovoru na jedan od tih tipova poruka
>> Tako sam emitira ovu novu poruku.
Idemo ignorirati connections.push na sekundu.
No, tada sam rekao, poslao Socket.on korisnika.
Dakle, sada je nešto kao kad Korisnik šalje mi poruku, ja želim
da pokrenete ovaj kod.
I primijetiti da je ta anonimna funkcija poduzima u tom varijablom
zove podaci koji u osnovi se događa imati korisnikovu poruku.
>> Pa sada neka vrsta govoriti o priključci polje.
Dakle, to je dizajniran za chat klijenta gdje su u osnovi svi su nekako u
Isto chat room.
Tako je u osnovi, ono što nam je potrebno da bi okolo je neki niz koji u osnovi
predstavlja sve ljude razgovor u neki način, ako to ima smisla.
Zar ne?
Zato moramo znati tko su ti momci tako možemo im poslati poruke
da drugi ljudi poslati na nas.
>> Pa što se to kod radi je kada korisnik šalje poruku - da je vrsta
događaj -
ćemo pokrenuti taj kod.
A što mi radimo je da prolaze kroz to niz koji smo nazvali veze.
I prilično mnogo za svaku vezu osim onoga koji je naš, to je
što se to kod kaže, šaljemo novi Poruka s tom prilogu poruke
informacije.
>> Dakle, ako primijetite ovdje, ono što sam učinio kad korisnik zapravo čini novi
veza je sam dodao sa JavaScript.push način, to
zapravo samo govori kao dodajte da Socket kao vrijednost u
naša veza polje.
Dakle, sada kada je ovaj kod radi, to će slanje stvari za one posebno
priključci.
Dakle, to može biti dobra polazna točka za izradu chat poslužitelj
ili nešto slično.
>> A vrsta cool stvar je da kod koji vidite ovdje kao i na i
emitiraju i stvari kao što je ista vrsta JavaScript kôd koji bi
pisati u pregledniku za interakciju s poslužitelja.
Zato SocketIO je vrsta uredno i korisno na taj način.
>> Oh i samo još jedna stvar jako brzo.
Bilo je CS50 konačni projekt prošle godine da je u osnovi provodi chat
poslužitelj u Node.js.
Mislim da je to Harvardchats.org ali ja nisam -
OK.
Nisam siguran što je URL, ali Ja mogu poslati da se nakon toga.
No, to je vrsta cool što možete učiniti s Node.js.
>> Dakle, nadam se, u cjelini, vi imate Dobar osjećaj za ono što je korisno Node.js
i kako ste možda mogli primijeniti do konačnog projekta.
Ja ću biti poslane iz neke više resursi uz ovaj.
I hvala vam što ste došli.
Hvala Vam.
>> [PLJESAK]