Кевин Шмид: Здраво на сите. Добредојдовте на CS50 семинар на Node.js. Моето име е Кевин. Јас сум CS50 ТФ. И јас сум вид на како навистина возбуден за овој семинар. Мислам Node.js е многу кул. Се надевам дека овој семинар можат да се користат како добар, претпоставувам, отскочна штица за некои од вашите конечниот проекти, доколку сте заинтересирани за користење нешто како Node.js. Ние вид на ќе започне на семинарот надвор од само зборуваме за малку на вид на позадина приспособливост перспективи на Node.js, а потоа ние ќе се преселат во некои кодот примери. И јас ќе имаат кодот на веб-сајт, и може да се погледне во кодот. И по завршувањето на семинарот, јас ќе вид на разговор за тоа како можете да го поставите Node.js на вашиот компјутер. OK. Па ајде да започнете. Па претпоставувам дека само сакаат да зборуваат за веб сервери, навистина, во прв план. И да се започне оваа дискусија, јас во основа имаат дијаграм кој е од кој учебник се користи за CS61, која во основа покажува интеракција помеѓу клиентот процес, како вашиот веб- прелистувач или како вашата цел клиентот или нешто слично, и на веб серверот. Така овој вид на изгледа слично на слика што го виде во предавање на Среда, каде што во основа имаме некои клиент процес како Google Chrome. А потоа еден чекор е клиентот испраќа барање. Така што може да биде нешто како добро, ајде да посетите, не знам, CS50.net. Па ние издаде тоа барање. И не секој сеќавам на името на протокол кој се одредува како што Барањето треба да биде структуирана? Да. ПУБЛИКАТА: [нечујни]. Кевин Шмид: Токму така. Па тоа е како HTTP, нели? Значи, во основа на спецификација за тоа како тоа барање, всушност, треба да се утврдат надвор, бидејќи на крајот на денот, дека барањето е навистина само се допаѓа стринг кој во основа вели сакам ова. И спецификација за тоа е HTTP. Па тоа е како протокол. Па тогаш серверот добива тоа барање. Па вие момци имате веб сервер инсталиран во CS50 апаратот. Тоа е Апачи. И оваа недела, кога ќе работат на проблемот постави седум, вие всушност ќе се работат со тоа веб серверот. Па на серверот добива тоа барање, и тогаш има да се вид на нула својата глава и да каже како и она што да правам со ова? Па врз основа на она што ќе одлучи да се направи, тогаш тоа може да има да се поврзеш со некој вид на ресурс. И тој ресурс може да биде многу различни нешта. За едно, тоа може да биде само како статички HTML датотека. Па тоа само може да биде како некои HTML дека е како за вашиот личен веб-сајт. Тоа може да биде статички датотеки како слика или како филм што го имате. Тоа дури може да се зборува до некој вид на база на податоци како MySQL база на податоци. Па тоа не мора секогаш да комуницираат со ресурси, но во некои случаи, тоа е можно. Па тогаш што се случува да се направи после тоа е тоа се случува да испрати назад одговор. И одговорот за тоа е исто така е наведено од страна на HTTP. Па потоа на клиентот може да ја прими. Тоа може да биде растргната и процесот. И тогаш ќе го добиете на веб-страница како Google или CS50.net или што и да отиде. Во ред? Значи ова е основната интеракција која ние ќе треба да се занимаваат со. И ние сме доста ќе биде се фокусира на овој дел од интеракција, на серверот. OK. Кул. Секој имате било какви прашања досега? OK. Така како што рековме, веб сервер добива овој HTTP барање и потоа издава овој HTTP одговор. И како ние разговаравме за пред тоа, CS50 апаратот веб серверот е Апачи. Па кога ќе момци работат на P постави седум, ви се случува да се работи со Apache веб сервер. Никогаш нема да треба навистина да се работи со Apache директно премногу. Може да се вид конфигурирате Apache малку кога ќе се определи на виртуелни хостови или на V домаќини, а ние ќе се до дека во една малку. Но во основа, Apache веб серверот постави да работат со PHP вид на надвор од кутијата. Значи она што навистина се случува е кога одите на една од вашите веб-сајтови како, да речеме, локалниот компјутер коса црта index.php или нешто, е вашиот прелистувач праќа таа барање, а потоа Апачи седи има и бројки надвор да се направи со неа. И акцијата е да се изврши тој код во index.php и потоа го испрати надвор назад. Па таму е тоа. Па ние вид на зборуваше за тоа. Така што само може да послужи статички датотека или се кандидира на некои PHP код и потоа прашање одговорот. Па тогаш често прашање што може да дојде up е добро, како ние да навистина се справи со кои имаат повеќе корисници во исто време? Значи замислете ако сте биле пишување на веб сервер, ако сте имале веб сервер кој ќе се обидуваат да се напише во нешто како C или нешто слично, во основа може да се мисли за тоа како таму би можело да биде некој вид на код кој ќе добие барање, но потоа таа мора да го направите сето ова работа на неа. Тоа може да има, на пример, јавете се на база на податоци или нешто слично. Нели? А потоа тоа ќе го направите тоа вид на обработка, а потоа испрати назад одговор. Па тоа е како на високо ниво преглед. Но тоа не е веднаш очигледно како можете да го направите тоа, така што две лица или дури 1000 луѓе би можеле да работат со вашиот веб серверот во исто време. Значи решение дека Apache користи се нарекува теми или процеси. Па може да се чуе на овие услови пред да. Тоа е во ред, ако не има, но само мислам за теми или процеси како начини за оперативен систем или корисникот на програмата или нешто слично или веб сервер да вид на извршување повеќе работи одеднаш. Така што можеби сте слушнале терминот како теми на извршување. Па тоа е вид на како да сте вид на задачите. И ако сте виделе на кутијата на вашиот лаптоп, или нешто слично, повеќе јадрени, што можете да направите е да може да работи на две различни теми за различни делови на процесорот, така што тие можат да всушност се случи во исто време. Значи ова е навистина моќна. И ова е вид на Apache-то Решението за овој проблем. Па се таму нешто како било какви прашања со овој пристап иако? Па претпоставувам дека вид од нив напишал дека таму. Но, и двете од нив вид на користат многу меморија. Тоа е многу скапо да се создаде конец или процес. И дел од образложението е дека само како кога сте водење на програма C како вашиот главен и тогаш тоа повици друга функција, која има некој вид на магацинот. Значи теми исто така, бара целосно посебен оџак кој може да биде доста голем. И ако можете да си замислите што имаат тони корисниците на вашиот веб-сајт, вие ќе треба многу различни теми. Тоа е многу Купишта да управување и одржување. Па тоа е голема меморија потрошувачка. А потоа, исто така, да речеме имаш само еден процесор, или ајде да речеме дека имате повеќе теми отколку ти што имаш оние multicores. Нели? Па да речеме си имал 10 теми а вие само имаше пет процесори. Можете вид на треба да направите оваа работа, каде што да се префрлате помеѓу сегашната оној кој е водење затоа што не може да работи на сите 10 одеднаш. И дека се вика контекст прекинувач. И тој термин, всушност, има неколку различни контексти, но ајде да мислам на тоа како префрлување помеѓу две теми. Кои можат да бидат прилично скапи, бидејќи во основа она што треба да направите е вас треба да го спречат она што правиш, освен состојба на тој работи нишка, а потоа преминете на некое друго место. Значи не сите вид на видите мотивација зошто теми и процеси може да биде малку гломазна? И не имате некое прашање? OK. Кул. Секој имате било какви прашања? OK. Значи, ако ние да направиме чекор назад за секунда, таму е вид на како опсервација дека можеме да направиме за многу веб апликации. И тоа е навистина толку многу од нив всушност не го сторат тоа многу корисни работат во внатрешноста на конец. Па нема никого започна на P постави седум на сите? Значи сакаш да можеби се опише некои од деловите? Сте работеле со најавување или нешто слично? ПУБЛИКАТА: Не Кевин Шмид: OK. Никогаш умот. Жал. Но, во основа, во P сет, ти си ќе треба да се прави многу вид на прашања до базата на податоци да се добијат некои информации од таа база на податоци. И она што вашиот код се случува да се прави, она што Апачи процес или дека Apache тема се случува да се прави додека има да се поврзеш со база на податоци е Тоа е вид на ќе биде седи таму и тоа се случува да биде чекање за базата на податоци за да реплицирате. Сега тоа не би можело да звучи како толку голема договор, бидејќи базата на податоци е на вашиот CS50 апаратот, нели? Но, постои некој вид на мрежа латентност таму, бидејќи сега на интернет серверот мора да издава свои барање до база на податоци за да комуницира со база на податоци, а потоа се добие дека информации назад. Па сега тоа е како добро се чека за мене, јас сум ќе одам да купам нешто од база на податоци и потоа, тука е многу чекање случува. Дали тоа има смисла? И за некои работи тоа не е толку лошо. Ако тоа само треба да, на пример, пристап меморија, тоа не е се допаѓа страшни I / O латентност. И кога велам, I / O латентност, она што јас сум однесуваат на е како и секој вид на како влез излез. Но, за да имаат пристап до датотеката на дискот, како ако сакав да му служи на статични HTML датотека која е на мојот веб страница или нешто како што, јас вид на мора да запре за малку, да се прочита таа датотека од диск, а потоа и во тој процес Чекам. Јас не го правам корисна работа. Ова не е вистина за сè и сешто, но тоа е честа појава во апликации како P сет седум и многу апликации дека не сте всушност прават многу размислување. И кога велам размислување, мислам како пресметковни работа. Па пресметковни работа може да биде нешто како, да речеме, ти сакаше да пишува на веб сервер кој само пресметува енти Фибоначи број. Тоа не звучи како особено забава веб серверот. Како да сум не би очекувал дека сајт да биде следниот Фејсбук, но тоа е некој вид на компјутерската работа. И можете да си замислите замена дека со некој друг вид на интересни пресметковни работа. Да речеме сте биле пишување нешто дека пресметува степени на поделба помеѓу две лица или нешто слично. Така што не вклучуваат некој вид на пресметка, нели? Па дури и тогаш, да го направат тоа се уште имаат да се направи многу на чекање за можеби што треба да се пребарува базата на податоци да се погледне до кој е пријателка со кој или нешто слично. Па таму е таков вид на поимот на компјутерската работа. Дали тоа има смисла? Дали некој има било какви прашања? О, и претпоставувам дека се стави разговор сервери таму бидејќи разговор сервери се вид на уште еден добар пример за тоа. А разговор сервер нема да се направи многу размислување. Тоа само треба да чекаат за луѓето да испрати пораки и тогаш кога тие се, ги испрати. Во ред? Значи само да повториме уште еднаш, Apache и слични веб-сервери како што вилушка на многу теми и процеси кои може да биде вид на непотребното. Па претпоставувам дека прашањето што може да дојде од тоа е не ни треба да имаат повеќе теми и процеси? Што ако имавме само еден? Па ајде вид на наслика слика на она што овој ќе изгледа. Па ајде да го користат само една нишка. Во ред? Па замислете со една нишка. Да претпоставиме дека не се навистина прави дека многу корисно - и кога велам корисни, мислам пресметковни работа - во тие повеќе теми порано. Па ајде вид на консолидирање сè што во една нишка. Па што ако ние имавме една нишка што вид само оди наоколу во јамка и постојано проверки направиле нешто нова случи. Така на пример, нешто ново се случило може да значи Имам нешто назад од базата на податоци, или некој испратени мене ново HTTP барање. Значи тоа се вид на настани што се случуваат, нели? А потоа она што можам да направам кога тие нови работи се случуваат во оваа иста тема на извршување, оваа единствена нишка на извршување, можам да се јавам некој код кој ќе се справи со тоа конкретно нешто. Така на пример, ако добив нешто назад од базата на податоци, би можел да се кандидира ми мали пресметковни дел од тоа што всушност само се подготвува нешто што треба да испрати назад до корисникот. Така што вид на смисла? Но, она што се навистина Импликациите од ова? Нели? Затоа што сум напишал многу код кој - и јас сум само ќе скокаат пред во слајдови ако тоа е во ред. Па ако не ти пречи, јас сум само случува да се земе еден чекор назад. Па овој вид на работа е нарекува циклусот на настани. Во ред? И тоа е вид на основните Идејата зад Node.js. Па што Node.js е навистина прават како веб серверот е има една нишка дека е во основа ќе се врти во јамка како додека еден вид на под хаубата на Node.js кои постојано проверка, дали ќе добиеме нови работи? И потоа ќе се кандидира ракувачи дека ќе се постави. Но добро прашање да побарате е, Како можеме да се случи ова со постоечките нешта? Па да го ставам линија на C код овде дека во основа изгледа дека е отворање на поднесе, нели? Јас Таа само излезе со албум. Па морав да ја отвори новата датотека. Па начинот на кој нашите C код за работење - и претпоставувам причина го одбрав додадени фајлови: беше бидејќи ова е вид на степенот на I / O работа што ние го направивме во C во чувство дека има влез излез. Па ние го нарекуваме овој код кој го прави ова ѓ отворени. А потоа на следната линија на нашиот програма, ние сега можат да работат со f. Па ова ќе биде пример за нешто тоа е како синхрони или блокирање бидејќи на првата линија таму чекаме додека не се добиете датотека отворени. Па на втората линија, знаеме дека ние можат да работат со f, но тоа значи дека дека втората линија не може да навистина се кандидира до првата линија е завршена. Дали тоа има смисла? Значи ова би било лошо да се стави во управувачот настан. А причината за тоа е дека овој вид на чекање, нели? Па ова ќе ни се вратиш назад на истото. И сега ние дури и не ќе имаат корист на повеќе теми или процеси бидејќи ги добивме една нишка во Node.js. Дали тоа има смисла на сите? ПУБЛИКАТА: Чекај. Значи она што е замена? Кевин Шмид: О, па да. Па ќе одам да се дојде до замена. OK. Па што ако имавме нешто кој изгледаше вака? Па што ако сега јас изменето ѓ отвори малку? Па јас сум поминува во ист два аргументи како порано. Јас се уште го сакам нова песна дека таа излезе со. Но јас сум поминува една третина нешто што е оваа променлива наречена код. Но она што е кодот всушност во овој контекст? Тоа е како редовна C променлива? Тоа е функција, нели? И дека може да биде малку чудно, бидејќи Јас сум, всушност, како сега донесување на функционира во друга функција. Па неколку работи да се забележи за тоа. Еден, јас не сум, всушност, повикувајќи код функција. Значи, вие не гледате код со лево paren, нели paren. Јас сум само поминува во кодот. И во C, она што ова ќе всушност се направи е ми даде покажувачот во тој вистински кодот, и тогаш тоа би можело да ја стартувате. Но, само мислам за тоа како сте полагање на кодот да се кандидира кога дека датотеката е отворен. Но, она што ова значи е дека сега остатокот на мојот програма која можеше да стори други нешта, може да продолжи во вршење на други работи додека ние, навистина не чека, но само треба во задниот дел од нашите глави дека кога таа датотека е отворен, рок, кој кодот на врвот. Дали тоа има смисла? И сега идејата зад Node.js е дека кодот во не работи со f дел треба да биде прилично кратка и едноставна и директна и не навистина да се Многу изчислителна. Тоа може да има да се отвори друга датотека, но кој исто така треба да биде прилично брзо бидејќи тоа само треба да се каже уште еден ѓ отворите и потоа побарајте овој друг код. Па само да биде целосно јасно, ѓ отвори таа го прави новиот Кети Пери песна Готово MP3, тоа ќе прилично многу се врати веднаш. А потоа ние само може да продолжиме да работиме други работи бидејќи сето она што сега ѓ отворен повик се е да се каже во основа Клучен ѓ отворен код ја отворите оваа датотека и кога ќе завршиш отворањето на оваа датотека или кога ќе го добие назад, потоа ја стартувате таа код. Но тоа всушност не ја стартувате таа код. И сте имале прашање? ПУБЛИКАТА: Вие се чинеше дека имплицира неколку пати дека додавањето на пресметки интензивна кодот вид на кршат [Нечујни] управувано систем. [Нечујни]? Кевин Шмид: Тоа е големо прашање. Па јас всушност имаат пример за тоа како можете да се интегрираат пресметки интензивна кодот во малку. Па кога ќе дојде до кодот примери, Ќе бидете сигурни да се повлече дека еден. Е тоа во ред? Ви благодарам. Што беше името? Публика: Арон. Кевин Шмид: Арон носи до една многу добра поента, а тоа е дека ако имав некои изчислителна кодот во на го работи со f дел, остатокот од мојата програма не може да работи и не може да се слуша за нови барања или нешто додека сите тој звук е завршена. Значи, ако јас пишувам Јазол код општо освен ако не се направи нешто како јас ќе одам да покажам подоцна, кога ќе погледнеме во кодот примери, морам да бидете сигурни дека мојот код не Врзи овој циклусот на настани. Дали тоа има смисла? OK. Кул. Па Node.js нуди оваа рамка која може да се изгради овие настан управувано сервери со. Така што има вакви асинхрони неблокирачки I / O библиотеки, додека на стандарден C библиотеки кои ние сме биле работат со, како ако само ги користат на ист начин дека ние сме е да ги користите со f отвора и работи, тие се блокира, бидејќи вие всушност треба да чекаат за дека датотеката за отворање. Но Node.js ви дава тоа и тоа во основа врски во V8 на Google Вклучите Javascript-мотор што е причина дека Хром е толку брзо во обработка Го вклучите Javascript-затоа што тоа има оваа V8 мотор. Па знам дека звучи како една од оние WWDC инвеститорот конференции нешто каде што само фрли еден куп на писмо број работи за процесори и велат дека ова е толку кул. Но тоа е кул што тие го направија тоа затоа што го вклучите Javascript - или можеби ако не сте запознаени со JavaScript уште, бидејќи не сме имале предавањата на неа - но JavaScript е препознаена јазик. И ова е важен момент премногу. Па затоа е важно за нашата веб сервери да биде брзо, нели? И ако бевме само трчање вклучите Javascript- код кој беше протолкуван само со секој стар преведувач тоа би можело да биде бавен. Па Јазол придобивките од кои имаат овој супер брз V8 преведувач. И јас не знам дали тие го нарекле бидејќи V8 шлаканица во челото работа, но во ред. Па јас сум подготвен некои примери на оваа адреса. По завршувањето на семинарот, јас сум вид на ќе зборува за тоа како може да се добијат Јазол сет нагоре, но сега за сега, јас само вид на сакаат да одиме преку некои кодот примери. Значи, ако сакате да го следат заедно, сите изворниот код е достапен таму. Во ред? Па јас ќе ја напушти оваа рачно за малку. И тогаш јас сум само ќе префрлат во терминал. Е секој добар со овој URL? Па ќе одам да ги префрлиме на мојот терминал тука. Па тука е код кој Имам за денес. Зошто да не почнеме со simpler.js датотека? Од друга работа е тоа што сите на овој кодот ќе бидат напишани на Го вклучите Javascript-кој ќе може или не може да биде запознаен со. Претпоставувам неколку работи е дека многу на JavaScript код е вид на синтакса и структура е многу слична на Ц, па можете вид на може да го земам како да одите заедно. Пробав да пишувам многу на почнувајќи код за ова на начин кој е сличен на C, така што тоа е малку повеќе да се чита. Но, како што напредува, ќе бидам покажува некои од дополнителните карактеристики на вклучите Javascript-дека се вид на кул. Но, ајде да се погледне на овој примерок програма. Претпоставувам сè се отсечени таму. Јас сум само ќе утврдат дека вистински брзо, ако тоа е во ред или не. Не знам што е ова се случува да се направи. Е дека малку подобро? Можете да видите на var и нешта? OK. Па на првата линија е како го вклучите Javascript- верзија на променлива декларација. Па само да се потенцира она што ова ќе изгледа во C. Значи ова е само како мене велејќи индекс е еднаква на три или нешто слично. Па јас не определи видот. Го вклучите Javascript-има типови, но тоа е многу динамично внеле во природата, па не обезбеди било кој вид на тип на неа. Така што едноставно мора var. Тоа е како променлива. Во ред? И јас го повикувам оваа променлива HTTP. И од мојата десна страна, имам израз кој сакам да го стави во HTTP. И ова вели бараат HTTP. Значи ова е вид на слични да се вклучат. Тоа е малку повеќе како помоќен од вклучуваат во смисла дека го вклучите само ќе копирајте го и ставете заглавието поднесе барање за функција прототипови или она што со дефиниции на тип. Но бараат е, всушност, се случува да ни го добиете код. Па можете да мислам на тоа како увоз некои код. Значи некаде во Node.js модул систем или што и да, тие имаат сето ова Серверот за HTTP код, па јас сум само преземање на тоа за мојата сопствена лична употреба во оваа програма. Во ред? Па тогаш имам оваа функција дека јас сум напишал. И ќе забележите јас не треба да се определи видот враќање или на видот на аргументи повторно. Значи каков вид на лабава внеле во таков вид на смисла. Два аргументи дека е потребно во, барање и одговор. Па тоа е концептуално нешто како познат од сликата што ја имавме на екранот пред бидејќи ние го добивате ова барање дека ние имаат од корисникот. И тогаш имаме одговор дека можеме да пишувам нешта да. Па на првата линија на тоа не res.writeHead 200, а потоа овој типот на содржина текст рамнина. Па ајде го состави овој распаѓа малку. Па да се фокусираат на res.write за малку. Така пишува во основа, и напишете главата, се само начини да се вид на пишувам од работи кои треба да одговорот. Во ред? Па запишување главата, ако некој се сеќава од страна на HTTP предавање, дали вие момци се сеќавам заглавија на врвот на HTTP нешто? Па зошто да не можам само демо заглавја вистински брз. Кои ќе бидат корисни? Или треба ние само вид на - OK. Сигурно. Значи, кога вашиот прелистувач оди на google.com или нешто слично, има всушност е малку повеќе - ова е како една тајна - таму е како малку повеќе информации кој доаѓа низ цевката од само малку пребарување и сè. Па да ви го покаже тоа, јас ќе одам да користат програма наречена навивам. Во ред? Па ова е нешто што можете да го извршите на вашиот Mac OSX командната линија или во апаратот или whatever. И така ако јас не Curl HTTP google.com, Одам да се види на HTML. И ова е, во праведноста, само HTML тој вид на ви кажува да се пренасочување на www ако вашиот пребарувач не автоматски да се справи со редирекција. Значи ова е само HTML, но јас ќе одам за да додадете да навивам овој цртичка јас знаме. Во ред? И ова се случува да се покаже ме заглавија. Значи ова е, исто така, информации што доаѓа преку кога да се добие оваа реакција. Во ред? Па на врвот, ќе видите овој HTTP 301 движат трајно. И ова е вид на важни бидејќи ова се однесува на кодот статус. Па 301 Еве го кодот статус, кој е во основа, само цел број кој му кажува на пребарувачот или кој е читањето на оваа, ако се преправаме дека ти си пребарувач и го гледате ова, во основа сега ако се погледне на тоа и ќе видите 301, ти знаеш дека јас имаат да се направи нешто посебно врз основа на 301, или нешто посебно случи врз основа на 301. Така што се вели пресели засекогаш. А потоа, во основа, имаме еден куп на клучните вредност парови. Па да добиеме локацијата е www.google.com. А потоа вид на сето ова други нешта, но во основа, она што локацијата е велејќи дека е на нова локација е на www.google.com. Па сега, ако одите на google.com, да ќе вид на се види на прелистувачот вид на трепкање за една секунда и потоа препраќа ти десен бек на www.google.com. Па одговорите може да содржи овие заглавија. И неколку работи кои треба да се истакне. Па да речеме ние, всушност биле успешни во посета на веб-страница. Па да ми одат на - она што е добар веб-страница? Јас сум лошо на размислување на добар веб-сајтови на самото место. Публика: Википедија. Кевин Шмид: OK. Ајде да направиме Википедија. Па еве јас беше преместена. Ох чекаат. Бев? Да, бев. OK. Па добив да го стори www. Па јас ќе одам да направите www. И како што можете да видите, тука е сите HTML дека прелистувачот ќе процесот за Википедија. Но, ако јас се задржи лизгање тука, она што јас ќе видам на врвот - Леле, таму е многу HTML на Википедија - но она што можам да видам на врвот тука е ова 200 статус код за разлика од 301 што видов порано. И забележувате дека таа има убав пријателски ред до него. Значи ова е како добар статус код. Дали тоа 200 бројот изгледа познато? Да, бидејќи кога јас не simpler.js, Напишав 200 таму. Значи тоа е во основа велејќи им кажам на прелистувачот или кој се обидува да стигне до ова дека тие биле успешни. Или оној вид на како ние беа успешни премногу. И таму е овој вид на специјална синтакса во вклучите Javascript-за прогласување на мапа на овие копчиња како типот на содржина и овие вредности како текст рамнина. Значи, ако се погледне на одговор дека ние се вративте од Википедија порано, - Одам да се обиде да дојдете до малку побрзо - имате овие копчиња како сервер и овие вредности Апачи. Значи имаш клучеви и вредности. И можете да определи тоа во Јазол што да се испрати назад. Значи ова е всушност вид на, во некои начини, а во некои начини тоа не е навистина, но тоа е малку пониско ниво од PHP код, кој може да биде пишување за P постави седум затоа што PHP и Apache вид на се грижи за некои од овие работи за вас. Во PHP, можете да ја замени стандардниот однесување од страна на пишување на свој заглавија. Но за целите на ова, ние се да се напише нашите сопствени заглавја. Значи не дека линијата смисла да сите, запишување главата линија? OK. Страшни. Па тогаш што го правам е јас се стави крај на одговор велејќи Здраво светот. OK. Но тоа е само функција наречен барање управувачот. Па сега јас всушност треба да вид на направи нешто со оваа функција, нели? Па еве тоа што го правам е таму е ова линија која го прави var серверот еднаквите HTTP.create сервер, а потоа јас помине во барање управувачот. Значи ова е вид на јазол начин на креирање на сервер. И ќе забележите дека јас сум поминува во барањето управувачот. Значи ова е кажување на createServer функција која сакам да ме направи сервер, и кога тој сервер добива одговор, јас треба да го повикате овој побара управувачот функција. Во ред? Па таа линија доста завршува веднаш. Па var серверот линија е направено во право откако ќе го направите тоа доста. Мислам, тоа мора да се постави некои внатрешни државата да знаат дека вие ќе треба да јавете се тоа барање управувачот функција, но тоа не се случува да седат таму и да речеме има корисникот испратени мене барање уште? Има корисникот ме испрати барање уште? Па тоа не ги блокира. Во ред? Па што ова ќе направите е тоа во основа сега зачувува покажувач кон овој код, ова барање управувачот функција, а потоа ќе се кандидира дека кодот кога некој прави барање. А потоа правиме server.listen. На 1337 има прилично произволно. Немав посебна причина за подигање на тој број. Тоа беше сосема случаен. Но, тоа само го одредува порт. Па повеќето веб сервери, ќе видите дека тие користи порт 80, бидејќи тоа е вид на како конвенцијата. Значи, ако јас одам на нешто слично, Не знам, Wikipedia.org, и јас се стави на дебелото 8 - ох Леле, не можете да видите тоа. Жал ми е. Но ако го направам Википедија - Јас ќе го напишам тука само така што тоа е јасно на камерата. Но, ако јас се земе ова во прелистувачот со дебелото црево 80, што го одредува одат на Wikipedia.org на порта 80. Па тоа е како како САД има повеќе порти како, каде можете да брод работи кои треба да вид на. Па тоа е како да одат во овој конкретен место на овој сервер. OK. Па јас само избрав 1337. Има цела низа на броеви кои можете да изберете. Тоа не беше сосема посебна. Но, она што јас ќе одам да направите сега е јас ќе одам да се кандидира Јазол. Дозволете ми да всушност внесете дека неколку линии надолу така што можете да го видите. Одам да се направи јазол, и јас сум случува да се кандидира simpler.js. И ние ќе зборуваме за тоа како да се добие Јазол формирана во малку. Но сега тоа е само водење на серверот. Значи едно нешто можеме да се обидеме кој не може да биде таа возбудлива е тоа што може да всушност се обиде да го пристап во Curl. Така што можам да направам навивам, и мојот машина е локалниот компјутер. Вие исто така ќе видите ова писмено како тоа понекогаш. Локалниот компјутер и 127.0.0.1 се вид на како вашиот домашен компјутер. Па тоа е како да разговараат со свој компјутер. OK. А потоа можам да кажам 1337. Значи, ако јас ја извршите оваа линија код, се вели Здраво светот. И ако сакав да се види дека нешто што имаше типот на содржина текст обичен или без разлика, јас дури би можеле да се стави ова овде. И ќе забележите дека тоа не се каже во ред. И имам текст рамнина. А потоа, тука е вид на сето ова и други работи кои јазол ќе го додадете во таму за мене. Тоа не е супер важно. Мислам, постојат некои вид на техничка аспекти на во тоа се вид кул да се зборува за, но само за да покажат вас, јас исто така имаат овластување да промените овие наоколу. Па јас само може да додадете еден куп на работи како што. А потоа, сега, ако гледам во мојата излез, тоа ќе биде тоа. Па овие заглавија значи некои работи да пребарувачи и работи како што. И хедери во основа може да се каже на прелистувачот како да се одговори на нешто. Ако некогаш сте слушнале за колачиња пред, или ако некогаш сте биле караше од страна на веб страница поставување колачиња, или уклучен колаче блок или нешто слично. Ти всушност може да поставите куки во овие заглавија. Па тие се каже на прелистувачот како да однесување во некои случаи. OK. Така што беше simpler.js. Дали некој има било какви прашања на тој изворен код датотека? OK. Кул. Значи, да се отстранат на Р тоа и се погледне на simple.js. Значи ова е доста на истата програма. Јас само го напишал малку поинаку затоа што сакав да го решите на подвлекување некои карактеристики на вклучите Javascript-. Така забележите дека барањето управувачот функција целосно исчезна. Ох Да, го имате некое прашање? Публика: Да, аргументите кои се пренесуваат на онаа функција, што се тие? Кевин Шмид: Значи тоа се Го вклучите Javascript-објекти. Во Node.js документација, во основа вели дека она што методи се достапни за нив. Ние едноставно се случи да имаат пристап до овој метод се нарекува запишување главата и крајот и работи како што. Но, има една цела група повеќе методи. И на пример, како еден од нив особено за КН, можете да направите нешто како rec.method кој ќе ви кажам дали тоа е HTTP GET или HTTP POST побарување и работи како што. Така што сите видови на различни својства, но тие се и двете Го вклучите Javascript-објекти, и тие само имаат функции во прилог на нив дека може да напише нешта да. Во ред? Па се забележи дека барањето управувачот е целосно исчезна. Но го кодот што ја имав во барање управувачот е уште таму. Јас се уште ја имаат оваа res.writeHead и јас се уште ја имаат оваа res.end. И она што ова е пример на во JavaScript е оваа идеја на анонимен функција. и анонимен е како фитинг име за тоа, бидејќи таа буквално не ги има име. Нема функција барање управувачот во таму. Нема име, но сепак е преземање на аргумент. Па јас сеуште имам REC и ОИЕ. И јас се уште имаат код. Ова е совршено во ред JavaScript код. Па јас да се изјасни за функција, без експлицитно го даваат името. Тоа е малку збунувачки, во прв план. Постојат некои како корисни работи дека можете да направите со овие анонимни функции. Дали некој има било какви прашања на ова, или тоа е во ред само да се, сега за сега, вид на само прифати дека ќе го направи истото? Да? Публика: Дали функции прв класа во вклучите Javascript-? Кевин Шмид: Тие се првите класа во JavaScript. И само знам дека овие концепти на поминува во анонимен функција како ова се однесуваат да го вклучите Javascript што ќе може да се напише во вашиот конечниот проект за веб прелистувачот премногу. Така на пример, во вклучите во Вашиот прелистувач, тоа е, исто така, малку настан управувано во смисла дека она што ќе имаат е кога корисникот ќе кликне оваа копче, сакам да ја извршите оваа код. Па тоа е од ист вид на идеите на клиентската страна, кога едно притискање на глувчето или тие глувчето над некој слика на вашиот веб-страница, ја извршите оваа код. Кои можат да се однесуваат на сервери. Па тоа е вид на како возбудлива Причината зошто го вклучите Javascript-е навистина погодна или некои луѓе мислат дека тоа е соодветен јазик за овој вид на Настанот возачот сервер, бидејќи имате овие анонимни функции. Имате целата идеја на овој асинхрони код. OK. Секој имате било какви прашања? OK. Така што беше simple.js. Па ајде да погледнеме уште една или неколку повеќе. Значи ова е sleep.js. Така е некој запознаен со на C спиење функција? Од можеби една од порано предавања или нешто слично? Значи, во основа може да се помине во Мислам дека бројот на секунди или ако сте со користење У спијам бројот на милисекунди или Nanoseconds. И во основа програма само ќе престане се кандидира за таа сума на времето. Нели? И тогаш тоа ќе се разбудам на крајот и тогаш тоа само ќе продолжи да работи програмата. Па затоа серверот вид на дава впечаток на спиење. Па се забележи дека имаме иста res.writeHead 200 со насловот, пред тоа, но тогаш ние повикувајќи овој функција наречена сет завршиле. Постави истек на време е исто така на располагање во вашиот веб прелистувач на Google Chrome или Safari или whatever. И во основа она што таа го прави тука е тоа е земајќи ги во функција. Известување, повторно, тоа е анонимен функција. Па тоа е вид на ладно бидејќи ние сме користење на анонимни функција во рамките на една анонимен функција што може да биде малку чудно. Но тоа е преземање на таа функција, што е во основа велејќи - и начинот на кој овој дела е во 5000 милисекунди, сакам да се изврши таа функција која само завршува одговор и пишува еј. Значи ова дава впечаток на како спиење, но начинот на кој тоа всушност работи е ќе помине низ оваа линија многу брзо. Ние сме само пишувате нешто. А потоа ние исто така ќе поминува низ оваа линија многу брзо. Значи ние не сме всушност ќе да чекаат пет секунди. Ние сме само ќе да се кандидира овој код веднаш. А потоа, тука е, повторно, ова малку циклус на настани, кој сега има тоа нешто регистри кои во основа е само постојано ќе се врти во круг и да гледа во часовникот во една конци и велејќи, има пет секунди уште помина? А потоа кога гледа дека вториот рака се пресели како пет секунди или без разлика, тогаш тоа се буди и вели: ох, што морам да направам? Ох морам да ја извршите оваа код. А потоа тоа се случува да се кандидира res.end еј. Па уште еднаш, ние никогаш не се чека тука. Па тоа не е дека овој код во внатрешноста на оваа функција се случува да се земе пет секунди да се кандидира. Овој код ќе се кандидира доста моментално, барем во однос на петте секунди кои ние се зборува за порано порано. Па само да се покаже овој во акција, Што можам да направам Node.sleep.js. И никако не можев да се плеткаш нешто? Можеби. Жал. Ајде да видиме што можеме да направиме за да го надминете овој. OK. Значи дефинитивно се користи Node.js. Јас сум само се шегувам. OK. Само една секунда. OK. Знам што е тоа. Значи прашањето е што во мојата друга табот тука, трчав Јазол веќе на дека истата адреса, 1337. Па грешка дека оваа фрли, ако гледаме на вистински тесно, е-адреса во користење, EADDRINUSE. Па јас веќе бев користење 1337 овде. Значи, ако јас се затвори овој исклучи, а потоа јас сега обидете да ја извршите оваа, се надевам, сè ќе биде добро. OK. Така да може да има само една работа вид на слушање на порта одеднаш. Друго решение би биле за мене само да ги уредувате таа програма и да тоа да биде како 1338 или нешто како што. Но сега сонот е трчање. Па ајде всушност го пробате во прелистувач овој пат, бидејќи тоа е малку unexciting за да ја видите тоа во терминал. Па јас сум само ќе одат на таа 127 адреса повторно во 1337. И ако може да го види - Јас не знам дали можете да - но мојот прелистувачот со земање на многу, многу долго време да се вчита или како пет секунди. А потоа по што, конечно заврши одговор. А ти не можеш да го забележиш нешто е преместена во текот на еден малку, но ако можам да направам ова малку помали, ќе може да се види што се вели еј. Па добив еј, но после пет секунди. И тоа би можело да биде малку почиста за да ја видите тоа тука на терминал, па јас сум случува да се направи - ајде да направиме тука - ајде да направиме Curl таа адреса повторно со 1337. И јас само вид на треба да седат тука за пет секунди. Но забележите дека серверот може да прифати нови одговори. Па тоа отпечатоци еј. И на демо ова, во основа она што Што можам да направам во овој Друго табот - па да речеме јас го направите ова во друга табот, Одам да се направи навивам и истата работа повторно. И јас одам да се обиде да започне овие момци надвор во исто време. Па јас сум ќе го направите ова, и јас сум ќе се трка овде и јас сум ќе го направи тоа повторно. И ајде да се направи тоа, така што ќе може да се види и од нив. Дека еден печатени еј и дека еден печатени еј целиот пат во - ајде да го направите тоа експеримент повторно. Всушност, ајде да го користите овој трик, ако тоа е во ред. Па ќе одам да се користи школка нешто што ми дозволува да се кандидира во основа две копии на оваа програма во паралела. Па тоа ќе се кандидира на првата програма и втората програма паралелно. Па сега ако јас притиснете Enter, тоа се случува да се направи тоа барање доста моментално во исто време. Па ајде даде оваа сними. Па сега се забележи тоа вели два процеса. И ако сте љубопитни, дека 27.000 број е основа на процесот проект. А потоа забележите, тие печатени еј во исто време. Тоа не беше како моравме да чекаме пет секунди за една, а потоа после тоа, пет секунди подоцна го добиете секунда. Значи тоа е вид на, на некој начин, тоа е не, навистина, докази, но тоа е интуитивен докази дека тоа не е само како чекаат пет секунди и блокирање на целата тема. Добро кул. Па Арон праша едно прашање претходно дека беше, и што ако ние не се направи нешто - Да? ПУБЛИКАТА: Чекај. Како е тоа различно од printf тампон, иако? Не тој автоматски го направите тоа? Зошто ние треба да се грижите за тоа? Кевин Шмид: О, може да ви велат дека еден повеќе време? Публика: не му се допаѓа printf тампон направи иста работа? Кевин Шмид: На printf тампон? Публика: Да. OK. Не беше во една од квизови тие беа зборува за тоа како, ако десната printf нешто, а потоа да го имаат пауза еден Вториот, а потоа ќе ја имаат јамка десет пати, тоа ќе се чека десет секунди и тогаш printf сето заедно? Кевин Шмид: Ох, во ред. Публика: Дали е тоа го прават истото нешто тогаш во овој случај? Кевин Шмид: Значи, прашањето беше основа во една од поранешните квизови или нешто, имаше прашање што Во суштина, ако се каже печати ѓ 10 работи во исто време, а потоа заспа како во процесот на печатење оние надвор, на крајот од некоја причина, тоа би само да шутнат на оние сите надвор од екранот. Па таму е вид на две различни концепти тука. Па претпоставувам дека една работа е тоа што, во овој случај, ние сме се занимаваат со две различни вид на луѓе барајќи серверот за работи во исто време. И причината што на printf вид на чека како што и депонии сите надвор одеднаш е повеќе поврзана со како printf вид на - па начинот на кој printf е, всушност, спроведува е тоа во основа треба да разговара со оперативниот систем да се напише тој звук на конзола. Така што не сакате да го направите сето тоа нешта, веднаш кога ќе се каже printf некои стринг бидејќи тоа може да се скапи и ако мора да направи тоа во секое време. Значи, ако правиш printf еј, вашата програма не, всушност може да печати дека веднаш до конзола. Тоа би можело да се каже, во ред, јас го напишав. А потоа вид на чекаат за да им даде тоа малку повеќе пред всушност пишувањето надвор, да конзола. Така причина што тоа беше случај - и тоа е вид на неповрзани на спиење - е дека спиењето е вид на само инјектира во таму за да се демонстрира фактот дека тоа не пишува тоа синхроно. Но причината за тоа е само перформанси, така што ќе не мора да се направи таа многу контакти да оперативниот систем. Но, овде, она што ние сме навистина се обидува да направи со овој сон работа е само шоу дека кога имаме две лица посета оваа веб страна, тоа не се случува да се стави нив во линија каде што се случува да се каже Морам да ви помогне, а потоа кога сум целосно завршена помагајќи ти по овие пет секунди, а потоа јас ќе одам да се движи кон следниот лице. Па барање на првиот човек не го прави тоа врзи тој настан јамка ако тоа го прави смисла. Но, тука е, всушност, на пример на нешто што ќе се врзуваат до циклусот на настани. Па тука е ужасно функција да пресмета енти Фибоначи. Тоа е буквално полошо начин можете да пресмета енти Фибоначи број. И ова е всушност само да се признае каде ова дојде од, таму е всушност - Мислам, може да се обидете да одат најдете тоа - но таму е како многу долга блог ја објавите дека некој напишал. Тоа е како една од оние Reddit работи. Но некој критикуваше Node.js, и тие се користат ова како пример. Па јас вид на сакав само да ви покажам две различни перспективи само за да добие општо разбирање на концептите зад овие две нешта. Но, ова е избран како само грозно, ужасно неефикасен пресметки интензивна начин да се пресмета енти Фибоначи број. Па само како од страна на белешка, зошто е тоа ужасно како на еден начин? Да? Публика: Велат дека почне надвор со 1000. 1000 се дели на 999 и 998. Секоја од оваа дели на две работи. Секоја од оваа дели на две работи. Кевин Шмид: Право. Публика: Сите патот надолу. Кевин Шмид: Токму така. Па само да се повторува за камерата, ако јас јавете се ПИБ на како 1000 или нешто како што, тоа е очигледно не помалку од или еднаква на една, па ќе одам да се одат во овој друг случај, а потоа јас ќе одам да се јавите ПИБ 999 плус ПИБ 998. А потоа доста сето тоа работа која фантазија 999 не е вид на ова ниво. Ако одат надолу, тоа е дури и повеќе излишни Освен тоа, но ако сте само мислам компјутерска фантазија 998 добива ни прилично блиску до ПИБ 999. Па ние навистина треба да биде малку повеќе умен за тоа како ние вид на повторна употреба овие, но ние не сме повторната употреба на овие работи на сите. Па можете да замислите оваа гигантска, гигантска дрво тоа е само ужасно. Но сепак, во ред. Така што беше фантазија. Тоа само ги зема некое време да се кандидира. Да? ПУБЛИКАТА: [нечујни]. Кевин Шмид: О, може да ви го повторам прашањето? ПУБЛИКАТА: [нечујни]. Кевин Шмид: Ох, па ова е само код што се случува да се вид на на серверот. Значи ова не се случува да се најде во прелистувачот или ништо. Тоа е во основа она што го имаме е дека кога корисникот тука доста прави нивно барање, повторно, кога ќе вид на направи барање, ние ќе треба да се јавите оваа функција на страната на серверот. А потоа ние ќе добиете резултат назад од повикувајќи таа функција. А потоа ние само ќе печати до корисникот. Па така корисниците навистина не се занимаваат Со оваа функција премногу. Беше дека прашањето? Дали тоа има смисла? OK. Кул. Значи, повторно, тоа го правиме целата оваа res.writeHead нешто каде што испечатите заглавието. И тогаш јас се стави крај на одговор со тоа магичната бројка е фантазија 45. Па да го изврши овој сервер. Па јас ќе одам да направите еден јазол fib.js. Па сега ми фантазија серверот се извршува. А потоа тука, јас ќе одам да се направи еден од нив. Во ред? Па јас сум само ќе кажам, навивам. Па затоа се случува да се земе малку време, но се надевам дека наскоро ќе заврши и тоа ќе печати дека 45 Фибоначи број. ПУБЛИКАТА: [нечујни]. Кевин Шмид: Требаше се направи наскоро. Па затоа треба да се земе 5-6 секунди. Не знам што е само V8 се супер брзо, но во секој случај, ова е многу краток пример и намерно без вкус на не-тривијални пресметка. Па по некое време, тоа не се тоа. Но сега, она што, ако го направам тоа ист вид на експеримент како порано, каде што можам да направам две барања во исто време? Па еве јас ќе одам на Curl на таа адреса, и јас одам да се направи уште еден навивам. И се сеќавам, кога направивме ова за спијат серверот, кога ние во основа имаше по пет секунди, тие прилично многу двете се врати во право околу исто време. Така што не беше особено врзан. Но, ајде да се обидеме сега. Добро, па добивме нашите два процеса. Запомни оние се процесот ИД. Ова се случува да биде малку непријатно додека ние штанд. Па да останам тука и да чекаат. Па еден од нив треба да дојде назад по како - Добро, така што еден не се врати. Но, тогаш зошто да не го направи вториот еден се врати само уште? Да? ПУБЛИКАТА: Серверот не може да направи ништо додека тоа е компјутерска дека голем број. Кевин Шмид: Право. Значи одговорот е само дека серверот навистина не можат да сторат ништо додека тоа е компјутери кои Фибоначи број. Па сега јас само ја добив две работи назад. Но, претпоставувам дека само да се размислува за код малку повеќе, како тоа е работа и сè. Па оваа функција овде е код кој Сум изјави овој сервер да се кандидира кога добива нов дојдовен барање. Па тоа е само случува да се кандидира преку овој целиот код и потоа тоа се случува да се обратите Назад кон циклус на настани, а потоа продолжи проверка за нови настани. Значи, во основа она што го се случува е сервер е слуша за нови работи. Првиот човек прашува за она што 45 е. Трчаме овој код за да го пресмета. Овој код е потребно околу пет на шест секунди да се кандидира. Потоа одиме назад кон циклус на настани и да се провери за нови барања. Значи ова е пример за тоа како, ако имаат работи кои се т.н. пресмета обврзани, или да користите многу пресметковни, не моќ, но како се изчислителна - Претпоставувам едно нешто да се каже за ова е дека оваа функција е тоа целосно, во најголем дел, прилично корисна работа во право. Цело време дека повратен повик функција беше работи, тоа беше прилично многу поминуваше поголемиот дел од своето време само компјутери кои енти Фибоначи број. Но имавме само една нишка да се справи со. Во моделот Apache-то, кога двајца луѓе направени на барање да се добие ПИБ 45, ние би имале две различни теми. А потоа работата на оперативниот систем би биле, или корисникот ниво код кој раководи со теми, ќе си е да парче што врз Процесорот, или дури и ако сте имале повеќе процесори, да ги дистрибуирате рамномерно низ процесори така што тие беа завршница околу во исто време. Па само да ви покажеме како можеме да ги сортирате од - и ова не е целосно совршен решение, но вид на како можеме да направи да се врати тука и да прават малку подобро. Значи она што го имаме тука е програма наречена Фантазија В И ова во основа користи уште една од модули јазол наречен Модул подпроцесот. Па јас сум вклучен дека на врвот вид на како јас би го направил една фунта вклучуваат дете process.h или нешто слично. Сега имам пристап до овој ЦП променлива која ги има сите ми функционалност. Па сега што правам во овој одговор управувачот е јас сум водење на оваа програма точка го намали фантазија 45. Значи она што го направив - и јас сум само ќе да излезе од оваа програма за малку - е јас сум напишал C програма со која основа пресметува енти Фибоначи број. Па овде е само една програма што сум напишал во C, кој ја пресметува ова. Можам да го собере, и јас може да работи тоа во командната линија. И тоа се случува да се пресмета 45 Фибоначи број. Така забележите тоа само ги зема доста толку долго. Јас веројатно може да се користат цртичка 03 до оптимизира или нешто слично, но јас само направив како редовни компајлерот поставувања. И тоа отпечатоци надвор. Но сега, она што сум јас вид на прави? Ох ми е, погрешен фајл. Па јас го стори истото работи со насловот како порано. Тогаш јас го направите ова cp.exec. Па што ова се случува да направите е да тоа е ќе ја извршите оваа програма. Но начинот на кој тоа работи е дека тоа не се случува да се чека за таа програма да заврши. Тоа само во основа вели дека извршување на оваа програма. Значи, во основа тип тоа во командната линија вид на. А потоа, кога ќе завршиш со тоа, ја извршите оваа функција. Па сега ние вид на се ова Целиот обновени нешто од како ние не сме на чекање. Дали тоа вид на смисла? Да? ПУБЛИКАТА: [нечујни]? Кевин Шмид: Значи ова всушност ќе отвори нов процес да го направи тоа. Значи ова е, всушност, на некој начин, зло, не супер зло, но тоа е важно е да се каже дека ова е вид на да се вратам на, од една страна, на Apache-то модел, каде што го правиме теми и процеси за секое барање или процеси за секое барање. Значи ова е вид на аналогни на она што Апачи прави. Во некои случаи, тоа само ќе користи нова навој, што е малку повеќе светлина тежина од процесот, но Апачи може да заврши forking нов процес кој е вид на она што го правиме тука имплицитно со правење точка црта фантазија 45. И тогаш во тој случај, ние вид на направат исто трошоци на процесите. Па ова е само една работа што можете да направите. Но само за да покажат на овој вид на работи. И овој разговор е само навистина насочена кон презентирање на овие видови на програми како начин да се покаже различни перспективи на како да се дизајнира сервери како што. Значи ова работи, а потоа сега, ако го направам ова, повторно, јас денеска добив две процес ИД. Ајде да зборуваме за работи кои треба да се истакне. Па се забележи дека тие се постепено. Тоа е кул. Затоа што тоа беше 27.122 порано. Но информации сега, тие се вратија приближно во исто време. И сега, е добро прашање да прашам за зошто е тоа што случајот е, чија работа тоа беше сега да вид на направи овие работи вид на игра фер едни со друга страна, овие два случаи на точка црта фантазија 45 дека Истрчав или дека Јазол трчаше? Кој вид на прави фер што тие двајцата се вид на избалансиран кандидира време? ПУБЛИКАТА: [нечујни]. Кевин Шмид: Да. Значи, во основа, кога правам точка црта фантазија 45 или нешто слично, сега е вид до оперативниот систем за да се се справи со траење од овие програми. И сега може да ги распоред на различни процесорот или може да ги распоред. Тоа може да парче на времето што еден Процесорот добива или дека тие се да се кандидира на еден процесор. Па тоа е идејата зад тоа. Дали тоа има смисла на сите? Па сега Јазол не е навистина игра учество во поделба на овие задачи. OK. Па тоа е речиси тоа за примери. Сакав само да се покаже уште една работа затоа што многу од овој досега е не сосема супер практични во некои случаи. Можам да замислам доаѓа дома по овој зборува и нешто и велејќи како, и јас вид на излегоа од кои зборува дека Јас може да направи Фибоначи сервер за мојата финалниот проект. Па овде е само вид на уште еден пример се надевам дека ќе биде - можеби не, но можеби - малку повеќе вид на релевантни за конечниот проекти и размислување напред за такви работи. Значи ова е chat.js. Па ова е нешто како некои мостра серверот од страна на кодот кој можете да ги користите за да постави мал разговор сервер како може да се види на Фејсбук разговор или whatever. Па јас не велам дека ова е како што се Фејсбук Чет, но ова е вид на како добра - можеби не е добро, но можеби добро - почетна точка за разговор сервер за вашиот веб-сајт за конечниот проект. Значи, да погледнеме во она што таа го прави. Па ние сме добивање на оваа специјална нешто на врвот, овој var Sio еднакво бараат Socket.IO. Значи ова е уште една работа што тоа не го прави всушност доаѓаат во комплет со Јазол, но можете да го инсталирате. Тоа е Јазол модул. Па тоа е исто како и некои продолжување на Јазол. SocketIO е, всушност, навистина вид на кул. Тоа е апстракција, која во основа она што тоа не е е тоа што ви овозможува да имаат оваа прилив на комуникација помеѓу веб пребарувач и веб сервер. Па во најголем дел досега, имавме овие многу брзо една секунда или две Вториот комуникација помеѓу веб прелистувачот и веб серверот. Така, тоа е во основа одат на google.com, да добијат работи, да го испрати назад, а потоа ние сме направиле. Ние никогаш не сме повторно зборува додека корисник видови во нешто друго. Но, она што Socket.IO и сличен вид на нешта - и SocketIO е всушност еден од работите кој е изграден на, како WebSocket кој е вид на располагање како дел од HTML5 - кој ви овозможува да ја имаат оваа продолжување на дијалогот. И ова е многу корисно во разговор сервер вид на работа, бидејќи тоа е вид како продолжување на дијалогот во некои начини, бидејќи ако сте во разговор со некој, сега можете само да испрати порака одредување на цевката, а потоа серверот може да се испрати порака по цевка за да на другата личност сте разговор со. А потоа можете да ја имаат оваа разменуваат слично. Па тоа е вид на она што SocketIO е добро за. Причина што SocketIO користи WebSockets како една работа е тоа што во Покрај само обичен стар WebSockets, тоа исто така значи некои трикови да основа го прават тоа прелистувач компатибилни. Значи пребарувачи како на Internet Explorer за жал не поддржуваат WebSockets право надвор од кутијата. Па тоа го користи некој друг вид на кул уредни работи со Adobe Flash за да се овозможи да имате крстот прелистувач поддршка. Па тоа е навистина корисно. А всушност, ако знам дека сум вид на работи на време тука, но CS50 Дискутираат, дали некогаш сте виделе нешто како, не знам, празно, па и така е одговарање на овој пост или нешто како што, таа карактеристика? Тоа е SocketIO. Значи, кога некој ќе почне да пишувате во разговараат поле, за да се направи одговор или нешто, вашиот пребарувач не она што е повикани SocketIO емитува некој вид на Настанот кој се вели дека некој е одговарање на овој пост. Тогаш серверот вели, во ред, она што можам да сторам? И сега морам да кажам оние другите момци кои се на CS50 Дискутирај потрага во овој пост дека некој е одговарање. Па тоа е вид на она што SocketIO е добро за овој вид на продолжување на прилив на дијалог. OK. Значи она што го имам тука - и ние сме само ќе го игнорираат врски низа за малку - што го правам е јас уште се слуша. Па тоа е само начинот на кој во Socket.IO е велејќи ајде слушате на оваа порта. А потоа јас го направите ова на интернет. Па тоа е само основа Грло на Ио начин да се каже, кога ќе добиеме една конекција, Те сакам да ја извршите оваа код. И ќе забележите дека наместо rec и ОИЕ помина таму имам Грло. И ова Грло идеја е во основа овој нешто што можете да пишете на и читање од кои има корисникот пораки можеби. И пораките што ќе испрати може да оди преку кој штекер. Дали тоа има смисла? Значи тоа е тоа продолжува нешто. Значи она што го правам е што јас го нарекувам Socket.emit. И емитуваат зема доста многу два аргументи. Првиот аргумент е низа само претставуваат видот на нешто што сте емитуваат. Така и за овој случај, јас сум користење овој стринг нова порака. И тоа е само основа велејќи дека типот на оваа работа, она што јас сум испраќање, е нова порака. Да можете да слушате за специфични видови како нова порака или што со користење на точка на. Па конекција и корисникот испратен таму, ако ќе се погледне каде што ние го нарекуваме точка на, тие се други низи, кои претставуваат типови на корисникот пораки. Така, тоа е во основа може да ја имаат оваа емитуваат еден од овие типови на пораки, и потоа направете нешто како одговор на еден од овие типови на пораки Па јас сум емитуваат оваа нова порака. Ние ќе го игнорираат connections.push за вториот. Но, тогаш, велам, Socket.on корисникот испратена. Па сега тоа е нешто како кога корисникот ме праќа порака, сакам можете да ја извршите оваа код. И ќе забележите дека анонимен функција е земајќи во оваа променлива наречен податоци кои се во основа ќе да имаат порака на корисникот. Па сега ајде вид на разговор за врските низа. Значи ова е наменета за разговор клиент каде во основа сите е вид на во исто собата за разговор. Значи, во основа, она што треба да се задржи околу некои низа, која во основа претставува сите луѓе во разговор во некој начин, ако тоа го прави смисла. Нели? Бидејќи треба да знаеме кои се тие момци така што ние можеме да ги испратите пораките дека другите луѓе испрати до нас. Па што овој код го прави е кога корисникот испраќа порака - тоа е тип на на настанот - ние ќе ја извршите оваа код. И она што го правиме е трчаме низ оваа низа што имаме наречен врски. И доста за секоја врска освен оној кој е наш, тоа е она што овој код вели, ние испрати нова порака со која спроведен порака информации. Значи ако забележите тука, она што го направив кога корисникот всушност прави нов конекција е додадов со JavaScript.push метод, ова е во основа, само велејќи како додадете дека Грло како вредност во нашите врски низа. Па сега кога овој код работи, тоа ќе испрати на оние особено конекции. Така што ова може да биде добра појдовна точка за правење на разговор сервер или нешто слично. И вид на кул работа е дека кодот кој го гледате тука за како понатаму и емитуваат и работи како што е иста вид на JavaScript код кој што би пишува во прелистувачот за да комуницирате со серверот. Па затоа SocketIO е вид на уредни и корисни на тој начин. О, и само уште нешто вистински брз. Имаше CS50 финалниот проект минатата година , која во основа спроведува разговор сервер во Node.js. Мислам дека тоа е Harvardchats.org но не сум - OK. Не сум сигурен што е URL-то е, но Можам да го испратам дека надвор потоа. Но, тоа е баш кул што можете да го направите со Node.js. Па се надевам дека, генерално, вие момци имаат добра смисла на она што Node.js е корисно за и како можеби може да се примени на вашиот конечниот проект. Јас ќе се испраќаат некои повеќе ресурси заедно со ова. И ви благодарам што дојдовте. Ви благодарам. [Аплауз]