Кевін Шмід: Прывітанне ўсім. Сардэчна запрашаем у CS50 семінара на Node.js. Мяне завуць Кевін. Я CS50 TF. І я накшталт як вельмі рады пра гэта семінары. Я думаю, Node.js вельмі выдатна. Я спадзяюся, што гэты семінар можа быць выкарыстаны як добры, я думаю, трамплін для некаторыя з вашых канчатковых праектаў, калі Вы зацікаўлены ў выкарыстанні нешта накшталт Node.js. Мы накшталт пачаць семінар прэч толькі што казалі пра крыху выгляд фону маштабаванасці перспектывы Node.js, а затым мы будзем рухацца да некаторых прыкладаў кода. І я буду мець код, пазначаны на сайце, і вы можаце паглядзець на код. І пасля семінара, я разбяруся размоў пра тое, як можна наладзіць Node.js на вашым кампутары. ОК. Так што давайце пачнем. Так што я думаю, я проста хачу пагаварыць пра вэб-серверы, на самай справе, у першую чаргу. І пачаць гэтую дыскусію, я у асноўным маюць схему, якая з'яўляецца ад падручнік для CS61, якія у асноўным паказвае ўзаемадзеянне паміж кліенцкім працэсам, як ваш вэб- браўзэр або як ваш кліент мэты або нешта накшталт гэтага, і вэб-сервер. Таму такога роду падобны на карціна, што вы бачылі ў лекцыі на Серада, дзе ў асноўным у нас ёсць некаторыя Працэс, як Google Chrome кліент. А потым першы крок з'яўляецца Кліент пасылае запыт. Так што можа быць нешта накшталт добра давайце наведаць, я не ведаю,, CS50.net. Так мы выдаем гэтую просьбу. І хто-небудзь успомніць назву пратакол, які вызначае, як, што Запыт павінен быць структураваны? Так. АЎДЫТОРЫЯ: [неразборліва]. Кевін Шмід: Цалкам дакладна. Так што гэта, як HTTP, ці не так? Таму ў асноўным спецыфікацыя для як , Што запыт павінен быць фактычна паклаў па-за, таму што ў канцы дня, што запыт на самай справе проста падабаецца Радок, у асноўным кажа, што я хачу гэтага. І спецыфікацыя таму што гэта HTTP. Дык вось, як пратакол. Такім чынам сервер атрымлівае што запыт. Дык вы, хлопцы, усталяваны вэб-сервер у CS50 прыбора. Гэта Apache. А на гэтым тыдні, калі вы працуеце над праблемай ўсталяваць сем, вы на самой справе будзеце працаваць з гэтай вэб-сервера. Такім чынам, сервер атрымлівае гэты запыт, і то ён павінен роду падрапаць яго галава і сказаць, як добра, што мне рабіць з гэтым? Так на аснове таго, што ён вырашае рабіць, то гэта, магчыма, прыйдзецца звязацца з нейкай рэсурсу. І гэты рэсурс можа быць шмат розных рэчаў. З аднаго боку, гэта можа быць проста як статычнага HTML файла. Дык гэта можа быць проста, як некаторыя HTML, што, як для Ваш асабісты сайт. Гэта можа быць статычны файл як лад або як у кіно, што ў вас ёсць. Гэта можа нават казаць у нейкай базе дадзеных як базы дадзеных MySQL. Так што не заўсёды прыходзіцца мець зносіны з рэсурсам, але ў У некаторых выпадках гэта магло. Такім чынам, што ён збіраецца рабіць пасля гэтага гэта збіраецца адправіць назад адказ. І адказ на гэта таксама задаецца HTTP. Так то кліент можа атрымаць яго. Гэта можа разарваць яго на часткі і апрацаваць яго. І тады вы атрымаеце вэб-старонку як Google або CS50.net або усё, што вы пайшлі ў. ОК? Так што гэта асноўнае ўзаемадзеянне, што мы збіраемся мець справу з. І мы ў значнай ступені будзе засяродзіўшы ўвагу на гэтай частцы ўзаемадзеянне, сервер. ОК. Крута. Хто-небудзь ёсць якія-небудзь пытанні да гэтага часу? ОК. Так як мы ўжо казалі, вэб-сервер атрымлівае гэты запыт HTTP, а затым выдае гэты HTTP адказ. І, як мы казалі раней, CS50 прыбор вэб-сервер Apache. Таму, калі вы, хлопцы, працаваць на P ўсталяваць сем, вы збіраецеся працаваць з Вэб-сервер Apache. Вы ніколі не будзеце мець, каб сапраўды працаваць з Apache непасрэдна занадта шмат. Вы, здаецца, налады Apache трохі пры ўказанні віртуальныя хасты або у V гаспадары, і мы атрымаем да таго, што ў няшмат. Але ў асноўным, вэб-сервер Apache настроены на працу з PHP роду з з скрынкі. Так што на самай справе адбываецца, калі вы ідзяце у адным з вашых сайтаў, як, скажам, лакальны хост слэш index.php ці нешта, Ваш браўзэр пасылае, што Запыт, а затым Apache сядзіць там і высвятляе з ім рабіць. І дзеянне гэта выканаць што код у index.php і затым адправіць яго назад. Так што ёсць што. Так мы накшталт казалі пра гэта. Так ён можа проста служыць статычны файл або запусціць некаторыя PHP код, а затым пытанне водгук. Такім чынам агульны пытанне, які можа прыйсці да добра, як мы на самай справе справу з наяўнасцю некалькіх карыстальнікаў у той жа час? Такім чынам, уявіце, калі б вы пісалі палотны сервер, калі ў вас ёсць вэб-сервер, што вы спрабавалі напісаць у чымсьці як C ці нешта накшталт гэтага, у асноўным вы можаце думаць пра тое, як там можа быць нейкі код, што б атрымаць запыт, але потым ён павінен рабіць усю гэтую працу на ім. Яна можа мець, напрыклад, звярніцеся базы дадзеных або што-то ў гэтым родзе. Ці не так? А потым ён будзе рабіць такога роду перапрацоўкі, а затым адпраўленыя назад адказ. Дык вось, як высокая Агляд ўзроўню. Але гэта не адразу відаць, як вы можа зрабіць гэта так, каб два чалавекі або нават 1000 чалавек мог працаваць з вашым Вэб-сервер адначасова. Такім чынам, рашэнне, якое выкарыстоўвае Apache называецца патокаў або працэсаў. Такім чынам, вы, магчыма, чулі гэтыя тэрміны раней. Гэта нармальна, калі ў вас няма, але проста думаю, аб патоках або працэсах, як шляхоў аперацыйная сістэма ці праграма карыстальніка або нешта ў гэтым родзе або вэб-сервер да выгляду выканаць некалькі рэчы адразу. Такім чынам, вы, магчыма, чулі тэрмін як патокаў выканання. Так што гэта накшталт як ты роду шматзадачнасці. І калі вы бачылі на поле па вашаму ноўтбук, ці нешта накшталт гэтага, шмат'ядравых, што вы можаце зрабіць, гэта можна запусціць дзве розныя тэмы, на розныя часткі працэсара, каб яны маглі на самай справе адбывацца адначасова. Так што гэта вельмі магутны. І гэта свайго роду ў Apache Рашэнне гэтай праблемы. Так ёсць накшталт як любых пытаннях пры такім падыходзе, хоць? Так што я думаю, я накшталт напісаў іх там. Але абодва яны роду выкарыстоўваць шмат памяці. Гэта вельмі дорага для стварэння нітка або працэс. І частка разважанняў у тым, што толькі напрыклад, калі вы працуеце ў праграму C як ваш галоўны, а затым, што званкі іншая функцыя, якая мае нейкая стэка. Так тэмы таксама патрабуюць цалкам асобны стэк, які можа быць даволі вялікім. І калі вы можаце ўявіць сабе, тон карыстальнікі на ваш сайт, вам прыйдзецца шмат розных патокаў. Гэта шмат стэкаў для кіраваць і падтрымліваць. Так што гэта вялікае спажыванне памяці. А потым, таксама, скажам, у вас ёсць толькі адзін працэсар, або, скажам, у вас ёсць больш патокаў, чым у вас ёсць тыя Шматжыльны. Ці не так? Так скажам, у вас было 10 тэмы і ў вас толькі пяць працэсараў. Вы, здаецца, мусяць зрабіць гэтую рэч, дзе пераключэнні паміж токам той, які працуе, таму што вы не можа выконваць усе 10 адразу. І гэта называецца пераключэнне кантэксту. І гэты тэрмін на самай справе ёсць некалькі розных кантэкстах, але давайце проста думаць пра гэта як пераключэнне паміж двума патокамі. Гэта можа быць даволі дарагім, таму што асноўным тое, што вам трэба зрабіць, гэта вы павінны спыніць тое, што вы робіце, за выключэннем стан гэтага момант патоку, і затым пераключыцца на іншае месца. Ці значыць усё гэта за см. матывацыя, чаму тэмы і працэсы маглі б быць трохі грувасткім? І хіба ў вас ёсць пытанне? ОК. Крута. Хто-небудзь ёсць якія-небудзь пытанні? ОК. Так што калі мы робім крок назад на працягу секунды, там накшталт як Назіранне, што мы можам зрабіць аб шмат вэб-прыкладанняў. І гэта сапраўды так многія з іх на самай справе не робяць гэтага шмат карыснай працаваць унутры валаску. Так Хто-небудзь пачалася P ўсталяваць сем наогул? Так што вы хочаце, можа быць, апісаць некаторыя з частак? Ці працавалі вы пры ўваходзе ці нешта ў гэтым родзе? АЎДЫТОРЫЯ: Не. Кевін Шмід: ОК. Не бярыце ў галаву. Выбачайце. Але ў прынцыпе, ў P набору, вы збіраюся рабіць шмат роду запыты да базы дадзеных, каб атрымаць некаторыя Інфармацыя з гэтай базы дадзеных. І тое, што ваш код будзе рабіць, што гэта працэс Apache або што Apache паток збіраецеся рабіць у той час як ён павінен звязацца база дадзеных гэта свайго роду будзе седзячы там, і гэта будзе чакае база дадзеных, каб адказаць. Цяпер, калі не можа гучаць як тое, што вялікі справа, паколькі база дадзеных знаходзіцца на вашым CS50 прыбор, ці не так? Але ёсць нейкая сеткі час чакання там, таму што ў цяперашні час вэб- сервер павінен выдаць свой уласны запыт, каб база дадзеных для сувязі з базы дадзеных і затым атрымаць, што Інфармацыя таму. Так што цяпер гэта як добра чакай мяне, я збіраюся пайсці атрымаць нешта ад базы дадзеных і затым ёсць вялікае чаканне адбываецца. Ці мае гэта сэнс? І для некаторых рэчаў гэта не так ужо дрэнна. Калі гэта проста неабходна, напрыклад, запамінальная прылада, што не так, як жудасна затрымкі ўводу / высновы. І калі я кажу, затрымкі ўводу / высновы, што я на ўвазе гэта як і любы выгляд, як зыходныя дадзеныя. Але атрымаць доступ да файла на дыску, як калі б я хацеў, каб служыць статычны HTML файл, які быў на маёй вэб-старонцы або нешта ў гэтым родзе, я, здаецца, мусяць спыніцца на некаторы час, прачытайце файл з дыска, а затым у што працэс я чакаю. Я не раблю карысную працу. Гэта не дакладна ні на што, але гэта звычайна ў прыкладаннях, такіх як P набору сем і шмат прыкладанняў што вы не на самай справе робіць шмат думаць. І калі я кажу мысленне, я маю на ўвазе як вылічальнай працы. Так вылічальная праца можа быць нешта як, скажам, вы хочаце, каб напісаць вэб-сервер, што проста, вылічаны п-лік Фібаначы. Гэта не гучыць як асабліва весела вэб-сервер. Як я не чакаў бы, што сайт, каб быць на наступны Facebook, але гэта некаторыя выгляд вылічальнай працы. І вы можаце сабе ўявіць замены, што з некаторы іншы выгляд цікава вылічальная праца. Дапусцім, вы пісалі нешта разлічанай ступеняў Падзел паміж двума людзьмі ці нешта ў гэтым родзе. Так што сапраўды маюць на ўвазе нейкую з разліку, ці не так? І нават тады, рабіць, што вы да гэтага часу зрабіць шмат чакаць, можа быць, ў вас ёсць запыт да базы дадзеных, каб паглядзець да хто сябруе з кім ці нешта ў гэтым родзе. Так што ёсць такая паняцці вылічальных работ. Ці мае гэта сэнс? Хто-небудзь ёсць пытанні? О, і я мяркую, што я паклаў чата ёсць таму чата серверы з'яўляюцца свайго роду яшчэ адзін добры прыклад. Чат сервер не мае зрабіць шмат думаць. Ён проста павінен чакаць для людзей, каб адпраўляць паведамленні і затым, калі яны, адправіць іх. ОК? Так што проста рэзюмаваць зноў, Apache і аналагічных вэб-сервераў, такіх як гэтага відэльцам шмат патокаў і працэсаў, якія можа быць нават марнатраўна. Так што я думаю, пытанне, які можа прыйсці ад які мы павінны мець некалькі патокаў і працэсаў? Што рабіць, калі мы проста быў адзін? Так што давайце роду намаляваць карціну пра тое, што гэта будзе выглядаць. Так што давайце выкарыстоўваць толькі адзін паток. ОК? Толькі ўявіце гэта з адным патокам. Давайце выкажам здагадку, што мы сапраўды не рабілі што шмат карыснага - і калі я кажу карысна, я маю на ўвазе вылічальную працу - ў тых некалькіх патокаў раней. Так што давайце роду кансалідацыі усё ў адным патоку. Так што, калі ў нас была адна нітка, якая выгляд проста ідзе вакол у контуры і пастаянна правярае зрабіў нешта Новы здарыцца. Так, напрыклад, нешта новае здарылася можа азначаць, што я атрымліваю адказ ад база дадзеных, або хтосьці паслаў мне новы запыт HTTP. Такім чынам, гэта свайго роду падзей што адбылося, ці не так? А потым, што я магу зрабіць, калі пачаткоўцаў рэчы адбываюцца ў гэтым жа патоку выканання, гэта адзін паток выкананне, я магу назваць некаторы код, які будзе апрацоўваць гэтую канкрэтную рэч. Так, напрыклад, калі б я атрымаў нешта ўзамен з базы дадзеных, я мог запускаць мае невялікі вылічальная частка, якая на самай справе проста рыхтуе рэч адправіць назад карыстальніку. Гэтак жа, што гэта за сэнс? Але тое, што сапраўды Наступствы гэтага? Ці не так? Таму што мы напісалі шмат кода гэтага - і я проста хачу, каб перайсці наперад ў слайдах, калі гэта нармальна. Так што, калі вы не пярэчыце, я проста збіраецца зрабіць крок назад. Так што гэта роду рэчы называецца цыкл падзей. ОК? І гэта збольшага асноўны Ідэя Node.js. Так што Node.js сапраўды робіць як сетка сервер ёсць адзін паток што ў асноўным адбываецца вакол у цыкле як падчас аднаго выгляду ніжнім капот Node.js гэта ўвесь час праверкі, так як мы атрымліваем новыя рэчы? І затым яна будзе працаваць апрацоўшчыкі што вы стварылі. Але добры пытанне, каб спытаць, як мы можам зрабіць гэта адбудзецца з існуючых рэчаў? Так што я паклаў лінію C кода тут у асноўным падобна, што гэта адкрыццё падаць, правільна? Я Яна толькі што выйшаў з альбомам. Так што мне прыйшлося адкрыць ёй новы файл. Так пабудавана наша C код для працы - і я мяркую, што прычына, я выбраў файлы было таму што гэта свайго роду такой ступені, працы ўводу / высновы, што мы зрабілі ў C у пачуццё, што ёсць уваход выхад. Так мы называем гэта код, які робіць гэта е адкрытым. А потым на наступным радку нашай Праграма, зараз мы можам працаваць з ф. Так што гэта будзе прыклад таго, што вось як сінхронны або блакуючы таму што ў гэты першай лініі там мы не чакаем, пакуль мы атрымаць адкрыць файл. Так на другой лініі, мы ведаем, што мы можа працаваць з е, але гэта азначае, што што другая лінія не магу запусціць пакуль першая лінія не будзе зроблена. Ці мае гэта сэнс? Так што гэта было б дрэнна, каб пакласці у апрацоўшчыку падзей. І прычынай таму з'яўляецца тое, што гэты від чакае, ці не так? Так што гэта вернецца нас да таго ж. І зараз мы нават не прыйдзецца Перавага некалькіх патокаў або працэсы, таму што мы атрымалі хто-нітка ў Node.js. Ці мае гэта сэнс усім? АЎДЫТОРЫЯ: Пачакайце. Так у чым жа замена? Кевін Шмід: О, да так. Так што я збіраюся дабрацца да замена. ОК. Так што, калі ў нас было нешта , Які выглядаў, як гэта? Так што, калі цяпер я рэдагаваў е адкрыць мала? Так я перадаю ў тое ж самае два аргументу, як раней. Я ўсё яшчэ люблю новую песню што яна выйшла з. Але я перадаю трэці рэч, якая гэтая пераменная называецца код. Але тое, што код на самай справе у гэтым кантэксце? Гэта як звычайны зменнай C? Гэта функцыя, ці не так? І гэта можа быць крыху дзіўна, таму што Я на самой справе, як цяпер праходзячы функцыянаваць у іншую функцыю. Так пара рэчаў, каб адзначыць пра гэта. Адзін з іх, я на самой справе не называючы код функцыі. Такім чынам, вы не бачыце код з засталося Хлопец, прама дужка. Я проста праходзіў у кодзе. А ў С, што гэта будзе на самой справе гэта даць мне паказальнік на што фактычная Код, і то гэта можа запусціць яго. Але падумайце пра гэта, як вы перадаючы код для запуску, калі адкрыты гэты файл. Але што гэта азначае, што ў цяперашні час Астатняя частка маёй праграмы, якія маглі б зрабіць іншыя рэчы, можа працягваць рабіць іншыя матэрыял у той час як мы, на самай справе не чакаць, але проста ў задняй часткі нашых галовах, што У адкрытым стане, прабег гэтага файла, што код у верхняй часткі. Ці мае гэта сэнс? І цяпер ідэя Node.js з'яўляецца тое, што код у працуем з ф частка павінна быць даволі кароткім і простым і прамой, а не сапраўды вельмі вялікага аб'ёму вылічэнняў. Гэта, магчыма, прыйдзецца адкрыць іншы файл, але што таксама павінна быць даволі хутка таму што гэта павінна толькі сказаць зрабіць яшчэ адзін е адкрыць, а затым выклікаць гэты іншы код. Так проста быць зусім ясна, е адкрыць, што робіць новая песня Кэці Пэры зроблена mp3, што збіраецца даволі значна неадкладна вярнуцца. І тады мы можам проста працягваць рабіць іншыя рэчы, таму што ўсё, што зараз е адкрыты конкурс, які аказвае сказаць асноўным асноўны е адкрытым кодам адкрыць гэты файл і калі вы скончыце адкрыцця гэтага файл або калі вы атрымаеце яго назад, затым запусціць гэты код. Але гэта не рэальна працаваць гэты код. І ў вас было пытанне? АЎДЫТОРЫЯ: Вы, здаецца, мае на ўвазе, некалькі раз, што даданне ў вылічальным інтэнсіўнае код роду перапынак [Неразборліва] прыводзіцца сістэма. [Неразборліва]? Кевін Шмід: Гэта вялікае пытанне. Так што я на самой справе маюць прыклад таго, як вы маглі б інтэграваць у вылічальным інтэнсіўнае код у няшмат. Таму, калі мы пяройдзем да прыкладаў кода, Я абавязкова цягнуць, што адзін. Хіба што ў парадку? Дзякуй. Якая была ваша прозвішча? АЎДЫТОРЫЯ: Аарон. Кевін Шмід: Аарон выхоўвае вельмі добры момант, які з'яўляецца тое, што калі б мне давялося некаторыя вылічэнняў код у зрабіць матэрыял з е часткі, астатняя частка мая праграма не можа працаваць і не можа слухаць для новых запытаў або што-небудзь, пакуль усё што матэрыял скончаная. Так што калі я пішу Node код у цэлым калі мы не зробім нешта, што я збіраюся прапанаваць пазней, калі мы глядзім на прыклады кода, я павінен быць упэўнены, што мой код не звязвае гэта цыкл падзей. Ці мае гэта сэнс? ОК. Крута. Так Node.js прапануе гэтыя рамкі, што Вы можаце пабудаваць гэтыя падзеі прывадам серверы с. Так што мае такога роду асінхронных без блакавання ўводу / вываду бібліятэкі, у той час як стандартныя C бібліятэкі, якія мы былі працаваць, як калі б вы проста выкарыстоўваць іх такім жа чынам, што мы выкарыстаў іх з F адкрываецца і матэрыял, тыя, блакуюць, таму што вы на самой справе павінны чакаць што файл для адкрыцця. Але Node.js дае, што і яму у асноўным накідваецца на V8 ад Google JavaScript рухавік, які з'яўляецца прычынай што Chrome настолькі хутка пры апрацоўцы JavaScript, таму што ёсць гэты рухавік V8. Так што я ведаю, гэта гучыць, як адзін з тых, WWDC канферэнцыях распрацоўшчыкаў рэч дзе яны проста выкінуць кучу Ліст колькасць рэчаў для працэсараў і кажуць, што гэта так выдатна. Але гэта выдатна, што яны зрабілі гэта таму, што JavaScript - ці, можа быць, калі вы не знаёмыя з JavaScript яшчэ таму, што ў нас не было лекцыі на ім - але JavaScript з'яўляецца інтэрпрэтаванай мову. І гэта вельмі важны момант таксама. Так што гэта важна для нашай сеткі серверы, каб быць хуткім, ці не так? І калі мы проста беглі Javascript Код, які быў інтэрпрэтаваны толькі з любы стары перакладчык гэта можа быць павольным. Так вузлоў выгады ад таго, гэта супер хуткі інтэрпрэтатар V8. І я не ведаю, калі яны назвалі яго таму што V8 ўдар у лоб рэч, але добра. Так я падрыхтаваў некалькі прыкладаў па наступным адрасе. Пасля семінара, я як бы збіраецца казаць аб тым, што вы можаце атрымаць Node Set , Але цяпер, я проста як бы хочуць хадзіць праз некаторыя прыклады кода. Так што калі вы хочаце прасачыць, усё Зыходны код даступны там. ОК? Таму я пакідаю гэты адрас на няшмат. А потым я проста хачу, каб перайсці ў тэрмінал. Няўжо ўсё добра з гэтым URL? Так што я збіраюся перайсці на ў маім тэрмінале тут. Такім чынам, вось код, які У мяне ёсць на сённяшні дзень. Чаму б нам не пачаць з simpler.js файл? Іншая справа, што ўсё гэта Код збіраецца запісаць у JavaScript, які вы можаце ці не можаце быць знаёмыя з. Я думаю, пара рэчаў з'яўляецца тое, што шмат кода JavaScript з'яўляецца выгляд Сінтаксіс і структура вельмі падобная на З, так што вы можаце збольшага забраць яго, як вы ідзяце наперад. Я спрабаваў напісаць шмат пачынаючы код для гэтага ў спосабе, якім гэта падобны на З, так што гэта трохі больш чытэльным. Але, як мы прасоваемся, я буду дэманструючы некаторыя з дадатковых асаблівасці JavaScript, што з'яўляюцца крута. Але давайце паглядзім на гэтую праграму ўзору. Я думаю, усё гэта адрэзалі там. Я проста хачу, каб выправіць, што рэальныя хутка, калі гэта нармальна ці не. Я не ведаю, што гэта будзе рабіць. Хіба што крыху лепш? Ці бачыце вы вар і іншае? ОК. Такім чынам, першы радок, як JavaScript версія зменнай Дэкларацыя. Так што проста вылучыць тое, што гэта будзе выглядаць у С. Так што гэта так жа, як мне кажуць індэкс роўны тры ці нешта ў гэтым родзе. Так што я не пазначыць тып. JavaScript мае віды, але гэта вельмі дынамічна набраў у прыродзе, таму не прадугледжвае якія-небудзь тыпу на ім. Так ён проста павінен вар. Гэта як зменнай. ОК? І я тэлефаную гэтай зменнай HTTP. І на маёй правай баку, у мяне ёсць выраз, што я хачу, каб пакласці ў HTTP. І гэта кажа патрабуюць HTTP. Так што гэта свайго роду падобныя ўключыць. Гэта крыху больш, як магутны, чым ўключыць у тым сэнсе, што ўключае проста скапіруйце і ўстаўце загаловак файл для прататыпаў функцый або што з азначэннямі тыпу. Але патрабуюць на самай справе адбываецца каб атрымаць нам код. Такім чынам, вы можаце думаць пра гэта як імпарту некаторы код. Так недзе ў модулі Node.js Сістэма або любы іншы, у іх ёсць усе гэта Код HTTP сервер, так што я проста выманне яго для майго ўласнага асабістага карыстання ў гэтай праграме. ОК? Тады я мець гэтую функцыю што я напісаў. І заўважце, я не павінен быў паказаць які вяртаецца тып або тып аргументы яшчэ раз. Так накшталт свабодна набраныя ў Гэта свайго роду пачуццё. Два аргументу, што ён прымае ў, запыт і адказ. Дык вось канцэптуальна накшталт як знаёмыя з малюнка, якую мы мелі на экране раней, таму што мы атрымліваем гэтую просьбу, што мы мець ад карыстальніка. І тады ў нас ёсць адказ, які мы можам напісаць рэчы. Такім чынам, першы радок гэта робіць res.writeHead 200 і затым гэтая тып змесціва тэксту раўніна. Так што давайце сабраць гэта акрамя няшмат. Так што давайце проста засяродзіцца на res.write для няшмат. Так пішуць у асноўным, і напісаць галаву, проста спосабы роду выпісаць рэчы ў адказ. ОК? Так што пішыце галаву, калі хто-небудзь памятае ад HTTP лекцыі, вы, хлопцы, памятаю загалоўкі ў Верхняя частка HTTP рэчы? Дык чаму б мне проста не дэма загалоўкі сапраўды хутка. Гэта было б карысным? Ці мы павінны толькі выгляд - ОК. Вядома. Таму, калі ваш браўзэр ідзе ў google.com ці нешта ў гэтым родзе, там на самой справе трохі больш - гэта як таямніцу - там паходзіць трохі дадатковай інфармацыі , Які прыходзіць праз трубу, чым проста трохі пошук і ўсё. Такім чынам, каб паказаць вам гэта, я збіраюся выкарыстоўваць праграму пад назвай Curl. ОК? Дык гэта тое, што вы можаце працаваць на камандны радок Mac OSX або ў Прыбор або любы іншы. І таму, калі я Curl HTTP google.com, Я збіраюся ўбачыць HTML. І гэта, справядлівасці дзеля, проста HTML такога роду кажа вам, каб перанакіраваць на WWW, калі ваш браўзэр не аўтаматычна апрацоўваць перанакіраванне. Так што гэта толькі HTML, але я збіраюся дадаць у Curl гэтую злучок Я сцягам. ОК? І гэта збіраецца паказаць мне загалоўкі. Так што гэта таксама інфармацыя, якая паступае праз калі я атрымліваю такі адказ. ОК? Так на самым версе, вы бачыце гэта HTTP 301 пастаянна рухацца. І гэта свайго роду важна, таму што гэта ставіцца да кода статусу. Такім чынам, 301 вось код статусу, які з'яўляецца ў асноўным толькі цэлы лік , Які паказвае браўзэру альбо хто б там ні Прачытаўшы гэта, калі вы робіце выгляд, што ты браўзэр і вы бачыце гэта, у асноўным цяпер, калі вы паглядзіце на што і вы бачыце 301, вы ведаеце, у мяне ёсць зрабіць нешта асаблівае на аснове 301, ці нешта асаблівае адбылося на падставе 301. Так ён кажа пераехаў на сталае жыхарства. І тое, у асноўным, у нас ёсць куча пар ключ-значэнне. Такім чынам, мы атрымліваем размяшчэнне з'яўляецца www.google.com. А потым накшталт усё гэта іншыя рэчы, але ў асноўным, тое, што размяшчэнне прымаўка новае месца знаходзіцца на www.google.com. Так што цяпер, калі вы ідзяце ў google.com, вы будзеце роду см. браўзэра роду імгненне на секунду, а затым перанакіраваць вас назад да www.google.com. Такім чынам, адказы могуць утрымліваць гэтыя загалоўкі. І некалькі рэчаў, каб паказаць. Так скажам, мы былі фактычна паспяховым у наведванні вэб-старонкі. Такім чынам, дазвольце мне перайсці да - што такое добры сайт? Я дрэнна мыслення добра сайты на месцы. АЎДЫТОРЫЯ: Wikipedia. Кевін Шмід: ОК. Давайце зробім Вікіпедыю. Дык вось, я быў перамешчаны. Ой, пачакайце. Быў я? Так, я быў. ОК. Так што я павінен рабіць WWW. Так што я збіраюся зрабіць WWW. І як вы можаце бачыць, тут усё HTML , Што браўзэр будзе апрацоўваць для Вікіпедыі. Але калі я буду працягваць пракруткі уверх тут, што я буду бачыць у верхняй - нічога сабе, ёсць шмат HTML у Вікіпедыі - але тое, што я бачу ў верхняй тут гэта 200 код стану ў адрозненне ад 301, што я бачыў раней. І заўважце, што ў яго ёсць добры прыязны ОК побач з ім. Так што гэта як добры кодам стану. Выглядае Ці, што 200 нумар знаёмыя? Ды таму што, калі я зрабіў simpler.js, Я напісаў 200 там. Дык вось у асноўным кажуць сказаць браўзэру або той, хто спрабуе дабрацца да гэта, што яны былі паспяховымі. Або тое, што накшталт як мы былі паспяховымі таксама. І ёсць такая спецыяльным сінтаксісам ў Javascript для аб'явы Карта з гэтых клавіш, як тып змесціва і гэтыя значэння як тэкст раўніне. Так што, калі вы паглядзіце на адказ, што мы вярнуўся з Вікіпедыі і раней, - Я збіраюся паспрабаваць пракруціць да крыху хутчэй - ў вас ёсць гэтыя ключы, як сервер і гэтыя значэнні Apache. Такім чынам, вы атрымалі ключы і значэння. І вы можаце паказаць гэта ў Node што адправіць назад. Так што гэта на самай справе выгляд, у некаторых спосабы, і ў некаторых адносінах гэта не сапраўды, але гэта крыху больш нізкі ўзровень чым код PHP, што вы маглі б быць пісаць для P ўсталяваць сем, таму што PHP і Apache роду клапаціцца аб некаторых з гэтых рэчаў для вас. У PHP, вы можаце перавызначыць значэнне па змаўчанні паводзіны, напісаўшы свае ўласныя загалоўкі. Але для мэтаў гэта, мы атрымліваем выпісаць нашы ўласныя загалоўкі. Ці значыць гэта, лінія мае сэнсу ўсё, кіраўнік запісу лінія? ОК. Ўзрушаюча. Так што я зрабіць, гэта я ў канчатковым адказ сказаўшы прывітанне свет. ОК. Але гэта толькі функцыя называецца апрацоўшчык запытаў. Так што цяпер я на самой справе трэба роду рабіць нешта з гэтай функцыяй, ці не так? Дык вось тое, што я раблю, гэта там гэта лінія, якая робіць роўных уаг сервера HTTP.create сервер, а потым я прайсці ў апрацоўшчык запыту. Так што гэта свайго роду Вузлу спосаб стварэння сервера. І заўважце, што я перадаю у апрацоўшчык запыту. Так што гэта кажа createServer Функцыя, што я хачу, каб ты мяне сервер, і калі атрымлівае, што сервер адказ, мне трэба, каб назваць гэта запытаць функцыю апрацоўшчыка. ОК? Так што лінія ў значнай ступені заканчваецца адразу ж. Такім чынам, сервер лінія вар зроблена правільна пасля гэтага ў значнай ступені. Я маю на ўвазе, ён павінен наладзіць некаторыя ўнутраныя Дзяржава ведаць, што вы павінны былі б выкліку гэтай функцыі апрацоўшчыка запыту, але ён не збіраецца сядзець і скажам мае карыстачу адпраўляецца мне запыт яшчэ? Мае карыстальнік даслаў мне запыт яшчэ? Так што не блакуе. ОК? Дык што ж гэта будзе рабіць гэта ў асноўным цяпер захоўвае паказальнік на гэты код, гэтая просьба функцыя апрацоўшчыка, а затым будзе працаваць гэты код, калі хтосьці робіць запыт. А потым мы робім server.listen. 1337, там даволі адвольна. У мяне не было асаблівых прычын для збору гэты нумар. Гэта было цалкам выпадкова. Але гэта толькі паказвае порт. Так большасць вэб-сервераў вы ўбачыце, што яны выкарыстоўваць порт 80, таму што гэта свайго роду накшталт канвенцыі. Так што, калі я іду на нешта накшталт, Я не ведаю,, Wikipedia.org, і я паклаў тоўстую кішку 8 - о, нічога сабе, вы не можаце бачыць, што. Мне вельмі шкада. Але калі я Вікіпедыю - Я напішу яго тут проста так, што зразумела, на камеры. Але калі я вазьму гэта ў браўзэры з двукроп'е 80, што паказвае перайсці да Wikipedia.org на порт 80. Так што гэта як тое, як Злучаныя Штаты некалькі партоў, як, дзе вы можаце адправіць рэчы для выгляду. Так што гэта, як пайсці ў гэты асаблівы размясціць на гэтым серверы. ОК. Так што я проста абраў 1337. Там цэлы дыяпазон лікаў што вы можаце выбраць. Гэта не было цалкам асаблівым. Але тое, што я збіраюся зрабіць цяпер гэта я збіраюся запусціць вузел. Дазвольце мне на самай справе ўвесці, што пара лініі ўніз, так што вы можаце ўбачыць яго. Я збіраюся зрабіць вузел, і я збіраецца запусціць simpler.js. І мы будзем казаць аб тым, як атрымаць Вузел створаны ў няшмат. Але цяпер гэта проста кіраваць серверам. Такім чынам, адна рэч, якую мы можам паспрабаваць, які не можа тое, што цікава, мы можам на самай справе спробе доступу да яго ў Curl. Так што я магу зрабіць Curl, і мой Машына лакальны хост. Вы таксама ўбачыце, што гэта напісана як гэта часам. Гадзінны гаспадар і 127.0.0.1 добрыя накшталт вашага хатняга кампутара. Так што гэта як размаўляць з ваш уласны кампутар. ОК. І тады я магу сказаць, 1337. Так што, калі я запускаю гэты радок кода, ён кажа прывітанне свет. І калі б я хацеў бачыць, што матэрыял, які быў тэкст тыпу кантэнту просты або усё, што я мог нават паставіць гэта тут. І заўважце, што гэта сапраўды кажа ОК. І ў мяне ёсць тэкставы раўніну. А тут яшчэ накшталт усё гэта іншая рэчы, якія вузел дадасць у там для мяне. Гэта не супер важна. Я маю на ўвазе, ёсць нейкая тэхнічная аспекты у той ласкавы крута казаць, але проста каб паказаць, Вы, я таксама маюць права змяніць іх вакол. Таму я магу толькі дадаць кучу з усё ў такім духу. І то зараз, калі я гляджу ў маім выхад, гэта будзе што. Такім чынам, гэтыя загалоўкі на ўвазе пэўныя рэчы да браўзэраў і таму падобнае. І загалоўкі могуць у асноўным расказаць браўзэр як рэагаваць на нешта. Калі вы калі-небудзь чулі пра печыва і раней, або калі вы калі-небудзь былі раздражнёныя Усталяваўшы печыва вэб-старонкі, або не ўключаны печыва блока або нешта ў гэтым родзе. Вы на самой справе можаце ўсталяваць печыва у гэтых загалоўкаў. Так яны кажуць браўзэру, як паводзіны ў некаторых выпадках. ОК. Так, каб было simpler.js. Хто-небудзь ёсць якія-небудзь пытанні на гэтым файле з зыходным кодам? ОК. Крута. Так што давайце выдаліць р ад і паглядзець на simple.js. Так што гэта ў значнай ступені тая ж праграма. Я проста напісаў яе крыху па-іншаму таму што я хацеў, каб разабрацца ў падсветкай некаторыя асаблівасці JavaScript. Так заўважыць, што апрацоўшчык запытаў функцыя цалкам зніклі. О так, ты ёсць пытанні? Аўдыторыя: Ды ўжо, аргументы , Якія перадаюцца ў тым, што Функцыя, якія яны? Кевін Шмід: Такім чынам, гэта JavaScript аб'екты. У дакументацыі Node.js, гэта у асноўным кажа, што метады Працуе на іх. Мы проста, аказваецца, маюць доступ да гэты метад называецца галава і канец запісу і ўсё ў такім духу. Але ёсць цэлы букет некалькі метадаў. І напрыклад, як адзін з іх у прыватнасці, на рэк, вы можаце зрабіць нешта накшталт rec.method які будзе сказаць вам, ці з'яўляецца гэта HTTP GET або HTTP POST запыты і такія рэчы, як, што. Такім чынам, ёсць усе віды адрозніваюцца ўласцівасці, але яны абодва JavaScript аб'екты, і яны проста ёсць функцыі, прыкладзеныя да іх, што вам можаце напісаць рэчы. ОК? Так заўважыць, што апрацоўшчык запытаў цалкам знік. Але код, які я меў ў запыце апрацоўшчык па-ранейшаму існуе. Я да гэтага часу гэты res.writeHead і я да гэтага часу гэты res.end. І тое, што гэта з'яўляецца прыкладам у JavaScript з'яўляецца гэтая ідэя ананімная функцыя. і ананімны, як падыходны назоў для яго, таму што ён літаральна не было мець імя. Там няма запыту няма функцыі апрацоўшчык там. не мае імя, але ён па-ранейшаму прымае аргумент. Так што я яшчэ ёсць запіс і дазволам. І я да гэтага часу код. Гэта выдатна JavaScript код. Так што я магу абвясціць функцыю без відавочна даючы яму імя. Гэта крыху заблытаным на першы. Ёсць некаторыя, як карысныя рэчы што вы можаце зрабіць з гэтыя ананімныя функцыі. Хто-небудзь ёсць якія-небудзь пытанні па гэтай нагоды, ці гэта добра толькі для, на дадзены момант, роду проста прызнаць, што гэта будзе рабіць тое ж самае? Да? АЎДЫТОРЫЯ: Ці з'яўляюцца функцыі спачатку клас у JavaScript? Кевін Шмід: Яны спачатку клас у JavaScript. І дакладна ведаю, што гэтыя паняцці пераходзячы ў ананімнай функцыі як гэта ставіцца да JavaScript, што вы можа напісаць у вашым канчатковага праекта для вэб-браўзэр таксама. Так, напрыклад, у JavaScript ў ваш браўзэр, гэта таксама некалькі падзей заехаў у тым сэнсе, што тое, што вы будзеце ёсць, калі карыстальнік пстрыкае гэты Кнопка, я хачу, каб вы запусціце гэты код. Так што гэта той жа самы выгляд ідэй на баку кліента, калі пстрычка мышы або яны мышы на некаторы малюнак на вашым вэб-старонкі, запусціць гэты код. Гэта можна прымяніць да сервераў. Так што накшталт як цікава Прычына, чаму JavaScript з'яўляецца сапраўды прыдатныя ці некаторыя людзі думаюць, што гэта падыходзіць мова для гэтага віду Сервер кіроўца падзея, таму што ў вас ёсць гэтыя ананімныя функцыі. У вас ёсць уся ідэя гэта асінхронны код. ОК. Хто-небудзь ёсць якія-небудзь пытанні? ОК. Так, каб было simple.js. Такім чынам, давайце зірнем на яшчэ адзін ці яшчэ пару. Так што гэта sleep.js. Так хто-небудзь знаёмы з функцыя сну C? З можа быць, адзін з ранніх лекцый ці нешта ў гэтым родзе? Таму ў асноўным вы можаце перадаць у я думаю колькасць секунд або калі вы карыстаецеся U спаць лік мілісекунд або нанасекунд. І ў асноўным праграма будзе проста спыніцца працуе для таго колькасці часу. Ці не так? А потым прачнецца ў канчатковым выніку і то гэта будзе проста працягваць працаваць праграма. Так гэты сервер роду дае ўражанне ад сну. Так заўважыць, што ў нас ёсць тое ж самае res.writeHead 200 з загалоўкам, як і раней, але тады мы называем гэта Функцыя называецца набор тайм-аўт. Усталюйце тайм-аўт таксама даступны ў ваш вэб-браўзэр Google Chrome або Safari або любы іншы. І ў асноўным, што ён робіць тут будзе гэта займае ў функцыі. Звярніце ўвагу, зноў жа, гэта ананімная функцыя. Дык вось крута, таму што мы выкарыстоўваючы ананімную функцыю ў ананімная функцыя, якая можа быць трохі дзіўна. Але гэта займае гэтую функцыю, якая у асноўным кажуць - і тое, як гэта Працы ў 5000 мілісекунд, я хачу вам выконваць гэтую функцыю, проста заканчваецца адказ і запісвае эй. Так што гэта вырабляе ўражанне, як спаць, але тое, як гэта на самай справе працуе, мы будзем праходзіць праз гэтая лінія вельмі хутка. Мы проста пісаць нешта. І тады мы будзем таксама запусціць праз гэтая лінія вельмі хутка. Так што мы на самай справе не збіраецца чакаць пяць секунд. Мы проста збіраемся запусціць гэты код імгненна. А тут яшчэ, зноў жа, гэта крыху цыкл падзей, што ў цяперашні час гэта справа рэгістры, што ў асноўным з'яўляецца проста пастаянна адбываецца па крузе і, гледзячы на ​​гадзіны ў адзін нітку і прымаўка, мае пяць секунд Прайшло яшчэ? А потым, калі ён бачыць, што другі рука рухалася, як пяць секунд ці ўсё, то прачынаецца і кажа: ой, што я павінен рабіць? О, я павінен выканаць гэты код. А потым ён збіраецца запусціць res.end эй. Такім чынам, яшчэ раз, мы ніколі не чакалі тут. Так што гэта не тое, што гэты код ўнутры гэтая функцыя будзе прымаць пяць секунд для запуску. Гэты код будзе працаваць у значнай ступені імгненна, па меншай меры, адносна пяць секунд, што мы казалі аб раней раней. Так толькі, каб паказаць гэта ў дзеянні, Я магу зрабіць Node.sleep.js. І я беспарадак нешта? Магчыма. Выбачайце. Давайце паглядзім, што мы можам зрабіць, каб выправіць гэта. ОК. Так вызначана выкарыстоўваць Node.js. Жартую. ОК. Толькі адзін сек. ОК. Я ведаю, што гэта такое. Так што пытанне ў тым, што ў іншай мой кошт тут, я бег вузел ўжо на што ж адрас, 1337. Такім чынам, памылка, што гэта кінуў, калі мы паглядзім на яго ў рэальным цесна, з'яўляецца адрас у выкарыстоўваць, EADDRINUSE. Так што я ўжо выкарыстаў 1337 тут. Так што, калі я закрыў гэта прэч, і тады я зараз паспрабуйце запусціць гэты, спадзяюся, усё будзе добра. ОК. Такім чынам, вы можаце мець толькі адну рэч роду з праслухоўвае порт адразу. Іншым рашэннем было б для мяне проста рэдагаваць гэтую праграму і зрабіць гэта было падобна 1338 ці нешта так. Але цяпер сон бяжыць. Так што давайце на самай справе паспрабаваць яго ў браўзэру на гэты раз, таму што гэта трохі нецікавы, каб убачыць гэта ў тэрмінале. Так што я проста збіраюся ісці да таго, што 127 адрас зноў у 1337. І калі вы можаце ўбачыць яго - Я не ведаю, калі вы можаце - але мой браўзэра з вельмі, вельмі доўга Час для загрузкі ці як пяць секунд. А потым пасля гэтага, ён, нарэшце, скончыў адказ. І вы не можаце бачыць гэта, таму што рэч перамяшчаецца на трохі, але калі я зраблю гэта крыху менш, вы можаце бачыць, што кажа эй. Такім чынам я атрымаў эй, але праз пяць секунд. І гэта можа быць трохі больш чыстым, каб убачыць гэта тут на тэрмінале, так што я збіраюся зрабіць - давайце зробім тут - давайце зробім Curl гэтым адрасе зноў з 1337. І я толькі збольшага павінны сядзець тут на працягу пяці секунд. Але звярніце ўвагу, што сервер можа прымаць новыя адказы. Так ён друкуе эй. І для дэманстрацыі гэтага, у асноўным, што Што я магу зрабіць у гэтай іншы ўкладцы - так скажам я раблю гэта ў іншы ўкладцы, Я збіраюся зрабіць Curl і тое ж рэч зноў. І я збіраюся паспрабаваць штурхнуць іх хлопцы прэч у той жа час. Так што я збіраюся зрабіць гэта, і я збіраюцца гонцы тут, і я збіраецца зрабіць гэта зноў. І давайце зробім так, што вы можна ўбачыць іх абодвух. Гэта адзін надрукаваныя эй і што адзін надрукаваныя эй ўсю дарогу ў - давайце зробім гэты эксперымент яшчэ раз. На самай справе, давайце выкарыстоўваць гэта падмануць, калі гэта нармальна. Так што я збіраюся выкарыстоўваць абалонкі рэч, якая дазваляе мне ў асноўным запусціць дзве копіі гэтай праграмы паралельна. Так ён будзе працаваць першую праграму і другая праграма паралельна. Так што цяпер, калі я націскаю Enter, ён збіраецца зрабіць, што запыт у значнай ступені імгненна ў той жа час. Дык давайце дамо гэты стрэл. Так што цяпер заўважыце, што ён кажа два працэсу. І калі вам цікава, што 27000 лік у асноўным працэс ID. І звярніце ўвагу на тое, што яны надрукаваныя эй адначасова. Гэта не было падобна нам прыйшлося чакаць пяць секунд для адной і то пасля таго, праз пяць секунд атрымаць другую. Дык вось выгляд, у пэўным сэнсе, гэта на самай справе не сведчыць, але гэта інтуітыўнае доказ таго, што гэта не проста як чаканне пяць секунд і блакаванні увесь паток. ОК выдатна. Аарон задаў пытанне раней, што было, добра, што калі мы нешта зрабіць - Да? АЎДЫТОРЫЯ: Пачакайце. Як гэта адрозніваецца ад Е буфера, хоць? Хіба гэта не аўтаматычна гэта зрабіць? Чаму мы павінны турбавацца пра гэта? Кевін Шмід: О, ты мог сказаць, што яшчэ раз? АЎДЫТОРЫЯ: Не любіць Printf буфер зрабіць тую ж самую рэч? Кевін Шмід: Буфер Е? АЎДЫТОРЫЯ: Так. ОК. Быў не ў адным з апытанняў яны былі казаць пра тое, калі вы прама Е нешта, а затым ужо ён паўзу адзін Другая, а затым у вас ёсць гэта цыкл дзесяць раз, гэта будзе чакаць дзесяць секунд і затым Е ўсе разам? Кевін Шмід: О, добра. АЎДЫТОРЫЯ: Гэта рабіць тое ж самае рэч, то ў гэтым выпадку? Кевін Шмід: Такім чынам, пытанне было у асноўным у адным з былых віктарыны ці нешта, паўстала пытанне, што у асноўным, калі вы кажаце, для друку F 10 рэчы ў той час, а затым спаў як у працэс друку тых з, ў канцы чамусьці, што гэта будзе проста звалка тых, усё на экране. Так што нібыта двух розных паняцці тут. Так што я думаю адно, што ў гэтым так, што мы маем справу з двума рознымі роду людзі просяць сервер для рэчаў адначасова. І прычына таго, што Е роду чакае, як гэта і звалкі ўсё гэта адразу больш звязаная з як Е роду - таму шлях Е на самай справе рэалізуецца гэта ў асноўным павінен пагаварыць з аперацыйнай сістэмай пісаць што матэрыял на кансоль. Так што не хочаце, каб зрабіць усё, што матэрыял адразу, калі вы кажаце Е некаторыя радкі, таму што мог дорага абысціся, калі ён павінен зрабіць гэта ў любы час. Так што, калі вы робіце Е эй, вашу праграму не можа на самай справе друкаваць, што адразу на кансоль. Гэта можна сказаць, добра, я яе напісаў. А потым накшталт чакаць вас, каб даць гэта крыху больш, перш чым на самай справе запісаўшы яго на кансоль. Так што прычына, што б гэта было так - і гэта збольшага звязаны ў сон - з'яўляецца тое, што сон быў свайго роду проста ўводзяць туды, каб прадэманстраваць Справа ў тым, што ён не запісвае гэта сінхронна. Але прычына, што гэта проста прадукцыйнасць, так што вы не павінны зрабіць, што многія кантакты аперацыйная сістэма. Але вось тое, што мы сапраўды спрабуем зрабіць з гэтай рэччу сну з'яўляецца толькі шоў , Што, калі ў нас ёсць два людзей, якія наведваюць гэты сайт, ён не збіраецца ставіць іх у лініі, дзе ён збіраецца сказаць У мяне ёсць, каб дапамагчы вам, а потым, калі я цалкам скончыў дапамагаць вам пасля іх пяць секунд, то я збіраюся перайсці на наступны чалавека. Так запыт першага асобы не звязаць, што цыкл падзей калі гэта мае сэнс. Але тут на самай справе прыклад чагосьці, што звяжа да цыклу падзей. Такім чынам, вось жудасная функцыя вылічыць п-ю Фібаначы. Гэта літаральна ў горшы бок, як вы можаце вылічыць энного колькасці Фібаначы. І гэта на самай справе проста прызнаць адкуль гэта ўзялося, там на самой справе - Я маю на ўвазе, вы можаце паспрабаваць пайсці знайсці яго - але ёсць як вельмі працяглы блогу паведамленне, што нехта напісаў. Гэта як адзін з тых Reddit рэчаў. Але хто-то крытыкаваў Node.js, і яны выкарыстоўвалі гэта ў якасці прыкладу. Так што я збольшага хацеў проста паказаць вам два розныя пункты гледжання толькі, каб атрымаць агульнае разуменне паняццяў За гэтымі двума рэчамі. Але гэта выбіраецца ў якасці проста жудасна, жудасна неэфектыўны Вылічальныя інтэнсіўнае спосаб вылічэння энного колькасці Фібаначы. Гэтак жа, як нататка боку, чаму гэта жудасна, як у той? Да? АЎДЫТОРЫЯ: Напрыклад, вы пачынаеце з 1000. 1000 распадаецца на 999 і 998. Кожны з гэтага распадаецца на дзве рэчы. Кожны з гэтага распадаецца на дзве рэчы. Кевін Шмід: Дакладна. АЎДЫТОРЫЯ: Усю дарогу ўніз. Кевін Шмід: Цалкам дакладна. Так што проста паўтарыць для камеры, калі я патэлефанаваць Фибо на як 1000 ці нешта так, гэта, відавочна, не менш або роўнае адзінцы, так што я збіраюся пайсці ў гэты яшчэ выпадку, а затым я збіраюся патэлефанаваць Фибо 999 плюс Фибо 998. А потым у значнай ступені ўсё, што праца, якая Фибо 999 робіць від на гэтым узроўні. Калі вы ідзяце ўніз, то гэта яшчэ больш залішняй Акрамя гэтага, але калі вы проста думаю вылічэнні выдумка 998 атрымлівае нам даволі блізка да Фибо 999. Такім чынам, мы павінны сапраўды быць трохі больш разумны пра тое, як мы збольшага паўторна іх, але мы не паўторнага выкарыстання гэтыя рэчы наогул. Такім чынам, вы можаце сабе ўявіць, гэты гіганцкі, гіганцкі дрэва, якое проста жахліва. Але ў любым выпадку, добра. Так, каб было выдумка. Гэта зойме некаторы час для запуску. Да? АЎДЫТОРЫЯ: [неразборліва]. Кевін Шмід: О, ты мог паўтарыць пытанне? АЎДЫТОРЫЯ: [неразборліва]. Кевін Шмід: О, так гэта толькі код што будзе свайго роду на на боку сервера. Так што гэта не будзе знойдзена у браўзэры або што-небудзь. Гэта ў асноўным тое, што мы ёсць, што калі карыстальнік тут даволі шмат марак іх просьба зноў, калі мы накшталт зрабіць запыт, мы збіраемся назваць гэтая функцыя на боку сервера. А потым мы атрымаем вынік назад ад выкліку гэтай функцыі. А потым мы проста надрукаваць гэта карыстальніку. Такім чынам, карыстальнік на самай справе не справа З дапамогай гэтай функцыі занадта шмат. Быў, што пытанне? Ці мае гэта сэнс? ОК. Крута. Такім чынам, яшчэ раз, мы робім усё гэта res.writeHead рэч, дзе мы раздрукаваць загаловак. А потым я ў канчатковым адказ, робячы магічнае лік выдумка 45. Так што давайце проста запусціць гэты сервер. Так што я збіраюся зрабіць вузел fib.js. Так што цяпер мая выдумка сервер працуе. А потым тут, я збіраюся зрабіць адзін з іх. ОК? Так што я проста хацеў сказаць, Curl. Так што гэта зойме некаторы час, але мы спадзяемся, хутка ён скончыць і ён будзе друкаваць, што 45-й Лік Фібаначы. АЎДЫТОРЫЯ: [неразборліва]. Кевін Шмід: Ён павінен зроблена даволі хутка. Так яно і павінна прыняць 05:55 секунд. Я не ведаю, гэта толькі V8 быць супер хутка, але ў любым выпадку, гэта вельмі кароткі прыклад, і знарок безгустоўны з нетрывіяльная вылічэнне. Так праз некаторы час, гэта сапраўды становіцца гэта. Але цяпер, што калі я гэта зраблю такі ж Эксперымент, як і раней, дзе я раблю два запыту ў той жа час? Дык вось я іду на Curl на што адрас, і я збіраюся зрабіць яшчэ Curl. І памятайце, калі мы зрабілі гэта для спаць сервер, калі мы ў асноўным павінны былі яго праз пяць секунд, яны ў значнай шмат і вярнуўся права прыкладна ў той жа час. Так што гэта не было асабліва звязалі. Але давайце паспрабуем гэта цяпер. Такім чынам, мы атрымалі нашы два працэсу. Памятаеце гэта тыя ідэнтыфікатары працэсаў. Гэта будзе трохі нязручна ў той час як мы стойла. Так што давайце проста застацца тут і чакаць. Так адзін з іх павінен прыйсці таму пасля як - Такім чынам, адзін вярнуўся. Але тады чаму не другі адзін вярнуцца толькі пакуль? Да? АЎДЫТОРЫЯ: Сервер не можа нічога зрабіць пакуль яна вылічэнні, што вялікая колькасць. Кевін Шмід: Дакладна. Такім чынам, адказ быў проста, што сервер сапраўды нічога не можа зрабіць у той час як гэта вылічэнні, што колькасць Фібаначы. Так што цяпер я толькі што атрымаў мае дзве рэчы назад. Але я думаю, проста думаць пра код трохі больш, як гэта працуе і ўсё. Так гэтая функцыя тут код, які Я сказаў гэты сервер для запуску, калі яна атрымлівае новы ўваходзіць запыт. Так што гэта проста збіраецца запусціць праз гэта увесь код, а затым ён збіраецца пайсці таму ў цыкл апрацоўкі падзей, а затым працягнуць праверкі новых падзей. Таму ў асноўным тое, што мы адбываецца з'яўляецца сервер прыслухоўваючыся да новых рэчаў. Першы чалавек просіць за тое, што 45 ёсць. Мы праводзім гэты код, каб вылічыць яго. Гэты код бярэ прыкладна пяць да шасці секунд для запуску. Тады мы ідзем назад у цыкл падзей і правяраць наяўнасць новых запытаў. Такім чынам, гэта прыклад таго, як, калі ёсць рэчы, якія так званы вылічальны звязаны, або выкарыстоўваць шмат вылічальных, не ўлада, але, як і ў вылічэнняў - Я думаю, адна рэч, каб сказаць пра гэта з'яўляецца што гэтая функцыя робіць цалкам, па большай частцы, даволі карысная праца правай. Увесь час, што, што зваротнага выкліку Функцыя бег, гэта было даволі шмат марнаваць вялікую частку свайго часу проста вылічэнні лік, п Фібаначы. Але ў нас быў толькі адзін паток мець справу з. У мадэлі Apache, калі два чалавекі зрабіў запыт, каб атрымаць Фибо 45, мы было б два розных тэмы. А потым праца аперацыйнай сістэмы было б, або ўзровень карыстальніка код, які кіруе тэмы, будзе ўжо у тым, каб нарэзаць, што на Працэсар, ці нават калі ў вас некалькі працэсараў, размеркаваць іх раўнамерна па ўсёй працэсараў так, каб яны абодва былі аздабленне прыкладна ў той жа час. Так што проста паказаць вам, як мы можам сартаваць з - і гэта не з'яўляецца поўным дасканалым рашэнне, але свайго роду, як мы можам зрабіць вярнуцца сюды і зрабіць крыху лепш. Так што ў мяне тут з'яўляецца праграма пад назвай Фибо С. І гэта ў асноўным выкарыстоўвае яшчэ адзін з модуляў вузла называецца Модуль па догляду за дзецьмі Працэс. Так я ўключыў, што ў верхнім роду вроде я зрабіў бы фунт ўключаюць дзіця process.h ці нешта. Цяпер у мяне ёсць доступ да гэтай зменнай СР які мае ўсю функцыянальнасць. Так што цяпер, што я раблю ў гэтым адказе апрацоўшчык я бягу гэтую праграму кропка слэш выдумка 45. Так што я зрабіў - і я проста хачу, выйсці з гэтай праграмы для трохі - з'яўляецца Я напісаў праграму на З, што у асноўным вылічае энного колькасці Фібаначы. Дык вось проста праграма, што я напісаў у С, якая вылічае гэта. Я магу скампіляваць яго, і я магу працаваць гэта ў камандным радку. І гэта будзе вылічыць Лік 45-е Фібаначы. Так заўважыце, што ён проста бярэ у значнай ступені як доўга. Я, верагодна, маглі б выкарыстоўваць працяжнік 03 да аптымізаваць яго ці нешта накшталт гэтага, але я проста зрабіў, як звычайная налады кампілятара. І гэта друкуе яго. Але цяпер, што я накшталт робіш? Эх шкада, так файл. Так што я той жа самы матэрыял з загаловак, як раней. Тады я раблю гэта cp.exec. Так што гэта будзе зрабіць, гэта ён збіраецца запусціць гэтую праграму. Але тое, як гэта працуе ў тым, што ён не збіраецца чакаць што праграма да канца. Гэта проста ў асноўным кажа выканаць гэтую праграму. Таму ў асноўным набярыце ў каманднага радка роду. А потым, калі вы скончыце з гэта, запусціць гэтую функцыю. Так што цяпер мы як-то атрымаць Увесь адноўлены рэч як мы не чакаем. Ці такая сэнс? Да? АЎДЫТОРЫЯ: [неразборліва]? Кевін Шмід: Так што гэта будзе на самой справе адкрыць новы працэс, каб зрабіць гэта. Так што гэта на самай справе, у пэўным сэнсе, зло, ня супер зла, але гэта Важна сказаць, што гэта свайго роду вяртаючыся да, з аднаго боку, Apache мадэль, дзе мы робім патокаў і працэсаў для кожнага запыту або працэсы для кожнага запыту. Так што гэта свайго роду аналагічныя да таго, што Apache робіць. У некаторых выпадках, гэта будзе проста выкарыстоўваць новы нітка, якая трохі больш святла вага, чым працэс, але Apache мог ў канчатковым выніку спараджэння новага працэсу якая з'яўляецца своеасаблівай, што мы робім тут няяўна, робячы кропкавы касой выдумка 45. І то ў гэтым выпадку, мы як бы на сябе адны і тыя ж выдаткі працэсаў. Так што гэта толькі адна рэч, вы можаце зрабіць. Але толькі, каб паказаць гэты від бегу. І гэтыя размовы проста сапраўды накіраваныя на прадстаўляючы такога роду праграм, як спосаб паказаць розныя пункты гледжання на як праектаваць серверы, як гэта. Так што гэта працуе, і то цяпер, калі я раблю гэта зноў, я атрымаў два ідэнтыфікатары працэсаў. Давайце проста казаць пра рэчы, каб адзначыць. Так заўважыць, што яны паступова. Гэта крута. Таму што гэта было 27122 раней. Але звярніце ўвагу зараз, яны вярнуліся прыкладна ў той жа самы час. А цяпер, добры пытанне, каб спытаць пра чаму, што справа, у чые абавязкі быў яго зараз, каб свайго роду робяць гэтыя рэчы выгляд гуляць сумленна адзін з іншыя, гэтыя два асобнікі кропка слэш выдумка 45, што я пабег або што вузел пабег? Хто роду робіць яго справядлівым, што яны абодва атрымаць від збалансаваны час працы? АЎДЫТОРЫЯ: [неразборліва]. Кевін Шмід: Так. Так у асноўным, калі я раблю кропка слэш выдумка 45 або нешта накшталт гэтага, цяпер гэта роду да аперацыйнай сістэмы апрацоўваць выканання гэтых праграм. І цяпер ён можа планаваць іх на розных працэсарах або яго можа планаваць іх. Ён можа нарэзаць час, што адзін Працэсар атрымлівае яго ці што яны атрымліваюць для працы на адным працэсары. Так вось ідэя, што. Ці мае гэта сэнс усім? Так што цяпер вузел на самай справе не гуляе ўдзел у дзяльбы гэтых задач. ОК. Дык вось амаль гэта прыклады. Я проста хацеў паказаць яшчэ адну рэч бо шмат што з гэтага да гэтага часу не цалкам супер практычных у некаторых выпадках. Я магу сабе ўявіць, каб прыходзіць дадому пасля гэтага казаць і нешта і казаў, як, ну я як бы атрымаў з гэтай размовы, што Я магу зрабіць сервер Фібаначы для мой канчатковы праект. Такім чынам, вось толькі выгляд яшчэ адзін прыклад што мы спадзяемся, будзе - можа быць, няма, але, можа быць, - трохі больш за роду стаўленне да канчатковых праектаў і паклапаціцца пра гэта загадзя такія рэчы, як, што. Так што гэта chat.js. Так што гэта накшталт як некаторы ўзор Серверная частка кода, які можна выкарыстоўваць, каб стварыць невялікую чат сервер, як Вы, магчыма, бачылі на Facebook Чат або любы іншы. Так што я не кажу, што гэта, як Facebook Чат, але гэта свайго роду як добры - можа быць, не вельмі добра, але, магчыма, добра - адпраўной кропкай для гутаркі сервер для вашага сайта для канчатковага праекта. Такім чынам, давайце зірнем на тое, што ён робіць. Так мы атрымліваем гэтую адмысловую рэч у верхняй частцы, гэтая пераменная SIO роўна патрабуюць Socket.IO. Так што гэта іншая справа, што гэта не так на самай справе прыходзяць у камплекце з Вузел але вы можаце ўсталяваць яго. Гэта модуль Node. Так што гэта проста, як некаторыя пашырэнне Node. SocketIO на самай справе вельмі крута. Гэта абстракцыя, якая ў асноўным тое, што ён ёсць гэта дазваляе ёсць гэты паток камунікацыі паміж павуціннем браўзэр і вэб-сервер. Так па большай частцы да гэтага часу, у нас былі гэта вельмі хутка за адну секунду або дзве другі сувязі паміж вэб браўзэр і вэб-сервер. Так што гэта ў асноўным ідуць на google.com, Get матэрыял, адправіць яго назад, а затым мы скончылі. Мы ніколі не гаворым зноў, пакуль карыстач уводзіць ў нечым іншым. Але тое, што Socket.IO і падобнага роду рэчы - і SocketIO на самай справе адна з рэчаў, якая пабудавана на якасці WebSocket які з'яўляецца свайго роду даступныя як частка HTML5 - што дазваляе мець гэта працяг дыялогу. І гэта вельмі карысна ў чат-сервера Такія рэчы, таму што гэта накшталт як працяг дыялогу ў некаторыя спосабы, таму што, калі вы ў чаце з кім-то, зараз вы можаце проста адправіць паведамленне ўніз па трубе, а затым сервер можа адправіць паведамленне ўніз трубы да іншага чалавека вы знаходзіцеся чаце з. І тады вы можаце мець гэта абменьвацца так. Так што накшталт таго, што SocketIO добры для. Прычына, па якой SocketIO выкарыстоўвае WebSockets як адно, што ў дадатак да проста старых WebSockets, гэта таксама робіць некаторыя трукі, каб у асноўным зрабіць яго браўзэр, сумяшчальны. Так браўзэры, такія як Internet Explorer на жаль, не падтрымлівае WebSockets прама з скрынкі. Так ён выкарыстоўвае некаторы іншы выгляд крута акуратна рэчы з Adobe Flash, каб дазволіць вам мець падтрымку крос-браўзэра. Так што гэта сапраўды карысна. А на самай справе, я ведаю, я збольшага працуе на час тут, але CS50 Абмеркаваць, вы калі-небудзь бачылі нешта як, я не ведаю,, пусты, таму і так адказваючы на ​​гэты пост ці нешта так, што функцыя? Гэта SocketIO. Таму, калі нехта пачынае друкаваць у абмеркаваць акно, каб зрабіць адказ або нешта, ваш браўзэр што называецца ў SocketIO выпраменьвае нейкую падзея, якое кажа чыйсьці адказваючы на ​​гэты пост. Затым сервер кажа, добра, што я павінен рабіць? Ну цяпер я павінен сказаць гэтым з іншымі хлопцамі хто на CS50 Абмеркаваць гледзячы на гэтай пасадзе, што хто-то адказаць. Так што накшталт таго, што SocketIO з'яўляецца добра для, гэтай працягваецца выгляду паток дыялогу. ОК. Так што ў мяне ёсць тут - і мы проста збіраецца ігнараваць масіў злучэнняў для трохі - што я раблю, я іншы слухаць. Дык вось менавіта так, як у Socket.IO будзе кажучы давайце паслухаем на гэты порт. А потым я раблю гэта на сувязі. Так вось проста ў асноўным гняздо МО спосаб сказаць, калі мы атрымаем злучэнне, я хачу, каб вы каб запусціць гэты код. І заўважце, што замест таго, REC і дазволам прайшлі там у мяне ёсць гнязда. І гэта гняздо ідэя заключаецца ў асноўным гэта , Што вы можаце напісаць і прачытаць ад якога ёсць карыстальніка Паведамлення магчыма. І паведамленні, якія вы б паслаць можа прайсці праз гэта Socket. Ці мае гэта сэнс? Так што гэта, гэта працягваецца рэч. Так што я раблю, гэта я называю Socket.emit. І выпраменьваюць займае даволі шмат два аргументу. Першы аргумент з'яўляецца радком проста, які ўяўляе тып рэч вы выпраменьваючых. Так для гэтага выпадку, у мяне выкарыстанне гэты радок новага паведамлення. І гэта толькі ў асноўным кажуць, што тып гэтай рэчы, тое, што я адпраўкі, з'яўляецца новае паведамленне. Такім чынам, вы можаце слухаць для канкрэтных тыпаў як новае паведамленне або што з дапамогай кропку на. Так злучэнне і карыстальнік адправіў туды, калі вы паглядзіце на тое, дзе мы называем кропка на, тыя, і іншыя радкі, якія прадстаўляюць тыпы паведамленняў карыстальнікаў. Так што гэта ў асноўным вы можаце мець гэтую Emit адзін з гэтых тыпаў паведамленняў, і затым зрабіць нешта ў адказ на адзін з гэтых тыпаў паведамленняў Так што я выпраменьваючых гэтую новае паведамленне. Мы збіраемся ігнараваць connections.push ні на секунду. Але тады я кажу, карыстальнік Socket.on дасланы. Так што зараз гэта накшталт як, калі Карыстальнік пасылае мне паведамленне, я хачу запускаць гэты код. І заўважце, што, што ананімная функцыя прымае ў гэтай зменнай называецца дадзеныя, якія ў асноўным ідуць мець паведамленне карыстальніка. А цяпер давайце кшталту размовы пра масіў злучэння. Так што гэта разлічана на чат-кліент , Дзе ў асноўным усе накшталт у тое ж самае ў чат. Так у асноўным, тое, што мы павінны трымаць вакол некаторых масіў, які ў асноўным прадстаўляе ўсе людзей, боўтацца ў некаторыя спосабы, калі гэта мае сэнс. Ці не так? Таму што мы павінны ведаць, хто гэтыя хлопцы так мы можам паслаць ім паведамленні што іншыя людзі прыйшлі да нас. Так што робіць гэты код, калі карыстальнік пасылае паведамленне - вось тып падзея - мы збіраемся запусціць гэты код. І тое, што мы робім, мы будзем праходзіць праз гэта Масіў, мы назвалі злучэння. І ў значнай ступені для кожнага злучэння за выключэннем аднаго, гэта наша, гэта , Што кажа гэты код, мы адпраўляем новы паведамленне з такім прыкладаецца паведамлення інфармацыя. Так што, калі вы заўважылі, тут, што я зрабіў, калі карыстальнік сапраўды робіць новы злучэнне я дадаў з Метад JavaScript.push, гэта у асноўным проста кажу, як дадаць што гняздо ў якасці значэння ў наша злучэння масіў. Так што цяпер пры выкананні гэтага кода, ён будзе адправіць рэчы для тых, прыватнасці злучэння. Так што гэта можа быць добрай адпраўной кропкай для стварэння чат-сервера ці нешта падобнае. І выгляд выдатна тое, што код, які вы бачыце тут, як на і выпраменьваюць і ўсё ў такім духу тое ж самае выгляд кода JavaScript, якія вы б напісаць у браўзэры ўзаемадзейнічаць з серверам. Дык вось чаму SocketIO збольшага акуратна і карысна такім чынам. Ох, і яшчэ адна рэч, вельмі хутка. Быў апошні праект CS50 ў мінулым годзе , Што ў асноўным рэалізуецца пабалбатаць сервер у Node.js. Я думаю, што гэта Harvardchats.org але я не - ОК. Я не ўпэўнены, што URL з'яўляецца, але Я магу паслаць, што пасля. Але гэта крута, што вы можаце зрабіць з Node.js. Так што я спадзяюся, у агульным, вы, хлопцы, добрае пачуццё, што Node.js карысна і як вы маглі б, можа быць, прымяніць да канчатковага праекта. Я буду пасылаць яшчэ трохі рэсурсы пагадзіцца з гэтым. І дзякуй, што прыйшлі. Дзякуй. [Апладысменты]