Кевін ШМІД: Привіт всім. Ласкаво просимо в 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, він збирається зробити, що запит в значній мірі миттєво в той же час. Так давайте дамо цей постріл. Так що тепер помітите, що він говорить два процеси. І якщо вам цікаво, що 27 000 число в основному процес ID. І зверніть увагу на те, що вони надруковані агов одночасно. Це не було схоже нам довелося чекати п'ять секунд для однієї і то після того, через п'ять секунд отримати другу. Так ось вид, в певному сенсі, це насправді не свідчити, але це інтуїтивне доказ того, що це не просто як очікування п'ять секунд і блокування весь потік. ОК здорово. Аарон поставив запитання раніше, що було, добре, що якщо ми щось зробити - Так? АУДИТОРІЯ: Зачекайте. Як це відрізняється від Е буфера, хоча? Хіба це не автоматично це зробити? Чому ми повинні турбуватися про це? Кевін ШМІД: О, ти міг сказати, що ще раз? АУДИТОРІЯ: Не любить Printf буфер зробити ту ж саму річ? Кевін ШМІД: Буфер Е? АУДИТОРІЯ: Так. ОК. Був не в одному з опитувань вони були говорити про те, якщо ви прямо Е щось, а потім вже він паузу один Друга, а потім у вас є це цикл десять раз, це буде чекати десять секунд і потім Е всі разом? Кевін ШМІД: О, добре. АУДИТОРІЯ: Це робити те ж саме річ, то в цьому випадку? Кевін ШМІД: Таким чином, питання було в основному в одному з колишніх вікторини або щось, виникло питання, що в основному, якщо ви говорите, для друку F 10 речі в той час, а потім спав як в процес друку тих з, в кінці чомусь, що це буде просто звалище тих, все на екрані. Так що начебто двох різних поняття тут. Так що я думаю одне, що в цьому так, що ми маємо справу з двома різними роду люди просять сервер для речей одночасно. І причина того, що Е роду чекає, як це і звалища все це відразу більше пов'язана з як Е роду - тому шлях Е насправді реалізується це в основному повинен поговорити з операційною системою писати що матеріал на консоль. Так що не хочете, щоб зробити все, що матеріал відразу, коли ви говорите Е деякі рядки, бо міг дорого обійтися, якщо він повинен зробити це в будь-який час. Так що, якщо ви робите Е агов, вашу програму не може насправді друкувати, що відразу на консоль. Це можна сказати, добре, я її написав. А потім начебто чекати вас, щоб дати це трохи більше, перш ніж насправді записавши його на консоль. Так що причина, що б це було так - і це частково пов'язані в сон - є те, що сон був свого роду просто вводять туди, щоб продемонструвати Справа в тому, що він не записує це синхронно. Але причина, що це просто продуктивність, так що ви не повинні зробити, що багато контактів операційна система. Але ось те, що ми дійсно намагаємося зробити з цією річчю сну є лише шоу , Що, коли у нас є два людей, які відвідують цей сайт, він не збирається ставити їх в лінії, де він збирається сказати У мене є, щоб допомогти вам, а потім, коли я повністю закінчила допомагати вам після них п'ять секунд, то я збираюся перейти на наступний людини. Так запит першого особи не зв'язати, що цикл подій якщо це має сенс. Але тут насправді приклад чогось, що зв'яже до циклу подій. Отже, ось жахлива функція обчислити п-ю Фібоначчі. Це буквально в гіршу сторону, як ви можете обчислити енної кількості Фібоначчі. І це насправді просто визнати звідки це взялося, там насправді - Я маю на увазі, ви можете спробувати піти знайти його - але є як дуже тривалий блозі повідомлення, що хтось написав. Це як один з тих Reddit речей. Але хтось критикував Node.js, і вони використовували це як приклад. Так що я почасти хотів просто показати вам два різні точки зору тільки, щоб отримати загальне розуміння понять За цими двома речами. Але це вибирається як просто жахливо, жахливо неефективний обчислювально інтенсивне спосіб обчислення енної кількості Фібоначчі. Так само, як примітка боку, чому це жахливо, як у тій? Так? АУДИТОРІЯ: Припустимо, ви починаєте з 1000. 1000 розпадається на 999 і 998. Кожен з цього розпадається на дві речі. Кожен з цього розпадається на дві речі. Кевін ШМІД: Вірно. АУДИТОРІЯ: Всю дорогу вниз. Кевін ШМІД: Абсолютно вірно. Так що просто повторити для камери, якщо я подзвонити Фибо на як 1000 або щось так, це, очевидно, не менше або рівне одиниці, так що я збираюся піти в цей ще випадку, а потім я збираюся подзвонити Фибо 999 плюс Фибо 998. А потім в значній мірі все, що робота, яка Фибо 999 робить вид на цьому рівні. Якщо ви йдете вниз, то це ще більш надлишковим Крім цього, але якщо ви просто думаю обчислення вигадка 998 отримує нам досить близько до Фибо 999. Таким чином, ми повинні дійсно бути трохи більш розумний про те, як ми почасти повторно них, але ми не повторного використання ці речі взагалі. Таким чином, ви можете собі уявити, цей гігантський, гігантський дерево, яке просто жахливо. Але в кожному разі, добре. Так, щоб було вигадка. Це займе деякий час для запуску. Так? АУДИТОРІЯ: [нерозбірливо]. Кевін ШМІД: О, ти міг повторити питання? АУДИТОРІЯ: [нерозбірливо]. Кевін ШМІД: О, так це тільки код що буде свого роду на на стороні сервера. Так що це не буде знайдено в браузері або що-небудь. Це в основному те, що ми є, що коли користувач тут досить багато марок їх прохання знову, коли ми начебто зробити запит, ми збираємося назвати ця функція на стороні сервера. А потім ми отримаємо результат назад від виклику цієї функції. А потім ми просто надрукувати це користувачеві. Таким чином, користувач насправді не справа За допомогою цієї функції занадто багато. Був, що питання? Чи має це сенс? ОК. Круто. Отже, ще раз, ми робимо все це res.writeHead річ, де ми роздрукувати заголовок. А потім я в кінцевому відповідь, роблячи магічне число вигадка 45. Так що давайте просто запустити цей сервер. Так що я збираюся зробити вузол fib.js. Так що тепер моя вигадка сервер працює. А потім тут, я збираюся зробити один з них. ОК? Так що я просто хотів сказати, Curl. Так що це займе якийсь час, але ми сподіваємося, скоро він закінчить і він буде друкувати, що 45-й Число Фібоначчі. АУДИТОРІЯ: [нерозбірливо]. Кевін ШМІД: Він повинен зроблено досить скоро. Так воно і повинно прийняти 5: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 корисно і як ви могли б, можливо, застосувати до кінцевого проекту. Я буду посилати ще трохи ресурси погодитися з цим. І спасибі, що прийшли. Спасибо. [Оплески]