>> KEVIN SCHMID: Здравейте всички.
Добре дошли на семинара CS50 на Node.js.
Моето име е Кевин.
Аз съм CS50 TF.
И аз съм нещо като наистина развълнуван за този семинар.
Мисля Node.js е много готино.
Надявам се, че този семинар може да се използва като добър, предполагам, трамплин за
някои от вашите проекти, ако окончателните вие сте заинтересовани в използването на
нещо като Node.js.
>> Ще вид начало на семинара на разстояние от просто говоря за малко на
вид на фон мащабируемост перспективи на Node.js, а след това
ние ще се премести в някои код примери.
И аз ще трябва кода на уеб сайт, и можете да погледнете кода.
И след края на семинара, ще сортирате на беседа за това как можете да настроите Node.js
на вашия компютър.
>> OK.
Така че нека да започнем.
Така че предполагам, аз просто искам да се говори за уеб сървъри, наистина, на първо място.
И за да започне тази дискусия, аз основно има диаграма, която е от
учебник, използван за CS61, които основно показва взаимодействието
между процес на клиент, като вашия уеб браузър или като вашата цел клиент или
нещо такова, и уеб сървър.
Така че този вид изглежда подобно на картината, която видях в лекция на тема
Сряда, където основно имаме някои процес клиент като Google Chrome.
>> И след това стъпка едно е клиент изпраща заявка.
Така че това може да бъде нещо като добре нека посетите, аз не знам, CS50.net.
Така че ние издаваме това искане.
И дали някой си спомня името на протокола, който определя как
Искането трябва да бъде структурирана?
Да.
>> ПУБЛИКАТА: [недоловим].
>> KEVIN SCHMID: Точно така.
Така че това е като HTTP, нали?
Така че основно спецификацията за това как че това искане трябва действително да бъдат определени
от, тъй като в края на деня, това искане е наистина точно като
низ, който в общи линии казва, че аз искам това.
И спецификацията за това е HTTP.
Така че това е като протокол.
>> Така че след това сървърът получи това искане.
Така че вие ​​имате инсталиран уеб сървър в CS50 уреда.
Това е Apache.
И тази седмица, когато работите върху проблем настроите седем, вие всъщност ще се работи
с този уеб сървър.
Така че сървърът получи това искане, и След това тя трябва да вид надраскате
главата и да кажа като добре какво да правя с това?
>> Така че на базата на това, което тя реши да се направи, след това тя може да се наложи да се свържете с някакъв вид
на ресурсите.
И този ресурс може да бъде много различни неща.
От една страна, тя може да бъде само като статичен HTML файл.
Така че това може да бъде само като някаква HTML, че е като за
личния си уебсайт.
Тя може да бъде статичен файл като изображение или като филм, който имате.
Тя дори може да се наложи да говоря на някаква база
като база данни MySQL.
Така че това не винаги се налага да комуникират с ресурс, но в
някои случаи тя може.
>> Така че след това, което ще направи след това е, че ще
изпрати обратно отговора.
И отговор за това е също е посочено от HTTP.
Така че след това клиентът може да я получи.
Тя може да го разкъсат и да го обработи.
И тогава можете да получите на уеб страница като Google или CS50.net или
каквото и да отиде.
OK?
>> Това е основният че взаимодействието ние ще трябва да се занимават с теб.
И ние почти ще бъде фокусиране върху тази част от
взаимодействие на сървъра.
OK.
Cool.
Някой да има някакви въпроси досега?
OK.
>> Така че, както казахме, на уеб сървъра получава този HTTP заявка и след това издава тази
HTTP отговор.
И както говорихме по-рано, CS50 уред уеб сървър е Apache.
Така че, когато вие работите върху P определя седем, ти започваш да се работи с
Apache уеб сървър.
Вие никога не ще трябва да наистина работят с Apache директно твърде много.
Някак конфигурирате Apache малко когато укажете на виртуални хостове или
на V домакините, и ние ще се до това малко.
>> Но общо взето, на Apache уеб сървър настроена за работа с PHP вид
на изваждането му от кутията.
Така че това, което наистина се случва е, когато отидеш на един от уебсайтовете си, като, да речем,
местно index.php домакин наклонена черта или нещо подобно, е вашият браузър изпраща че
поискване, а след това Apache седи има и цифри, за да правите с него.
И тази дейност е да се изпълни този код в index.php и
след това го изпрати обратно.
Така че там е това.
Това е нещо като говорихме за това.
Така тя може да служи само статичен файл или работят с някои PHP код и след издаване
реакцията.
>> Така след общ въпрос, че може да дойде нагоре е добре, как да се справят наистина
с като множество потребители в същото време?
Така че представете си, ако сте написването на уеб сървър, ако сте имали един уеб сървър, който
Вие се опитвате да напишете нещо в като C или нещо подобно,
По принцип трябва да се мисли за това как там би могло да бъде някакъв вид на код, който
ще получи искане, но след това тя трябва да направи всичко това работата по него.
Той може да има, например, се свържете с база данни или нещо подобно.
Нали така?
И след това ще направи този вид на обработка и тогава
изпраща обратно отговора.
Така че това е като голямата Преглед на ниво.
>> Но това не е веднага ясно как ви мога да го направя така, че двама души или
дори 1000 души биха могли да работят с вашата уеб сървър в същото време.
Така че решението, че Apache използва се нарича нишки или процеси.
Така че може би сте чували за тези термини и преди.
Всичко е наред, ако не сте, но просто мисля, за нишки или процеси, като начини за
операционна система или потребителска програма или нещо подобно или на уеб сървър
някак да се изпълни многократно неща наведнъж.
Така че може да сте чували понятието като нишки на изпълнение.
Така че това е нещо като сте сортиране на мултитаскинг.
>> И ако сте виждали върху кутията на вашия лаптоп, или нещо такова,
многожилен, какво можете да направите, е да можеш тече два различни теми за различен
части на процесора, така че те могат всъщност се случи в същото време.
Така че това е наистина мощен.
И това е вид на Apache решение на този проблем.
>> Така че има нещо като някакви проблеми с този подход все пак?
Така че аз предполагам, че вид на тях пише там.
Но и двете от тях вид използва много памет.
Това е много скъпо да се създаде нишка или процес.
>> И част от мотивите е, че само като, когато сте стартирали програма C
като вашия основен и след това, че на повикванията друга функция, която има
някакъв вид на купчина.
Така теми също се нуждаят от съвсем отделна купчина, която
може да бъде доста голям.
И ако можете да си представите като тон на потребители на вашия сайт, вие ще трябва
много различни теми.
Това е много купчини, за да управляват и поддържат.
Така че това е голям разход на памет.
>> И тогава, също така, нека кажем, че имате само един CPU, или нека да кажем, че имате
повече теми, отколкото трябва тези multicores.
Нали така?
Така че нека да кажем, че имаше 10 теми и сте имали само пет процесори.
Можете вид трябва да направя това нещо, където превключвате между ток
едно, че е ход, тъй като не може да работи на всички 10 наведнъж.
И това се нарича превключване на контекста.
И този термин всъщност има няколко различни контексти, но нека просто
мисля за него като за превключване между две нишки.
Това може да бъде доста скъпо, защото основно това, което трябва да направите вие ​​е
Трябва да спрем това, което правиш, да съхраните състояние, че играенето на конци, и
След това преминете към някъде другаде.
>> Същото прави и всеки вид видят мотивация защо теми и
процеси, могат да бъдат малко обемисти?
И си имам един въпрос?
OK.
Cool.
Някой да има някакви въпроси?
OK.
>> Така че, ако ние се върнем назад за секунда, има нещо като
наблюдение, което можем да направим за много уеб приложения.
И това е наистина, че много от тях всъщност не го прави много по-полезен
работят вътре на нишка.
Така е някой започна на P определя седем изобщо?
Значи искаш да се опише, може би някои от частите?
Работили ли сте за влизане или нещо подобно?
>> Публиката: Не.
>> KEVIN SCHMID: OK.
Няма нищо.
Извинете.
Но в основата си, в комплекта P, вие сте Ще се направи много нещо
заявки към база данни, за да получите някои информация от тази база данни.
И какъв е вашият код ще се прави, какво, че Apache процес или
че Apache нишка ще се прави докато той трябва да се свърже с
база данни е, че е нещо като ще бъде седи там и това ще бъде
в очакване на базата данни, за да отговори.
>> Сега, че не може да звучи като че голяма се справят, тъй като базата данни е на вашия
CS50 уред, нали?
Но има някаква мрежа латентност там, защото сега в интернет
сървъра трябва да издаде своето собствено искане да базата данни да комуникира с
база данни и след това да се получи, че информация обратно.
Така че сега това е като добре ме чакай, аз съм Ще отида да взема нещо от
база данни и след това да има много чакане става.
Това прави ли смисъл?
>> А за някои неща, че не е толкова лошо.
Ако просто трябва да, например, достъп до паметта, че не е като
ужасно I / O латентност.
И когато казвам, I / O латентност, което аз съм позовавайки се е като всяко нещо като
вход изход.
Но за да имате достъп до файла на диска, като ако исках да служа на статичен HTML
подаде, която беше на моята уеб страница или нещо такова, аз вид трябва да
спрете за малко, да се чете този файл в от диска, а след това в
този процес Чакам.
Аз не правя полезна работа.
>> Това не е вярно за всичко, но това е често срещана в приложения като P набор
седем и много приложения че не сте
всъщност прави много мислене.
И когато казвам мислене, искам да кажа като изчислителна работа.
Така изчислителна работа може да бъде нещо като, да речем, сте искали да
напиши уеб сървър, който току-що се изчислява тото броя на Фибоначи.
Това не звучи като особено забавно уеб сървър.
Като че ли не можеше да се очаква, че сайт, за да бъде следващия Facebook, но това е малко
вид изчислителна работа.
>> И можете да си представите, че с подмяна на някакъв друг вид интересно
изчислителна работа.
Да кажем, че пишеш нещо че изчислява степента на
разделение между двама души или нещо подобно.
Така че това е свързано с някакъв вид на изчисление, нали?
И дори тогава, за да се направи, че все още има да направи много за чакащите за може би
трябва да задава въпроси на база данни да се търси до който е приятел с който или
нещо подобно.
Така че там е, че вид понятие на изчислителна работа.
Това прави ли смисъл?
Дали някой има някакви въпроси?
>> О, и аз предполагам, че постави чат сървъри там защото чат сървъри са вид на
друг добър пример за това.
A чат сървър не разполага с да направи много мислене.
Тя просто трябва да изчака хората да изпращане на съобщения и след това, когато
те, да ги изпратите.
OK?
>> Така че просто да обобщим отново, Apache и подобни уеб сървър, като например, че една вилица
много теми и процеси, които може да бъде нещо като разточително.
Така че предполагам, въпросът, че може да дойде от която се ние трябва да имаме
множество нишки и процеси?
Какво става, ако имахме само една?
>> Така че нека вид нарисува картина на това, което това ще изглежда така.
Така че нека да се използва само една нишка.
OK?
Така че представете си само това с един конец.
>> Да предположим, че ние не са били наистина правиш че много по-полезно - и когато казвам
полезна, искам да кажа изчислителна работа -
в тези множество нишки преди.
Така че нека вид консолидира всичко в един конец.
И какво от това, ако имахме една нишка, която вид само обикаля в течение и
постоянно проверки направиха нещо Новият случват.
Така например, нещо ново се е случило би могло да означава, че има нещо обратно от
базата данни, или някой изпратен ми направи ново искане HTTP.
Така че тези, които са вид събития това да се случи, нали?
>> И тогава какво мога да направя, когато тези нови нещата да се случват, е в същата тази тема
на изпълнение, тази единствена нишка от изпълнение, мога да се обадя на някои код, който
ще се справиш с това специално нещо.
Така например, ако имам нещо обратно от базата данни, мога да тичам ми
малка изчислителна част от него, че всъщност само подготвя нещо, което да
изпрати обратно на потребителя.
Същото прави този вид има смисъл?
>> Но това, което наистина са на последици от това?
Нали така?
Защото съм писал много код, който -
и аз съм просто ще скочи напред в слайдовете, ако това е ОК.
Така че, ако нямате нищо против, аз съм просто Ще се върнем малко назад.
Така че този вид на нещо, което е нарича контур събитие.
OK?
И това е вид от основния регламент, Идеята зад Node.js.
>> Така че това, което е наистина Node.js правиш като уеб сървъра е, че има една-единствена нишка
това е основно става наоколо в цикъл като по време на един вид при
качулката на Node.js, че е постоянно проверка, получихме нови неща?
И тогава тя ще върви товарачи че сте настроили.
Но един добър въпрос да се зададе, е, как можем да направим това да се случи
със съществуващи неща?
>> Така че сложих една линия на C код тук основно изглежда като че ли е отваряне на
подаде, нали?
I Тя просто излезе с албум.
Така че аз трябваше да я отворите нов файл.
Така че начина, по който нашият C код за работа -
и аз предполагам, че причината, поради която избрахме беше файлове защото това е вид на степента
на I / O работата, която сме направили в C в чувство, че има вход изход.
Така че ние наричаме този код, който прави това, е отворен.
И след това на следващия ред на нашата програма, ние вече могат да работят с ф.
>> Така че това ще бъде един пример за нещо, това е като синхронна или
блокиране, защото по този на първа линия там чакаме, докато ние
получите файла отворен.
Така че, на втора линия, ние знаем, че ние може да работи с F, но това означава, че
че втората линия не може да не е бягал докато първата линия е направено.
Това прави ли смисъл?
>> Така че това би било лошо да се сложи в манипулатор на събитие.
И причината за това е, че този вид чака, нали?
Така че това ще ни върне обратно за едно и също нещо.
И сега нямаше дори да има полза на множество нишки или
процеси, защото имаме една нишка в Node.js.
Това прави ли смисъл на всички?
>> ПУБЛИКАТА: Изчакайте.
Така че това, което е замяната?
>> KEVIN SCHMID: О, така че да.
Така че аз отивам да се стигне до замяната.
OK.
И какво от това, ако имахме нещо което изглеждаше като този?
И какво, ако сега редактира F отвори малко?
Така че аз съм преминаване в същата два аргумента, както преди.
Аз все още обичам новата песен че тя излезе с.
Но аз съм минаваща трето нещо, което е тази променлива, наречена код.
>> Но какво е всъщност код в този контекст?
Дали е като обикновен променлива C?
Това е функция, нали?
И това може да е малко странно, защото Аз всъщност съм като сега се премине
функционира в друга функция.
>> Така че няколко неща, за да обърнат внимание за това.
One, аз не съм всъщност се обадите функцията код.
Така че не виждам код с оставяли Paren, нали скоба.
Аз съм просто преминава в код.
И в C, какво всъщност ще направи е ми даде показалеца, че действителната
код, а след това може да го стартирате.
Но просто мисля за него като сте преминаване на кода да се изпълнява, когато
този файл е отворен.
>> Но какво означава това е, че сега останалата част от моята програма, която може да направи
други неща, може да продължи да прави други неща, докато ние, всъщност не чакам, но
Просто трябва в задната част на главите ни, че когато този файл е отворен, бягай, че
код на върха.
Това прави ли смисъл?
>> И сега идеята зад Node.js е, че кода в правя неща с F
част трябва да бъде доста кратък и прост и ясно, а не наистина да бъде
много изчислително интензивни.
Тя може да се наложи да се отвори друг файл, но че трябва да бъде доста бързо
тъй като тя трябва само да кажа направя друг е отворите и след това да наричаме това друг код.
>> Така, само за да бъде напълно ясно, Ф отворите, който прави нов Katy Perry песента
Готово mp3, че това ще се доста много се върне веднага.
И тогава ние можем просто да продължим да правим други неща, защото всичко, което сега е
открита покана ли се каже в общи линии основното е отворен код отвори този файл
и когато сте готови, отварянето на тази подаде или когато си го върне,
след това да изпълните този код.
Но това всъщност не тече този код.
И трябваше въпрос?
>> ПУБЛИКАТА: Можете също намекна за няколко пъти, че добавянето на изчисления
интензивен код вид прекъсне [Недоловим] задвижва система.
[Недоловим]?
>> KEVIN SCHMID: Това е чудесен въпрос.
Така че аз всъщност имам един пример за това как бихте могли да се интегрират изчислителни
интензивен код в малко.
Така че, когато стигнем до примери на код, Ще бъдат сигурни, да дръпнеш една.
Това ли е ОК?
Благодаря.
>> Какво е вашето име?
>> ПУБЛИКАТА: Аарон.
>> KEVIN SCHMID: Aaron води до много Добър въпрос, което е, че ако имах
някои изчисления интензивно код в нещата с е част, а останалата част се направи
моята програма не може да работи и не може да слушате за нови искания или нищо, докато всички
това нещо е свършено.
Така че, ако аз пиша код Node като цяло освен ако не направим нещо, че аз ще
да предложи по-късно, когато се вгледаме в кодови примери, аз трябва да бъдете сигурни, че
моя код не връзвам това събитие контур.
Това прави ли смисъл?
OK.
Cool.
>> Така Node.js предлага тази рамка, която може да се изгради това събитие задвижване
сървъри с.
Така че тя има този вид на асинхронен без блокиране на I / O библиотеки, докато
стандартните C библиотеки, че сме били работа с, като ако просто
ги използват по същия начин, че сме ги използвате с F се отваря и
неща, тези, които се блокира, защото всъщност трябва да се изчака
този файл да се отвори.
>> Но Node.js дава, че и да го основно връзва в V8 на Google
JavaScript двигател, който е причината че Chrome е толкова бързо при преработката
JavaScript защото има този V8 двигател.
Така че аз знам, че звучи като един от тези, WWDC разработчик конференции нещо
където те просто хвърлят един куп на писмо номер неща за процесори
и да кажа това е толкова готино.
Но това е готино, че те направиха това, защото JavaScript -
или може би, ако не сте запознати с JavaScript, защото все още не сме имали
лекциите на него -
но JavaScript е интерпретиран език.
>> И това е важен момент също.
Така че това е важно за нашия уеб сървъри, за да бъде бързо, нали?
И ако ние бяхме само с тичане JavaScript код, който се тълкува само с
някакъв стар интерпретатор може да е бавен.
Така възлите ползи от като тази супер бързо V8 преводач.
И аз не знам дали те го нарекли защото V8 шамар в челото
нещо, но OK.
>> Така че аз съм подготвен някои примери На този URL.
След семинара, аз съм нещо като ще говорим за това как можете да получите комплект Node
нагоре, но за сега, аз просто някак искам да преминете през някои код примери.
Така че, ако искате да следват заедно, всички изходен код е достъпен тук.
OK?
>> Така че аз ще напусна този URL за малко.
И тогава аз съм просто ще превключите в терминала.
Всички ли са добре с този URL?
Така че аз отивам за превключване на моя терминал тук.
>> Така че тук е кодът, който се Имам за днес.
Защо да не започнем с simpler.js файл?
Другото нещо е, че всичко това код ще бъде написана на
JavaScript, които вие може или може да не е запознат с.
Предполагам, че някои неща е, че много на JavaScript код е вид
синтаксис и структура е много подобна на C, за да можете да вид го вземете като
отидеш заедно.
Опитах се да пиша много на започвайки код за това по начин, който е
подобни на С, така че да е малко по-разбираемо.
Но докато напредваме, аз ще бъда демонстрира някои от допълнителните
характеристики на JavaScript, че са нещо страхотно.
>> Но нека да разгледаме тази извадка програма.
Предполагам, че всичко е отрязан там.
Отивам да се определи, че истинското бързо, ако това е ОК, или не.
Аз не знам какво ще правя.
Това ли е малко по-добре?
Можеш ли да видиш вар и такива неща?
OK.
>> Така че първата линия е като JavaScript версия на променлива
декларация.
Така че просто за да подчертае това, което би тази изглежда като в C. Така че, това е точно като
ми казваше индекс е равен на три или нещо подобно.
Така че аз не уточни вида.
JavaScript наистина има видове, но това е много динамично въвели в природата, така че
не предоставя каквато и да е вид върху него.
Така че просто трябва VAR.
Това е като променлива.
OK?
>> И аз ще се обадя на тази променлива HTTP.
И от дясната ми страна ръка, имам израз, който искам да поставя в HTTP.
И това казва изискват HTTP.
Така че това е нещо подобно да се включи.
Това е малко по-мощен, отколкото като включва в смисъл, че включва
просто да копирате и поставите заглавката файл за прототипи на функции или
независимо с определенията за тип.
Но изисква всъщност ще да ни кода.
>> Така че можете да мислите за него като вносител някакъв код.
Така че някъде в модула Node.js система или каквото и да, те имат всичко това
HTTP сървър код, така че аз съм просто изтеглянето му за собствената ми
лична употреба в тази програма.
OK?
>> Така че след това имам тази функция че аз съм писал.
И забележи, че не е трябвало да се уточни вида връщане или вида на
аргументи отново.
Така вид хлабав въвели в този вид чувство.
Две аргументи, които предприема по, на искането и отговора.
Така че това е концептуално нещо като познат от картината, която имахме
на екрана, преди защото ние се получи това искане, което ние
има от потребителя.
И тогава ще имаме отговор, че можем да пишем неща, за да.
>> Така че, на първа линия на това не res.writeHead 200 и след това
тип съдържание текст обикновен.
Така че нека да сглобя този апарт малко.
Така че нека просто се съсредоточи върху res.write за малко.
Така запис е в основата, и пишат на главата, са само начини за сортиране на напишеш
неща за отговора.
OK?
Така че пиша главата, ако някой си спомня, от HTTP лекцията, мислиш ли, момчета
помня заглавията в началото на нещо, на HTTP?
Така че, защо да не мога просто демо хедъри бързо.
Ще бъде ли полезно?
Или трябва да просто нещо -
OK.
Разбира се.
>> Така че, когато вашия браузър отива в google.com или нещо подобно,
всъщност има малко повече -
това е като една тайна -
там е като малко повече информация който идва през тръбата от само
малката търсенето и всичко.
Така че, за да ви покажа това, аз ще съм да използвате програма, наречена Curl.
OK?
Така че това е нещо, което може да се движи с вашия Mac OSX командния ред или в
уред или нещо такова.
И така, ако аз Curl HTTP google.com, Отивам да видя HTML.
И това е, в справедливост, само HTML, че нещо не Ви каже да
пренасочи към WWW ако вашият браузър не автоматично се справят с
пренасочване.
>> Така че това е само HTML, но аз ще да добавите към Curl това тире I флаг.
OK?
И това се случва, за да се покаже ми заглавията.
Това е също така информация, която идва чрез когато получа този отговор.
OK?
>> Така че най-отгоре, ще видите този HTTP 301 се движи постоянно.
И това е нещо важно, защото това се отнася до кода на състоянието.
Така че тук 301 е кода на състоянието, който е по същество само цяло число
че казва на браузъра или който е четете това, ако се преструвам, че
ти си браузър и вие виждате това, в общи линии сега, ако се вгледате в
че и вие виждате 301, знаеш, че има да направя нещо специално въз основа на
301, или нещо специално се е случило въз основа на 301.
Така се казва преместена за постоянно.
>> И след това, общо взето, ние имаме куп двойки ключови стойности.
Така получаваме местоположението е www.google.com.
И тогава някак всичко това други неща, но в общи линии, какво е местоположението
поговорка е най-новото място е в www.google.com.
Така че сега, ако отидете на google.com, ще вид видите вида на браузъра на мигане
за секунда и след това ви пренасочи връщам към www.google.com.
Така отговори могат да съдържат тези заглавки.
>> И няколко неща, за да посоча.
Така че нека да кажем, че всъщност са били успешно в посещение на уеб страница.
Така че позволете ми да отида до -
това, което е един добър сайт?
Аз съм зле на мислене на добро уебсайтове на място.
>> ПУБЛИКАТА: Wikipedia.
>> KEVIN SCHMID: OK.
Нека да направим Wikipedia.
Така че тук съм бил преместен.
О, чакайте.
Аз ли бях?
Да, аз бях.
OK.
Така че аз трябва да направя WWW.
Така че аз ще направя WWW.
И както можете да видите, тук всичко е на HTML че браузърът ще обработва
за Wikipedia.
>> Но ако продължавате да превъртате до тук, това, което ще видите в горната част -
уау, има много HTML в Уикипедия -
но това, което мога да видя най-отгоре тук е този код 200 статус, за разлика от
301, които видях по-рано.
И забележи, че тя е хубава приятелски OK в непосредствена близост до него.
Така че това е като добър код статут.
>> Погледнете ли това, че 200 броя познато?
Да, защото, когато аз направих simpler.js, Аз написах 200 там.
Така че това е в общи линии казва, кажете на браузър или който се опитва да стигне до
това, че те са били успешни.
Или, че нещо като ние са били успешни също.
>> И там е този вид на специален синтаксис в Javascript за обявяване на
карта на тези клавиши като тип съдържание и тези стойности като текст обикновен.
Така че, ако се вгледате в отговор, че ние се върнах от Wikipedia и преди, -
Аз ще се опитам да превъртите , а малко по-бързо -
имате тези клавиши като на сървъра и тези стойности Apache.
Така че имаш ключове и стойности.
И вие можете да укажете това в Node какво да изпрати обратно.
>> Така че това всъщност е вид, в някои начини, и в някои отношения, това не е
наистина, но това е малко по-ниско ниво от кода на PHP, че може да сте
писане за P определя седем защото PHP и Apache вид се грижи за някои
от тези неща за вас.
В PHP, можете да отмените по подразбиране поведение, като пишете вашите собствени заглавки.
Но за целите на това, ние се да пишат нашите собствени заглавки.
>> Същото прави и тази линия да има смисъл да всички, линията на запис на главата?
OK.
Awesome.
>> Така че след това, което аз правя, е да се сложи край на отговор като казва здравей свят.
OK.
Но това е само една функция наречена искане манипулатор.
Така че сега аз всъщност трябва да направя вид нещо с тази функция, нали?
>> Така че тук това, което правя, е да има тази линия, която прави VAR сървър е равен
HTTP.create сървър, а след това премине в по заявките.
Така че това е един вид на възела начин за създаване на сървър.
И забележи, че аз съм минаваща в заявките.
Така че това се казва createServer функция, която аз искам да ми направи
сървъра, и когато този сървър получава отговор, имам нужда от теб, за да наричаме това
заявките функция.
OK?
>> Така че тази линия почти завършва веднага.
Така сървъра линия VAR е направено право След като направите това доста много.
Искам да кажа, че трябва да се създаде някаква вътрешна състояние да знаете, че вие ​​ще трябва да
наричаме това искане манипулатор функция, но това няма да седи там и
например има потребителят изпраща ми още един поискване?
Дали потребителят ме изпрати искане все още?
Така че това не блокира.
OK?
>> Така че това, което ще направите, тя е в основата сега съхранява указател към този код,
това искане манипулатор функция, и след това ще тече този код, когато някой
отправя искане.
И след това, което правим server.listen.
>> В 1337 има доста произволно.
Нямах никаква конкретна причина за бране на този номер.
Това беше напълно случаен принцип.
Но това просто уточнява пристанището.
Така че повечето уеб сървъри, които ще видите, че те използва порт 80, защото това е вид
подобно на конвенцията.
Така че, ако аз отида в нещо подобно, Аз не знам, Wikipedia.org,
и сложих на дебелото черво 8 -
О, уау, не можеш да видиш това.
Съжалявам.
Но ако го направя Wikipedia -
Аз ще го напиша тук, просто така, че това е ясно на фотоапарата.
Но ако аз се възползвам от тази в браузъра с двоеточие 80, в който се посочва отидете
Wikipedia.org на порт 80.
Така че това е като начина, по който Съединените щати имат множество портове, като, където можете да превозва
неща на вид.
Така че това е като да отидете на този конкретен пусне на този сървър.
OK.
>> Така че аз просто избрах 1337.
Има цял набор от числа , които можете да вземете.
Това не беше съвсем специално.
>> Но това, което аз ще направя сега е аз отивам да тичам Node.
Нека всъщност влиза, че няколко линии вертикално, така че да можете да го видите.
Отивам да направя Node, и аз съм ще избяга simpler.js.
И ние ще говорим за това как да получите Node създаден през малко.
Но сега това е просто пуснете сървъра.
>> Така че едно нещо, което може да опитате, които не могат да бъде толкова вълнуващо е, че ние може действително
опитайте да получите достъп до нея в Curl.
Така че мога да направя Curl, и ми машина е локалния хост.
Вие също така ще видите това писмено като това понякога.
Локалния хост и 127.0.0.1 са вид на като вашия домашен компютър.
Така че това е като да говориш собствения си компютър.
OK.
>> И след това мога да кажа, 1337.
Така че, ако аз тичам този ред на код, тя казва здравей свят.
И ако исках да видя тези неща, че имаше вид текстово съдържание обикновена или
каквото и да, аз дори може да сложи това тук.
И забележи, че го казва OK.
И аз имам обикновен текст.
И тогава там е нещо от всичко това друг неща, които Node ще добави в
там за мен.
Това не е супер важно.
>> Искам да кажа, че има някаква техническа аспекти на които са вид
на хладно да говоря за това, но само за да покаже вас, аз също имат правомощия да
промените тези наоколо.
Така че аз може просто да добавите един куп на подобни неща.
И то сега, ако аз гледам в моята изход, ще бъде това.
Така че тези заглавки означават някои неща за браузъри и такива неща.
>> И заглавията може основно казват браузър как да отговори на нещо.
Ако някога сте чували за бисквитки и преди, или ако някога сте били раздразнени
от уеб страница за създаване бисквитки, или е включено бисквитка блок или
нещо подобно.
Всъщност можете да установите бисквитки в тези заглавки.
Така казват на браузъра как да поведение в някои случаи.
OK.
>> Така че това е simpler.js.
Дали някой има някакви въпроси на този файл с изходен код?
OK.
Cool.
>> Така че нека да премахнете R от тази и погледнете simple.js.
Така че това е доста много една и съща програма.
Току-що го написах малко по-различно защото исках да сортирате маркиране:
някои функции на JavaScript.
>> Така че забележите, че по заявките функция е напълно изчезнал.
О да, имахте ли един въпрос?
>> Публика: Да, аргументите които се предават, че
функция, какви са те?
>> KEVIN SCHMID: Така че тези, които са JavaScript обекти.
В документацията Node.js, тя основно се казва, какви методи са
разположение на тях.
Ние просто се случи да имат достъп до този метод се нарича запис на главата и край
и подобни неща.
Но има и един куп повече методи.
>> И за пример, като един от тях по-специално на REC, можете да направите
нещо като rec.method която ще да ви кажа дали това е HTTP получите или
HTTP публикувайте своите искания и такива неща.
Така че има всички видове от различни свойства, но те са и двете
JavaScript обекти, и те просто трябва функции, свързани с тях, които можете
могат да пишат неща, за да.
OK?
>> Така че забележите, че заявките е напълно изчезнал.
Но кода, който имах в заявка манипулатор е все още там.
Аз все още имам тази res.writeHead и аз все още имам тази res.end.
И какво е това е пример за в JavaScript е тази идея на
анонимна функция.
и анонимен е като подходящо име за него, защото той буквално не
да има име.
Няма по искане функция манипулатор там.
>> Няма име, но тя все още е като аргумент.
Така че аз все още имам РИК и ВЕИ.
И аз все още имам кода.
Това е съвършено глоба JavaScript код.
Така че мога да декларира функция без изрично ще му даде име.
Това е малко объркващо в началото.
Има някои полезни неща, като , които можете да правите с
тези анонимни функции.
Дали някой има някакви въпроси за тази, или това е ОК, само за да, за сега,
нещо просто приемам, че ще направи същото нещо?
Да?
>> ПУБЛИКАТА: първо са функции клас в JavaScript?
>> KEVIN SCHMID: Те са първи клас в JavaScript.
И просто знам, че тези понятия на преминаване в анонимна функция като
това се прилага за JavaScript, които можете може да пише в окончателния си проект за
уеб браузъра също.
Така например, в JavaScript в браузъра си, тя също е малко събитие
задвижва в смисъл, че това, което ще имам е, когато потребителят кликне върху този
бутон, искам да изпълня този код.
>> Така че това е един и същи вид на идеите на от страна на клиента, когато едно кликване на мишката или те
мишката върху някои изображения на вашия уеб страница, стартирайте този код.
Това може да важи за сървъри.
Така че това е нещо като вълнуващите причина JavaScript е наистина
подходящи или някои хора си мислят, че това е подходящ език за този вид
шофьор събитие на сървъра, защото имате тези анонимни функции.
Имате цялата идея на този асинхронен код.
OK.
Някой да има някакви въпроси?
>> OK.
Така че това е simple.js.
Така че нека да разгледаме един по- или още няколко.
Така че това е sleep.js.
Така е всеки, запознат с функцията сън C?
От може би един от най-ранните лекциите или нещо подобно?
>> Така че в общи линии може да премине в Мисля, че брой секунди или ако използвате U
спя няколко милисекунди или наносекунди.
И в общи линии програмата просто ще спре се кандидатира за този период от време.
Нали така?
И тогава той ще се събуди и в крайна сметка тогава той просто ще продължат да вървят
програмата.
>> Така че този сървър вид дава впечатлението за спане.
Така че забележите, че имаме едни и същи res.writeHead 200 с и заглавката
преди, но след това ние се обаждате този функция, наречена набор таймаут.
Задайте таймаут също е на разположение в вашия уеб браузър Google Chrome
или Safari или нещо такова.
И в общи линии това, което го прави тук е, че е като във функция.
Забележете, отново, това е анонимна функция.
Така че това е нещо готино, защото сме използване на анонимни функции в рамките на един
анонимна функция, която може да е малко странно.
>> Но това е като тази функция, която е основно казва - и на начина, по който
произведения е в 5000 милисекунди, искам да изпълнява тази функция, която
просто завършва отговора и пише хей.
Така че това създава впечатление за подобно спи, но начинът това всъщност
работи е, че ние ще тече през тази линия много бързо.
Ние просто пиша нещо.
И тогава ние също ще преминават през тази линия много бързо.
Така че ние не сме всъщност ще да се изчака пет секунди.
Ние просто ще избяга този код незабавно.
>> И тогава там е, отново, този малък събитие контур, който вече има това нещо
регистри, които по същество е просто постоянно обикаля в кръг
и гледайки часовника в един-единствен Нишки и поговорка, има пет секунда
Все още премина?
И тогава, когато тя вижда, че втората ръка се е преместило около пет секунди или
каквото и да, тогава той се събужда и казва: ох, какво трябва да направя?
О, аз трябва да изпълня този код.
И след това ще тичам res.end хей.
>> Така че отново, ние никога не чакаме тук.
Така че това не е, че този код във вътрешността на тази функция ще отнеме пет
секунди, за да се движат.
Този код ще се изпълнява до голяма степен мигновено, най-малко по отношение на
петте секундите, които ние говорим за по-рано, преди.
>> Така, само за да покаже това в действие, Мога да го направя Node.sleep.js.
И направих аз обърквам нещо?
Вероятно.
Извинете.
Нека да видим какво можем да направим, за да се определи това.
OK.
Така че определено използвате Node.js.
Аз съм просто се шегувам.
OK.
Само една секунда.
OK.
Аз знам какво е то.
>> Така че въпросът е, че в другия ми раздела тук, бягах Node вече на
същия адрес, 1337.
Така че грешката, че това хвърли, ако се вгледаме при това реално тясно, е адрес в
използвате, EADDRINUSE.
Така че аз вече бях с 1337 тук.
Така че, ако заключа това разстояние, а след това аз сега опитайте се да стартирате тази, надявам се, всичко
ще се оправи.
OK.
Така че може да има само едно нещо, сортиране на слушане на порт наведнъж.
Друго решение би било за мен просто да редактирате тази програма и да направи
тя да бъде като 1338 или нещо така.
>> Но сега сън работи.
Така че нека действително да я изпробвате в браузър този път, защото това е
малко скучен, за да видите това в терминал.
Така че аз съм просто ще отиде в тази 127 адрес отново в 1337.
И ако можете да го видите -
Аз не знам, ако можете - но ми браузъра, като един много, много дълъг
време, за да се зареди или около пет секунди.
>> И тогава, след това, той най-накрая приключваща на отговора.
И вие не може да го види, защото това нещо се премества върху малко, но ако направя
това е малко по-малък, можете може да видите, че казва, хей.
Така че аз имам Хей, но след пет секунди.
И това може да е малко по-чисти, за да видите тук на терминала, така че аз съм
ще направим -
нека да направим тук -
нека да направим Curl този адрес отново с 1337.
И аз просто вид трябва да седи тук в продължение на пет секунди.
Но забележете, че сървърът може да приеме нови отговори.
Така че това отпечатва хей.
>> И за това демо, основно това, което Мога да го направя в този друг раздел -
така че нека да кажем, че правим това в друг раздел, Отивам да направя Curl и същото
нещо отново.
И аз ще се опитам да риташ тези момчета изключва в същото време.
Така че аз ще направя това, и аз съм няма да се състезава повече тук, и аз съм
няма да го направя отново.
>> И нека да го направи, така че да може да види и двете от тях.
Това една отпечатана хей и че един печатни хей целия път на -
нека да направим този експеримент отново.
Всъщност, нека използваме тази трик, ако това е ОК.
>> Така че аз ще използвам нещо черупка, че ми позволява да основно тичам две копия
на тази програма в паралел.
Така ще стартирате първата програма и втората програма в паралел.
Така че сега, ако натиснете Enter, то се случва да направи това искане почти
мигновено в същото време.
Така че нека да даде този шанс.
>> Така че сега забележите пише два процеса.
И ако сте любопитни, че 27 000 номер е основно ID процес.
И след това забележите, те отпечатват хей в същото време.
Тя не беше като ние трябваше да чакаме пет секунди за един и тогава, след това,
пет секунди по-късно получи втори.
Така че това е вид, в някои отношения, това е не наистина доказателство, но това е
интуитивен доказателства, че това не е просто като чака пет секунди и блокиране
цялата тема.
OK готино.
>> Така Аарон зададе въпрос по-рано, че е, добре какво ще стане ако ние направим нещо -
Да?
>> ПУБЛИКАТА: Изчакайте.
Как е, че се различава от ФОРМАТ буфер, все пак?
Не тя автоматично прави това?
Защо ни е нужно да се притеснявате за него?
>> KEVIN SCHMID: О, може ли се каже, че по едно и също време?
>> ПУБЛИКАТА: не харесва ФОРМАТ буфер правя точно същото нещо?
>> KEVIN SCHMID: буфер ФОРМАТ?
>> Публика: Да.
OK.
Не беше в един от тестовете са били говорим за това как ако щракнете с десния ФОРМАТ
нещо и след това да го спрете един второ, и след това го има контур десет
пъти, тя ще Изчакайте десет секунди и се тогава ФОРМАТ всичко заедно?
>> KEVIN SCHMID: О, OK.
>> ПУБЛИКАТА: Е то прави същото нещо, след това в този случай?
>> KEVIN SCHMID: Така че въпросът е основно в една от бившите викторини
или нещо подобно, не е въпрос, който в общи линии, ако се каже, печат е 10
неща, по време и след това спах като в процеса на отпечатване на тези навън,
в края по някаква причина, то би просто зареже тези на всички, на екрана.
Така че има вид на две различни концепции тук.
>> Така че предполагам, едно нещо е, че в този случай, че си имаме работа с два различни
сортиране на хората питат сървъра за неща, по едно и също време.
И причината, че ФОРМАТ вид изчаква така и всичко сметища навън
наведнъж е по-свързани с как ФОРМАТ вид -
така че начин ФОРМАТ е всъщност приложени е то основно трябва да
говори с операционната система, за да напишете тези неща на конзолата.
Така че не искам да правя всичко това неща веднага, когато ти казват ФОРМАТ
някои низ, защото това би могло да се скъпи, ако трябва да
прави това всеки път.
>> Така че, ако вие направите ФОРМАТ хей, вашата програма не може в действителност да отпечатате, че
веднага към конзолата.
Тя може да се каже, добре, аз го е написал.
И тогава вид те чакам да се даде го прави по-малко, преди всъщност
да я пиша, за да конзолата.
>> Така че причината, че това е така -
и това е вид на несвързани на сън -
е, че сънят е нещо просто инжектира там да се демонстрира
факта, че не пише то синхронно.
Но причината за това е просто изпълнение, така че да не се налага да
направи, че много контакти с операционната система.
>> Но тук, това което наистина се опитва да направи с този сън нещо е просто шоу
че когато имаме двама души, които посещават този сайт, тя няма да сложи
ги в линия, където тя ще каже Аз трябва да ви помогне, и след това, когато съм
напълно завършен ви помага след това пет секунди, а след това аз ще
преминете към следващия човек.
Така че искането на първия човек не прави връзвам това събитие контур
ако това има смисъл.
>> Но тук е всъщност пример на нещо, което ще вържеш
до контура на събитието.
Така че тук е ужасна функция, за да изчисли тото Фибоначи.
Това е буквално най-лошия начин, по който може да изчисли тото номера на Фибоначи.
И това е всъщност само да потвърдя когато това дойде от,
всъщност има -
Искам да кажа, можете да се опитате да отида да го намерите - но там е като един много дълъг блог
пост, че някой е написал.
Това е като един от онези Reddit неща.
Но някой критикува Node.js, и те са използвали това като пример.
Така че аз вид Исках просто да ви покажа две различни гледни точки, само за да получат
общо разбиране на понятията зад тези две неща.
>> Но това е избрано като просто ужасна, ужасно неефективна изчислително
интензивен начин да се изчисли тото число на Фибоначи.
Така че просто като страничен бележка, защо е това ужасно като по един начин?
Да?
>> Публика: Да речем, че започнем с 1000.
1000 се разделя на 999 и 998.
Всяка от това се разделя на две неща.
>> KEVIN SCHMID: Точно така.
>> ПУБЛИКАТА: All пътя надолу.
>> KEVIN SCHMID: Точно така.
Така че просто да се повтаря за камерата, ако аз обадите на ПИБ като 1000 или нещо
така, тя очевидно не е по-малко от или равна на едно, така че аз отивам да
отида на друго дело, а след това аз ще да се обадя на ПИБ 999 плюс 998 ПИБ.
И тогава почти всички от които работа, която ПИБ 999 прави, е
вид на това ниво.
Ако отидете надолу, това е още по-излишен от това, но ако просто
мисля изчислителна ПИБ получава 998 ни доста близо до ПИБ 999.
Така че ние наистина трябва да е малко по- умен за това как ние вид на повторно използване
тези, но ние не сме повторно използване тези неща изобщо.
Така че можете да си представите тази гигантска, гигантско дърво, което е просто ужасно.
>> Но така или иначе, OK.
Така че това е измислица.
Той просто отнема известно време да се изпълнява.
Да?
>> ПУБЛИКАТА: [недоловим].
>> KEVIN SCHMID: О, може ли повторя въпроса?
>> ПУБЛИКАТА: [недоловим].
>> KEVIN SCHMID: О, така че това е само код че ще бъде нещо като върху
от страна на сървъра.
Така че това не се случва, за да бъде намерен в браузъра или нещо подобно.
Това е основно това, което имаме, е, че когато потребителят тук доста много марки
тяхно искане отново, когато нещо отправят искане, ние ще да се обадя
тази функция на сървъра страна.
И тогава ние ще получите резултата обратно от обажда тази функция.
И тогава ние просто ще отпечата това на потребителя.
Така потребителят не наистина се справят с тази функция прекалено много.
>> Това ли беше въпросът?
Това прави ли смисъл?
OK.
Cool.
>> Така че отново, ние правим всичко това res.writeHead нещо, където ние разпечатате
заглавната си част.
И тогава аз се сложи край на отговор чрез правене магическото число е ПИБ 45.
Така че нека просто стартирате този сървър.
Така че аз ще направя fib.js. възлите
Така че сега ми ПИБ сървър е стартиран.
>> И след това тук, аз отивам да направите едно от тези.
OK?
Така че аз съм просто ще кажа, Curl.
Така че това ще отнеме малко повече време, но да се надяваме скоро ще завърши и
тя ще отпечатва, че 45-та Фибоначи номер.
>> ПУБЛИКАТА: [недоловим].
>> KEVIN SCHMID: тя трябва да да се свърши много скоро.
Така че тя трябва да вземе 5-6 секунди.
Аз не знам, че е просто V8 е супер бързо, но във всеки случай, това е
много кратък пример и нарочно грубоват на нетривиални
изчисление.
Така че след известно време, тя не се получи това.
>> Но сега, какво ще стане ако го направя, че същия вид експеримент, както и преди, когато правя
две искания в същото време?
Така че тук аз отивам на Curl на този адрес, и аз отивам
да се направи друг Curl.
И не забравяйте, когато ние направихме това за спя на сървъра, когато ние основно това имаше
след пет секунди те доста много двамата излязоха на задния десен
по същото време.
Така че това не е особено вързана.
>> Но нека да опитаме сега.
ОК, така че ние имаме нашите два процеса.
Не забравяйте, това са документи за самоличност на процеса.
Това ще бъде малко неловко, докато ние се забави.
Така че нека просто да остана тук и да чакам.
>> Така че един от тях трябва да идват обратно, след като -
ОК, така че се е върнал.
Но тогава защо не го направи на втора един се върна, просто все още?
Да?
>> ПУБЛИКАТА: Сървърът не може да направи нищо , докато тя е изчислителна че голям брой.
>> KEVIN SCHMID: Точно така.
Така че отговорът е само, че сървърът Наистина не мога да направя нищо, докато
това е изчислителна че числото на Фибоначи.
Така че сега аз просто имам две мои неща обратно.
Но аз предполагам, че просто да се мисли за кода малко повече, как се работи
и всичко останало.
>> Така че тази функция тук е кодът, който Казах на този сървър да работи, когато го
получава ново входящо искане.
Така че това е просто ще избяга през тази целия код, а след това ще отидем
обратно към контура на събитието и след това да продължите проверка за нови събития.
Така че основно това, което сме се случва е сървъра
слушане за нови неща.
Първият човек пита за какво е 45.
В момента тече този код, за да го изчисли.
Този код отнема около пет до шест секунди, за да се движат.
Тогава можем да се върнем към контура на събитие и се проверява за нови искания.
>> Така че това е един пример за това как, ако има неща, които са така наречените Compute
обвързани, или да използвате много изчислителни не мощност, но като са
изчислително интензивни -
Предполагам, че едно нещо, което да се каже за това е че тази функция се справя напълно,
в по-голямата си част, доста полезна работа прав.
През цялото време, че обаждане функция е стартиран, той беше доста
много прекарва повечето от времето си само изчислителни номер, който тото Фибоначи.
>> Но имахме само една нишка да се справим.
В модела на Apache, когато двама души отправил искането, да получите ПИБ 45, ние
би трябвало да има две различни теми.
И тогава работата на операционната система щеше да е, или на ниво потребител
код, който управлява нишките, щеше да е да режа, че въз
CPU, или дори ако сте имали множество процесори, ги разпределя равномерно по процесори
така че и двамата са били покритие приблизително по едно и също време.
>> Така, само за да ви покажа как може да се оправи от - и това не е общо перфектно
решение, но някак това как можем да прави се върна тук и да направим
малко по-добре.
Така че това, което имаме тук е една програма, наречена Fib C. И това основно използва
още един от модулите на възлите се нарича Модулът Process Child.
Така че аз бях включен, че в горния вид от както аз ще направя един паунд включва
process.h дете или нещо такова.
Сега имам достъп до тази CP променлива , който притежава всички ми функционалност.
>> Така че сега, какво правя в този отговор манипулатор е Бягам тази програма
дот наклонена черта ПИБ 45.
Така че това, което съм направил - и аз съм просто ще да излязат от тази програма за
малко -
е аз съм написал програма C, че основно Изчислява
тото число на Фибоначи.
Така че тук е само една програма, аз съм писал в C, която изчислява това.
Мога да го компилирате, и мога да тичам то в командния ред.
И това ще се изчисли 45-то число на Фибоначи.
>> Така че забележите, че просто отнема доста много по-дълго.
Вероятно би могъл да използва тире 03 до него или нещо такова оптимизиране,
но аз просто направих като редовен настройки компилатор.
И това го отпечатва.
>> Но сега, аз какво вид правиш?
О, съжалявам, грешен файл.
Така че аз правя едно и също нещо с заглавието като преди.
Тогава аз правя това cp.exec.
И така, какво ще направи тя е е щеше да стартирате тази програма.
Но начина, по който това работи е, че това няма да се чака
тази програма да се завърши.
Тя просто основно се казва, изпълни тази програма.
Така че основно напишете това в командния ред вид.
>> И тогава, когато сте готови с го, стартирайте тази функция.
Така че сега ние вид се получи това Цялата възстановено нещо от
като ние не чакаме.
Дали този вид да има смисъл?
Да?
>> ПУБЛИКАТА: [недоловим]?
>> KEVIN SCHMID: Така че това действително ще отвори нов процес, за да го направя.
Така че това е всъщност, в някои отношения, зло, а не супер зло, но тя е
важно да се каже, че това е вид Връщам се, от една страна, на Apache
модел, при който правим теми и процеси за всяко искане или
процеси за всяка заявка.
Така че това е един вид аналогична на това, което прави Apache.
В някои случаи, той просто ще използва нов нишка, която е малко по-лек
тегло от един процес, но Apache може окажете разклоняване нов процес
което е един вид на това, което правим тук имплицитно чрез правене точка наклонена черта ПИБ 45.
>> И след това в този случай, ние вид понесат същите разходи на процеси.
Така че това е само едно нещо, което може да направи.
Но само за да се покаже този вид движение.
И този разговор е просто наистина, насочени към представянето на тези видове програми, като
начин да покаже различни гледни точки по как да проектирате сървъри като тази.
Така че това е в ход, и то сега, ако го направя това отново, аз имам две технологични документи за самоличност.
>> Нека просто да поговорим за неща, които да сочат навън.
Така че забележите, че те са постепенно.
Това е готино.
Защото това беше преди 27 122.
Но забележете сега, те се върнаха приблизително по едно и също време.
>> И сега, добър въпрос да попитам за защо бе, че делото е, чиято работа
е сега някак да се направят тези неща, вид играе честно с всеки
други, тези два случая на дот наклонена черта ПИБ 45, че аз се завтече
или че Ран Node?
Кой вид го прави справедливо, че те двамата се вид базирана тече в момента?
>> ПУБЛИКАТА: [недоловим].
>> KEVIN SCHMID: Да.
Така че основно, когато правя точка наклонена черта ПИБ 45 или нещо подобно, сега е
вид до операционната система, за да се справя по време на работа на тези програми.
И сега той може да ги планирате на различни процесори или
да ги планирате.
Тя може да разреже момента, в който един CPU го получава или че те ще получат
да се движат по един CPU.
Така че това е идеята зад това.
Това прави ли смисъл на всички?
Така че сега Node не е наистина играе участие в разпределянето на тези задачи.
OK.
>> Така че това е почти го за примери.
Аз просто исках да покажа още нещо защото много от това досега е
не напълно супер практично в някои случаи.
Мога да си представя, идващи у дома, след това говорим и нещо и да казва като,
ами аз вид излезе от тези приказки, че Мога да направя Фибоначи сървър за
последния ми проект.
Така че тук е просто нещо като още един пример че ще се надяваме да бъде -
Може би не, но може би - малко по- вид от значение за окончателните проекти и
мисли в перспектива за такива неща.
>> Така че това е chat.js.
Така че това е нещо като някаква проба от страна на сървъра код, който можете да използвате, за да
създаде малък сървър за чат като вие може да се види на
Facebook чат или каквото.
Така че аз не казвам, че това е като Facebook Чат, но това е вид
като добро - може би не е добре, но може би добър - изходен пункт за чат
сървър за вашия сайт за окончателен проект.
Така че нека да погледнем какво прави.
>> Така че ние сме все това специално нещо в горната част, това VAR SIO
равнява изисква Socket.IO.
Така че, това е друго нещо, което не е така всъщност идват в пакет с
Node, но можете да го инсталирате.
Това е модул Node.
Така че това е просто като някакъв разширение на Node.
>> SocketIO е всъщност наистина някак страхотно.
Това е една абстракция, че основно това, което тя прави е да е тя ви позволява да
имат този поток на комуникация между уеб
браузър и уеб сървър.
Така че по-голямата си част до момента, сме имали тези много набързо втора или две
второ комуникации между уеб браузъра и уеб сървъра.
Така че това е основно отидете на google.com, GET нещата, да го изпрати обратно, и след това
сме готови.
Ние никога не говорим отново, докато типове потребители в нещо друго.
>> Но какво Socket.IO и подобен вид неща - и SocketIO е всъщност един
от нещата, които се строят в системата като WebSocket което е нещо достъпно
като част от HTML5 -
, която ви позволява да получите този продължаващия диалог.
И това е много полезно в сървър за лафче вид на нещо, защото това е
нещо като постоянен диалог в някои отношения, защото, ако сте в чата
с някого, сега можете просто да изпратите съобщение за определяне на тръбата, и тогава
сървър може да изпратите съобщение на установяване на тръба към другия човек сте
чатите с.
И тогава може да има този обменя по този начин.
>> Така че това е нещо, което SocketIO е добро за.
Причината, поради която SocketIO използва WebSockets като едно нещо е, че в
Освен просто стари WebSockets, тя също прави някои трикове, за да основно
направи съвместим браузър.
Така браузъри като Internet Explorer за съжаление не поддържат WebSockets
с изваждането от кутията.
Така че той използва някакъв друг вид хладно чист неща с Adobe Flash, за да позволят
да има кръстосано браузър подкрепа.
Така че това е наистина полезно.
>> И всъщност, аз знам, че съм един вид тичане на време тук, но CS50
Обсъждане, виждали ли сте някога нещо като, аз не знам, празно, така и така е
отговорите на този пост или нещо така, че функция?
Това е SocketIO.
Така че, когато някой започва да пишете в обсъдят поле, за да направи реплика или
нещо, вашият браузър е това, което е. наречен в SocketIO излъчва някаква
събитие, което се казва, че някой е отговорите на този пост.
>> След това сървърът казва, OK, какво трябва да направя?
Е, сега аз трябва да кажа на тези други момчета , които са на CS50 Обсъждане търсите
На този пост, че някой да отговори.
Така че това е нещо, което е SocketIO добре за това продължаващо вид
поток на диалога.
OK.
>> Така че това, което имам тук - и ние сме просто ще игнорира масива връзки
за малко -
това, което аз правя, е да направя друг слуша.
Така че това е просто начина, по Socket.IO се казвайки нека слуша на този порт.
И тогава аз правя това при връзка.
Така че това е просто основно Socket IO е начин да се каже, когато получите
връзка с това, което искате да тече този код.
>> И забележи, че вместо да се налага REC и ВЕИ преминали там имам Socket.
И това Socket идея е основно това нещо, което можете да пишете и четете
от които има потребителя съобщения Вероятно.
А посланията, които ще изпратят може да мине през това Socket.
Това прави ли смисъл?
Така че това е това нещо продължава.
>> Така че това, което аз правя, е да се обадя Socket.emit.
И отделят отнема доста много два аргумента.
Първият аргумент е низ просто представляващ тип
нещо, което излъчва.
Така че за този случай, аз употреба този низ ново съобщение.
И това е само в общи линии казва, че вида на това нещо, което аз съм
изпращане, е ново съобщение.
Така че можете да слушате за специфични видове като ново съобщение или каквото
с помощта на точка.
>> Така че връзка и потребителското изпратен там, ако погледнете където ние наричаме точка на,
това са други низове, които представляват видове потребителски съобщения.
Така че това е в общи линии може да имате тази емитират един от тези видове съобщения, и
след това направете нещо в отговор на един от тези видове съобщения
>> Така че аз съм този, излъчващи ново съобщение.
Отиваме да се игнорира connections.push за секунда.
Но след това аз казвам, Socket.on потребител е изпратил.
Така че сега това е нещо като, когато потребителското ми изпраща съобщение, искам
можете да изпълните този код.
И забележи, че тази анонимна функция предприема в тази променлива
нарича данни, което е основно ще да има съобщение на потребителя.
>> Така че сега нека вид говори за масива връзки.
Така че това е предназначено за чат клиент където основно всички са вид в
същото чата.
Така че основно, това, което ние трябва да се запази около някакъв масив, който в общи линии
представя всички народи в чата някои начини, ако това има смисъл.
Нали така?
Защото ние трябва да знаем кои са тези момчета са за да можем да ги изпращате съобщения
че други хора да ни изпратите.
>> Така че това, което прави този код е, когато потребител изпраща съобщение - това е вида на
събитието -
отиваме да тече този код.
И това, което ние правим, е да преминете през този масив, който ние нарекохме връзки.
И почти за всяка връзка с изключение на едно, че е наше, това е
това, което казва, че този код, ще изпратим нова съобщение с прикрепен съобщение, че
информация.
>> Така че, ако забележите тук, това, което аз направих, когато потребителят всъщност прави нов
връзка е добавил съм с Метод JavaScript.push, това е
основно просто казвам като добавите че Socket като стойност в
ни връзки масив.
Така че сега, когато този код се изпълнява, тя ще изпрати неща за тези, специално
връзки.
Така че това може да бъде добра отправна точка за вземане на сървър за лафче
или нещо подобно.
>> И вида на готино нещо е, че код, който виждате тук за подобно на и
излъчват и подобни неща, че е същото вид на JavaScript код, който бихте
напишете в браузъра, за да си взаимодействат със сървъра.
Така че това е защо SocketIO е вид спретнато и полезна по този начин.
>> О, и още едно нещо наистина бързо.
Имаше един окончателен проект CS50 миналата година която основно се осъществява на чат
сървър в Node.js.
Мисля, че е Harvardchats.org но аз не съм -
OK.
Аз не съм сигурен какво е URL адреса, но Мога да изпратя, че навън след това.
Но това е нещо, което се охлади можете да правите с Node.js.
>> Така че се надявам, като цяло, вие момчета имат добро чувство за това, което е полезно Node.js
и как вие може би може да се приложи до окончателното вашия проект.
Аз ще изпрати още малко ресурси, заедно с това.
И ви благодаря, че дойдохте.
Благодаря.
>> [APPLAUSE]