1 00:00:00,000 --> 00:00:08,350 2 00:00:08,350 --> 00:00:09,710 >> Кевін ШМІД: Привіт всім. 3 00:00:09,710 --> 00:00:12,640 Ласкаво просимо в CS50 семінару на Node.js. 4 00:00:12,640 --> 00:00:13,955 Мене звуть Кевін. 5 00:00:13,955 --> 00:00:15,580 Я CS50 TF. 6 00:00:15,580 --> 00:00:17,650 І я ніби як дуже раді про це семінарі. 7 00:00:17,650 --> 00:00:20,430 Я думаю, Node.js дуже здорово. 8 00:00:20,430 --> 00:00:24,200 Я сподіваюся, що цей семінар може бути використаний як хороший, я думаю, трамплін для 9 00:00:24,200 --> 00:00:26,380 деякі з ваших кінцевих проектів, якщо Ви зацікавлені у використанні 10 00:00:26,380 --> 00:00:27,630 щось на зразок Node.js. 11 00:00:27,630 --> 00:00:29,770 12 00:00:29,770 --> 00:00:33,320 >> Ми начебто почати семінар геть тільки що говорили про трохи 13 00:00:33,320 --> 00:00:36,970 вид фону масштабованості перспективи Node.js, а потім 14 00:00:36,970 --> 00:00:39,240 ми будемо рухатися до деяких прикладів коду. 15 00:00:39,240 --> 00:00:42,340 І я буду мати код, вказаний на сайті, і ви можете подивитися на код. 16 00:00:42,340 --> 00:00:45,475 І після семінару, я розберуся розмов про те, як можна налаштувати Node.js 17 00:00:45,475 --> 00:00:48,220 на вашому комп'ютері. 18 00:00:48,220 --> 00:00:48,710 >> ОК. 19 00:00:48,710 --> 00:00:49,760 Так що давайте почнемо. 20 00:00:49,760 --> 00:00:53,700 Так що я думаю, я просто хочу поговорити про веб-сервери, насправді, в першу чергу. 21 00:00:53,700 --> 00:00:59,730 І почати цю дискусію, я в основному мають схему, яка є від 22 00:00:59,730 --> 00:01:04,269 підручник для CS61, які в основному показує взаємодію 23 00:01:04,269 --> 00:01:08,510 між клієнтським процесом, як ваш веб- браузер або як ваш клієнт мети або 24 00:01:08,510 --> 00:01:11,340 щось на зразок цього, і веб-сервер. 25 00:01:11,340 --> 00:01:15,150 Тому такого роду схожий на картина, що ви бачили в лекції на 26 00:01:15,150 --> 00:01:19,270 Середа, де в основному у нас є деякі Процес, як Google Chrome клієнт. 27 00:01:19,270 --> 00:01:22,980 >> А потім перший крок є Клієнт надсилає запит. 28 00:01:22,980 --> 00:01:27,510 Так що може бути щось на зразок добре давайте відвідати, я не знаю,, CS50.net. 29 00:01:27,510 --> 00:01:29,320 Так ми видаємо це прохання. 30 00:01:29,320 --> 00:01:34,280 І хто-небудь згадати назву протокол, який визначає, як, що 31 00:01:34,280 --> 00:01:35,610 Запит повинен бути структурований? 32 00:01:35,610 --> 00:01:36,382 Так. 33 00:01:36,382 --> 00:01:37,650 >> АУДИТОРІЯ: [нерозбірливо]. 34 00:01:37,650 --> 00:01:38,150 >> Кевін ШМІД: Абсолютно вірно. 35 00:01:38,150 --> 00:01:40,100 Так що це, як HTTP, чи не так? 36 00:01:40,100 --> 00:01:44,720 Тому в основному специфікація для як , Що запит має бути фактично поклав 37 00:01:44,720 --> 00:01:47,450 поза, тому що в кінці дня, що запит насправді просто подобається 38 00:01:47,450 --> 00:01:50,240 Рядок, в основному говорить, що я хочу цього. 39 00:01:50,240 --> 00:01:53,580 І специфікація тому що це HTTP. 40 00:01:53,580 --> 00:01:55,270 Так от, як протокол. 41 00:01:55,270 --> 00:01:57,920 >> Отже сервер отримує що запит. 42 00:01:57,920 --> 00:02:01,610 Так ви, хлопці, встановлений веб-сервер в CS50 приладу. 43 00:02:01,610 --> 00:02:02,460 Це Apache. 44 00:02:02,460 --> 00:02:06,230 А на цьому тижні, коли ви працюєте над проблемою встановити сім, ви насправді будете працювати 45 00:02:06,230 --> 00:02:08,160 з цією веб-сервера. 46 00:02:08,160 --> 00:02:12,380 Таким чином, сервер отримує цей запит, і то він повинен роду подряпати його 47 00:02:12,380 --> 00:02:15,090 голова і сказати, як добре, що мені робити з цим? 48 00:02:15,090 --> 00:02:20,060 >> Так на основі того, що він вирішує робити, то це, можливо, доведеться зв'язатися з якоюсь 49 00:02:20,060 --> 00:02:20,730 ресурсу. 50 00:02:20,730 --> 00:02:23,700 І цей ресурс може бути багато різних речей. 51 00:02:23,700 --> 00:02:26,810 З одного боку, це може бути просто як статичного HTML файлу. 52 00:02:26,810 --> 00:02:29,820 Так це може бути просто, як деякі HTML, що, як для 53 00:02:29,820 --> 00:02:31,100 Ваш особистий сайт. 54 00:02:31,100 --> 00:02:35,360 Це може бути статичний файл як образ або як у кіно, що у вас є. 55 00:02:35,360 --> 00:02:37,660 Це може навіть говорити в якійсь базі даних 56 00:02:37,660 --> 00:02:39,530 як бази даних MySQL. 57 00:02:39,530 --> 00:02:43,910 Так що не завжди доводиться спілкуватися з ресурсом, але в 58 00:02:43,910 --> 00:02:45,700 У деяких випадках це могло. 59 00:02:45,700 --> 00:02:47,800 >> Отже, що він збирається робити після цього це збирається 60 00:02:47,800 --> 00:02:49,430 відправити назад відповідь. 61 00:02:49,430 --> 00:02:53,130 І відповідь на це також задається HTTP. 62 00:02:53,130 --> 00:02:54,830 Так то клієнт може отримати його. 63 00:02:54,830 --> 00:02:56,740 Це може розірвати його на частини і обробити його. 64 00:02:56,740 --> 00:03:00,900 І тоді ви отримаєте веб-сторінку як Google або CS50.net або 65 00:03:00,900 --> 00:03:02,240 все, що ви пішли в. 66 00:03:02,240 --> 00:03:03,100 ОК? 67 00:03:03,100 --> 00:03:06,080 >> Так що це основна взаємодія, що ми збираємося мати справу з. 68 00:03:06,080 --> 00:03:08,770 І ми значною мірою буде зосередивши увагу на цій частині 69 00:03:08,770 --> 00:03:10,640 взаємодія, сервер. 70 00:03:10,640 --> 00:03:10,990 ОК. 71 00:03:10,990 --> 00:03:12,210 Круто. 72 00:03:12,210 --> 00:03:15,500 Хто-небудь є які-небудь питання досі? 73 00:03:15,500 --> 00:03:17,720 ОК. 74 00:03:17,720 --> 00:03:22,430 >> Так як ми вже говорили, веб-сервер отримує цей запит HTTP, а потім видає цей 75 00:03:22,430 --> 00:03:24,760 HTTP відповідь. 76 00:03:24,760 --> 00:03:29,100 І, як ми говорили раніше, CS50 прилад веб-сервер Apache. 77 00:03:29,100 --> 00:03:32,490 Тому, коли ви, хлопці, працювати на P встановити сім, ви збираєтеся працювати з 78 00:03:32,490 --> 00:03:34,120 Веб-сервер Apache. 79 00:03:34,120 --> 00:03:37,890 Ви ніколи не будете мати, щоб дійсно працювати з Apache безпосередньо занадто багато. 80 00:03:37,890 --> 00:03:41,920 Ви начебто налаштування Apache трохи при вказівці віртуальні хости або 81 00:03:41,920 --> 00:03:44,970 в V господарі, і ми отримаємо до того, що в небагато. 82 00:03:44,970 --> 00:03:50,620 >> Але в основному, веб-сервер Apache налаштований на роботу з PHP роду 83 00:03:50,620 --> 00:03:51,730 з з коробки. 84 00:03:51,730 --> 00:03:56,170 Так що насправді відбувається, коли ви йдете в одному з ваших сайтів, як, скажімо, 85 00:03:56,170 --> 00:04:00,360 локальний хост слеш index.php або щось, Ваш браузер посилає, що 86 00:04:00,360 --> 00:04:04,330 Запит, а потім Apache сидить там і з'ясовує з ним робити. 87 00:04:04,330 --> 00:04:08,840 І дія це виконати що код в index.php і 88 00:04:08,840 --> 00:04:11,330 потім відправити його назад. 89 00:04:11,330 --> 00:04:15,640 Так що є що. 90 00:04:15,640 --> 00:04:16,980 Так ми начебто говорили про це. 91 00:04:16,980 --> 00:04:21,990 Так він може просто служити статичний файл або запустити деякі PHP код, а потім питання 92 00:04:21,990 --> 00:04:23,510 відгук. 93 00:04:23,510 --> 00:04:27,670 >> Отже загальний питання, яке може прийти до добре, як ми насправді справа 94 00:04:27,670 --> 00:04:31,750 з наявністю декількох користувачів в той же час? 95 00:04:31,750 --> 00:04:36,930 Отже, уявіть, якби ви писали полотна сервер, якщо у вас є веб-сервер, що 96 00:04:36,930 --> 00:04:39,900 ви намагалися написати в чомусь як C або щось на зразок цього, 97 00:04:39,900 --> 00:04:45,150 в основному ви можете думати про те, як там може бути якийсь код, що 98 00:04:45,150 --> 00:04:49,330 б отримати запит, але потім він повинен робити всю цю роботу на ньому. 99 00:04:49,330 --> 00:04:53,060 Вона може мати, наприклад, зверніться бази даних або щось в цьому роді. 100 00:04:53,060 --> 00:04:53,300 Чи не так? 101 00:04:53,300 --> 00:04:56,010 А потім він буде робити такого роду переробки, а потім 102 00:04:56,010 --> 00:04:57,060 відправлені назад відповідь. 103 00:04:57,060 --> 00:04:58,950 Так от, як висока Огляд рівня. 104 00:04:58,950 --> 00:05:04,210 >> Але це не відразу видно, як ви може зробити це так, щоб дві людини або 105 00:05:04,210 --> 00:05:09,040 навіть 1000 людина могла працювати з вашим Веб-сервер одночасно. 106 00:05:09,040 --> 00:05:14,880 Таким чином, рішення, яке використовує Apache називається потоків або процесів. 107 00:05:14,880 --> 00:05:16,770 Таким чином, ви, можливо, чули ці терміни раніше. 108 00:05:16,770 --> 00:05:22,190 Це нормально, якщо у вас немає, але просто думаю, про потоках або процесах, як шляхів 109 00:05:22,190 --> 00:05:26,290 операційна система або програма користувача або щось в цьому роді або веб-сервер 110 00:05:26,290 --> 00:05:28,810 до виду виконати кілька речі відразу. 111 00:05:28,810 --> 00:05:31,760 Таким чином, ви, можливо, чули термін як потоків виконання. 112 00:05:31,760 --> 00:05:34,140 Так що це ніби як ти роду багатозадачності. 113 00:05:34,140 --> 00:05:37,710 >> І якщо ви бачили на полі по вашому ноутбук, або щось на зразок цього, 114 00:05:37,710 --> 00:05:43,040 багатоядерних, що ви можете зробити, це можна запустити дві різні теми, на різні 115 00:05:43,040 --> 00:05:46,700 частини процесора, щоб вони могли насправді відбуватися одночасно. 116 00:05:46,700 --> 00:05:48,100 Так що це дуже потужний. 117 00:05:48,100 --> 00:05:52,270 І це свого роду в Apache Вирішення цієї проблеми. 118 00:05:52,270 --> 00:05:57,900 >> Так є ніби як будь-яких питань при такому підході, хоча? 119 00:05:57,900 --> 00:05:59,870 Так що я думаю, я начебто написав їх там. 120 00:05:59,870 --> 00:06:03,440 Але обидва вони роду використовувати багато пам'яті. 121 00:06:03,440 --> 00:06:07,490 Це дуже дорого для створення нитка або процес. 122 00:06:07,490 --> 00:06:11,750 >> І частина міркувань в тому, що тільки наприклад, коли ви працюєте в програму C 123 00:06:11,750 --> 00:06:15,090 як ваш головний, а потім, що дзвінки інша функція, яка має 124 00:06:15,090 --> 00:06:16,520 якась стека. 125 00:06:16,520 --> 00:06:19,910 Так теми також вимагають повністю окремий стек, який 126 00:06:19,910 --> 00:06:21,220 може бути досить великим. 127 00:06:21,220 --> 00:06:25,170 І якщо ви можете уявити собі, тонн користувачі на ваш сайт, вам доведеться 128 00:06:25,170 --> 00:06:26,280 багато різних потоків. 129 00:06:26,280 --> 00:06:28,230 Це багато стеків для управляти і підтримувати. 130 00:06:28,230 --> 00:06:31,280 Так що це велике споживання пам'яті. 131 00:06:31,280 --> 00:06:35,650 >> А потім, також, скажімо, у вас є тільки один процесор, або, скажімо, у вас є 132 00:06:35,650 --> 00:06:38,460 більше потоків, ніж у вас є ті багатожильних. 133 00:06:38,460 --> 00:06:38,730 Чи не так? 134 00:06:38,730 --> 00:06:43,280 Так скажімо, у вас було 10 теми і у вас тільки п'ять процесорів. 135 00:06:43,280 --> 00:06:46,260 Ви начебто повинні зробити цю річ, де перемиканні між струмом 136 00:06:46,260 --> 00:06:49,090 той, який працює, тому що ви не може виконувати всі 10 відразу. 137 00:06:49,090 --> 00:06:50,980 І це називається перемикання контексту. 138 00:06:50,980 --> 00:06:54,260 І цей термін насправді є кілька різних контекстах, але давайте просто 139 00:06:54,260 --> 00:06:56,620 думати про це як перемикання між двома потоками. 140 00:06:56,620 --> 00:06:59,730 Це може бути досить дорогим, тому що основному те, що вам потрібно зробити, це ви 141 00:06:59,730 --> 00:07:03,340 повинні зупинити те, що ви робите, за винятком стан цього момент потоку, і 142 00:07:03,340 --> 00:07:05,440 потім перемкнутися на інше місце. 143 00:07:05,440 --> 00:07:09,420 >> Чи означає все це за см. мотивація, чому теми та 144 00:07:09,420 --> 00:07:12,030 процеси могли б бути трохи громіздким? 145 00:07:12,030 --> 00:07:13,840 І хіба у вас є питання? 146 00:07:13,840 --> 00:07:14,376 ОК. 147 00:07:14,376 --> 00:07:15,070 Круто. 148 00:07:15,070 --> 00:07:18,090 Хто-небудь є які-небудь питання? 149 00:07:18,090 --> 00:07:19,620 ОК. 150 00:07:19,620 --> 00:07:26,720 >> Так що якщо ми робимо крок назад протягом секунди, там ніби як 151 00:07:26,720 --> 00:07:30,350 Спостереження, що ми можемо зробити про багато веб-додатків. 152 00:07:30,350 --> 00:07:34,810 І це дійсно так багато з них насправді не роблять цього багато корисної 153 00:07:34,810 --> 00:07:37,140 працювати всередині волосині. 154 00:07:37,140 --> 00:07:41,170 Так Хто-небудь почалася P встановити сім взагалі? 155 00:07:41,170 --> 00:07:45,650 Так що ви хочете, може бути, описати деякі з частин? 156 00:07:45,650 --> 00:07:47,850 Чи працювали ви при вході або щось в цьому роді? 157 00:07:47,850 --> 00:07:49,330 >> АУДИТОРІЯ: Ні. 158 00:07:49,330 --> 00:07:49,780 >> Кевін ШМІД: ОК. 159 00:07:49,780 --> 00:07:50,150 Не беріть в голову. 160 00:07:50,150 --> 00:07:50,900 Вибачте. 161 00:07:50,900 --> 00:07:55,790 Але в принципі, в P набору, ви збираюся робити багато роду 162 00:07:55,790 --> 00:07:59,760 запити до бази даних, щоб отримати деякі Інформація з цієї бази даних. 163 00:07:59,760 --> 00:08:03,330 І те, що ваш код буде робити, що це процес Apache або 164 00:08:03,330 --> 00:08:06,030 що Apache потік збираєтеся робити в той час як він повинен зв'язатися 165 00:08:06,030 --> 00:08:08,990 база даних це свого роду буде сидячи там, і це буде 166 00:08:08,990 --> 00:08:12,130 чекає база даних, щоб відповісти. 167 00:08:12,130 --> 00:08:16,290 >> Тепер, коли не може звучати як те, що великий справа, оскільки база даних знаходиться на вашому 168 00:08:16,290 --> 00:08:18,240 CS50 прилад, чи не так? 169 00:08:18,240 --> 00:08:22,930 Але є якась мережі час очікування там, тому що в даний час веб- 170 00:08:22,930 --> 00:08:26,830 сервер повинен видати свій власний запит, щоб база даних для зв'язку з 171 00:08:26,830 --> 00:08:29,520 бази даних і потім отримати, що Інформація тому. 172 00:08:29,520 --> 00:08:33,190 Так що тепер це як добре чекай мене, я збираюся піти отримати щось від 173 00:08:33,190 --> 00:08:35,770 бази даних і потім є велике очікування відбувається. 174 00:08:35,770 --> 00:08:36,870 Чи має це сенс? 175 00:08:36,870 --> 00:08:38,580 >> І для деяких речей це не так уже й погано. 176 00:08:38,580 --> 00:08:41,950 Якщо це просто необхідно, наприклад, запам'ятовуючий пристрій, що не так, як 177 00:08:41,950 --> 00:08:44,100 жахливо затримки введення / виводу. 178 00:08:44,100 --> 00:08:47,110 І коли я кажу, затримки введення / виводу, що я на увазі це як і будь-який вид, як 179 00:08:47,110 --> 00:08:48,290 вихідні дані. 180 00:08:48,290 --> 00:08:52,950 Але отримати доступ до файлу на диску, як якби я хотів, щоб служити статичний HTML 181 00:08:52,950 --> 00:08:57,850 файл, який був на моїй веб-сторінці або щось в цьому роді, я начебто повинні 182 00:08:57,850 --> 00:09:02,310 зупинитися на деякий час, прочитайте файл з диска, а потім в 183 00:09:02,310 --> 00:09:04,400 що процес я чекаю. 184 00:09:04,400 --> 00:09:06,700 Я не роблю корисну роботу. 185 00:09:06,700 --> 00:09:11,270 >> Це не вірно ні на що, але це звичайно в додатках, таких як P набору 186 00:09:11,270 --> 00:09:13,960 сім і багато додатків що ви не 187 00:09:13,960 --> 00:09:15,440 насправді робить багато думати. 188 00:09:15,440 --> 00:09:19,090 І коли я кажу мислення, я маю на увазі як обчислювальної роботи. 189 00:09:19,090 --> 00:09:23,270 Так обчислювальна робота може бути щось як, скажімо, ви хочете, щоб 190 00:09:23,270 --> 00:09:26,590 написати веб-сервер, що просто, обчислений п-число Фібоначчі. 191 00:09:26,590 --> 00:09:29,300 Це не звучить як особливо весело веб-сервер. 192 00:09:29,300 --> 00:09:34,220 Як я не очікував би, що сайт, щоб бути на наступний Facebook, але це деякі 193 00:09:34,220 --> 00:09:35,610 вид обчислювальної роботи. 194 00:09:35,610 --> 00:09:39,570 >> І ви можете собі уявити заміни, що з деякий інший вид цікаво 195 00:09:39,570 --> 00:09:43,070 обчислювальна робота. 196 00:09:43,070 --> 00:09:46,050 Припустимо, ви писали щось розрахованої ступенів 197 00:09:46,050 --> 00:09:49,170 Поділ між двома людьми або щось в цьому роді. 198 00:09:49,170 --> 00:09:51,860 Так що дійсно мають на увазі якусь з розрахунку, чи не так? 199 00:09:51,860 --> 00:09:56,630 І навіть тоді, робити, що ви до цих пір зробити багато чекати, може бути, 200 00:09:56,630 --> 00:09:59,550 у вас є запит до бази даних, щоб подивитися до хто дружить з ким або 201 00:09:59,550 --> 00:10:00,600 щось в цьому роді. 202 00:10:00,600 --> 00:10:03,510 Так що є така поняття обчислювальних робіт. 203 00:10:03,510 --> 00:10:05,260 Чи має це сенс? 204 00:10:05,260 --> 00:10:08,258 Хто-небудь є запитання? 205 00:10:08,258 --> 00:10:11,960 >> О, і я припускаю, що я поклав чату є тому чату сервери є свого роду 206 00:10:11,960 --> 00:10:13,240 ще один хороший приклад. 207 00:10:13,240 --> 00:10:15,250 Чат сервер не має зробити багато думати. 208 00:10:15,250 --> 00:10:18,350 Він просто повинен чекати для людей, щоб відправляти повідомлення і потім, коли 209 00:10:18,350 --> 00:10:19,800 вони, відправити їх. 210 00:10:19,800 --> 00:10:21,050 ОК? 211 00:10:21,050 --> 00:10:23,410 212 00:10:23,410 --> 00:10:28,180 >> Так що просто резюмувати знову, Apache і аналогічних веб-серверів, таких як цього виделкою 213 00:10:28,180 --> 00:10:31,470 багато потоків і процесів, які може бути навіть марнотратно. 214 00:10:31,470 --> 00:10:37,530 Так що я думаю питання, яке може прийти від який ми повинні мати 215 00:10:37,530 --> 00:10:39,610 кілька потоків і процесів? 216 00:10:39,610 --> 00:10:41,890 Що робити, якщо ми просто був один? 217 00:10:41,890 --> 00:10:45,710 >> Так що давайте роду намалювати картину про те, що це буде виглядати. 218 00:10:45,710 --> 00:10:47,810 Так що давайте використовувати тільки один потік. 219 00:10:47,810 --> 00:10:48,660 ОК? 220 00:10:48,660 --> 00:10:52,790 Тільки уявіть це з одним потоком. 221 00:10:52,790 --> 00:10:56,600 >> Давайте припустимо, що ми дійсно не робили що багато корисного - і коли я кажу 222 00:10:56,600 --> 00:10:59,450 корисно, я маю на увазі обчислювальну роботу - 223 00:10:59,450 --> 00:11:01,130 в тих декількох потоків раніше. 224 00:11:01,130 --> 00:11:04,180 Так що давайте роду консолідації все в одному потоці. 225 00:11:04,180 --> 00:11:07,780 Так що, якщо у нас була одна нитка, яка вид просто йде навколо в контурі і 226 00:11:07,780 --> 00:11:10,880 постійно перевіряє зробив щось Новий трапитися. 227 00:11:10,880 --> 00:11:15,130 Так, наприклад, щось нове сталося може означати, що я отримую відповідь від 228 00:11:15,130 --> 00:11:19,310 база даних, або хтось послав мені новий запит HTTP. 229 00:11:19,310 --> 00:11:22,290 Отже, це свого роду подій що сталося, чи не так? 230 00:11:22,290 --> 00:11:26,130 >> А потім, що я можу зробити, коли новачків речі відбуваються в цьому ж потоці 231 00:11:26,130 --> 00:11:30,120 виконання, це один потік виконання, я можу назвати деякий код, який 232 00:11:30,120 --> 00:11:32,410 буде обробляти цю конкретну річ. 233 00:11:32,410 --> 00:11:36,640 Так, наприклад, якби я отримав щось натомість з бази даних, я міг запускати мої 234 00:11:36,640 --> 00:11:40,960 невеликий обчислювальна частина, яка насправді просто готує річ 235 00:11:40,960 --> 00:11:42,620 відправити назад користувачеві. 236 00:11:42,620 --> 00:11:46,710 Так само, що це за сенс? 237 00:11:46,710 --> 00:11:49,940 >> Але те, що дійсно Наслідки цього? 238 00:11:49,940 --> 00:11:50,660 Чи не так? 239 00:11:50,660 --> 00:11:53,730 Тому що ми написали багато коду цього - 240 00:11:53,730 --> 00:11:58,330 і я просто хочу, щоб перейти вперед в слайдах, якщо це нормально. 241 00:11:58,330 --> 00:12:00,930 Так що, якщо ви не заперечуєте, я просто збирається зробити крок назад. 242 00:12:00,930 --> 00:12:03,410 Так що це роду речі називається цикл подій. 243 00:12:03,410 --> 00:12:04,070 ОК? 244 00:12:04,070 --> 00:12:07,240 І це частково основний Ідея Node.js. 245 00:12:07,240 --> 00:12:11,240 >> Так що Node.js дійсно робить як мережа сервер є один потік 246 00:12:11,240 --> 00:12:14,850 що в основному відбувається навколо в циклі як під час одного виду нижнім 247 00:12:14,850 --> 00:12:18,510 капот Node.js це постійно перевірки, оскільки ми отримуємо нові речі? 248 00:12:18,510 --> 00:12:22,720 І потім вона працюватиме обробники що ви створили. 249 00:12:22,720 --> 00:12:26,720 Але хороший питання, щоб запитати, як ми можемо зробити це відбудеться 250 00:12:26,720 --> 00:12:28,090 з існуючих речей? 251 00:12:28,090 --> 00:12:32,440 >> Так що я поклав лінію C коду тут в основному схоже, що це відкриття 252 00:12:32,440 --> 00:12:33,060 подати, правильно? 253 00:12:33,060 --> 00:12:36,090 Я Вона щойно вийшов з альбомом. 254 00:12:36,090 --> 00:12:39,600 Так що мені довелося відкрити їй новий файл. 255 00:12:39,600 --> 00:12:43,810 Так влаштована наша C код для роботи - 256 00:12:43,810 --> 00:12:47,890 і я припускаю, що причина, я вибрав файли було тому що це свого роду такого ступеня, 257 00:12:47,890 --> 00:12:52,000 роботи введення / виводу, що ми зробили в C в почуття, що є вхід вихід. 258 00:12:52,000 --> 00:12:55,070 Так ми називаємо це код, який робить це е відкритим. 259 00:12:55,070 --> 00:12:59,370 А потім на наступному рядку нашої Програма, тепер ми можемо працювати з ф. 260 00:12:59,370 --> 00:13:02,710 >> Так що це буде приклад того, що от як синхронний або 261 00:13:02,710 --> 00:13:06,850 блокуючи тому що в цей першої лінії там ми не чекаємо, поки ми 262 00:13:06,850 --> 00:13:08,110 отримати відкрити файл. 263 00:13:08,110 --> 00:13:12,260 Так на другій лінії, ми знаємо, що ми може працювати з е, але це означає, що 264 00:13:12,260 --> 00:13:16,240 що друга лінія не можу запустити поки перша лінія не буде зроблено. 265 00:13:16,240 --> 00:13:17,760 Чи має це сенс? 266 00:13:17,760 --> 00:13:20,890 >> Так що це було б погано, щоб покласти в обробнику подій. 267 00:13:20,890 --> 00:13:23,920 І причиною тому є те, що цей вид чекає, чи не так? 268 00:13:23,920 --> 00:13:26,500 Так що це повернеться нас до того ж. 269 00:13:26,500 --> 00:13:29,470 І тепер ми навіть не доведеться Перевага декількох потоків або 270 00:13:29,470 --> 00:13:32,390 процеси, тому що ми отримали хто-нить в Node.js. 271 00:13:32,390 --> 00:13:35,496 Чи має це сенс всім? 272 00:13:35,496 --> 00:13:35,990 >> АУДИТОРІЯ: Зачекайте. 273 00:13:35,990 --> 00:13:36,980 Так в чому ж заміна? 274 00:13:36,980 --> 00:13:37,840 >> Кевін ШМІД: О, та так. 275 00:13:37,840 --> 00:13:39,560 Так що я збираюся дістатися до заміна. 276 00:13:39,560 --> 00:13:40,430 ОК. 277 00:13:40,430 --> 00:13:42,960 Так що, якщо у нас було щось , Який виглядав, як це? 278 00:13:42,960 --> 00:13:45,730 Так що, якщо зараз я редагував е відкрити мало? 279 00:13:45,730 --> 00:13:48,370 Так я передаю в те ж саме два аргументи, як раніше. 280 00:13:48,370 --> 00:13:52,610 Я все ще люблю нову пісню що вона вийшла с. 281 00:13:52,610 --> 00:13:57,260 Але я передаю третій річ, яка ця змінна називається код. 282 00:13:57,260 --> 00:14:02,280 >> Але те, що код насправді в цьому контексті? 283 00:14:02,280 --> 00:14:05,360 Це як звичайний змінної C? 284 00:14:05,360 --> 00:14:06,740 Це функція, чи не так? 285 00:14:06,740 --> 00:14:09,450 І це може бути трохи дивно, тому що Я насправді, як зараз проходячи 286 00:14:09,450 --> 00:14:12,320 функціонувати в іншу функцію. 287 00:14:12,320 --> 00:14:14,400 >> Так пара речей, щоб відзначити про це. 288 00:14:14,400 --> 00:14:17,145 Один з них, я насправді не називаючи код функції. 289 00:14:17,145 --> 00:14:20,650 Таким чином, ви не бачите код з залишилося Хлопець, прямо дужка. 290 00:14:20,650 --> 00:14:23,010 Я просто проходив в коді. 291 00:14:23,010 --> 00:14:26,990 А в С, що це буде насправді це дати мені покажчик на що фактична 292 00:14:26,990 --> 00:14:29,740 Код, і то це може запустити його. 293 00:14:29,740 --> 00:14:33,350 Але подумайте про це, як ви передаючи код для запуску, коли 294 00:14:33,350 --> 00:14:35,150 відкритий цей файл. 295 00:14:35,150 --> 00:14:41,430 >> Але що це означає, що в даний час Інша частина моєї програми, які могли б зробити 296 00:14:41,430 --> 00:14:47,050 інші речі, може продовжувати робити інші матеріал у той час як ми, насправді не чекати, але 297 00:14:47,050 --> 00:14:50,890 просто в задній частині наших головах, що У відкритому стані, пробіг цього файлу, що 298 00:14:50,890 --> 00:14:52,130 код у верхній частині. 299 00:14:52,130 --> 00:14:53,390 Чи має це сенс? 300 00:14:53,390 --> 00:14:58,060 >> І тепер ідея Node.js є те, що код в працюємо з ф 301 00:14:58,060 --> 00:15:04,590 частина повинна бути досить коротким і простим і прямий, а не дійсно 302 00:15:04,590 --> 00:15:06,160 дуже великого обсягу обчислень. 303 00:15:06,160 --> 00:15:09,390 Це, можливо, доведеться відкрити інший файл, але що також має бути досить швидко 304 00:15:09,390 --> 00:15:14,710 тому що це має тільки сказати зробити ще один е відкрити, а потім викликати цей інший код. 305 00:15:14,710 --> 00:15:19,100 >> Так просто бути абсолютно ясно, е відкрити, що робить нова пісня Кеті Перрі 306 00:15:19,100 --> 00:15:23,060 зроблено mp3, що збирається досить набагато негайно повернутися. 307 00:15:23,060 --> 00:15:27,820 І тоді ми можемо просто продовжувати робити інші речі, тому що все, що зараз е 308 00:15:27,820 --> 00:15:33,410 відкритий конкурс, який надає сказати основному основний е відкритим кодом відкрити цей файл 309 00:15:33,410 --> 00:15:36,020 і коли ви закінчите відкриття цього файл або коли ви отримаєте його назад, 310 00:15:36,020 --> 00:15:37,480 потім запустити цей код. 311 00:15:37,480 --> 00:15:39,540 Але це не реально працювати цей код. 312 00:15:39,540 --> 00:15:41,815 І у вас було питання? 313 00:15:41,815 --> 00:15:46,180 >> АУДИТОРІЯ: Ви, здається, має на увазі, наскільки раз, що додавання в обчислювальному 314 00:15:46,180 --> 00:15:50,545 інтенсивне код роду перерву [Нерозбірливості] наводиться система. 315 00:15:50,545 --> 00:15:51,795 [Нерозбірливості]? 316 00:15:51,795 --> 00:15:54,450 317 00:15:54,450 --> 00:15:55,290 >> Кевін ШМІД: Це велике питання. 318 00:15:55,290 --> 00:15:59,280 Так що я насправді мають приклад того, як ви могли б інтегрувати в обчислювальному 319 00:15:59,280 --> 00:16:01,090 інтенсивне код в небагато. 320 00:16:01,090 --> 00:16:03,620 Тому, коли ми перейдемо до прикладів коду, Я обов'язково тягнути, що один. 321 00:16:03,620 --> 00:16:04,700 Хіба що в порядку? 322 00:16:04,700 --> 00:16:05,950 Спасибо. 323 00:16:05,950 --> 00:16:07,690 324 00:16:07,690 --> 00:16:08,750 >> Яка була ваша прізвище? 325 00:16:08,750 --> 00:16:10,620 >> АУДИТОРІЯ: Аарон. 326 00:16:10,620 --> 00:16:14,830 >> Кевін ШМІД: Аарон виховує дуже хороший момент, який є те, що якщо б мені довелося 327 00:16:14,830 --> 00:16:18,560 деякі обчислень код в зробити матеріал з е частини, інша частина 328 00:16:18,560 --> 00:16:22,880 моя програма не може працювати і не може слухати для нових запитів або що-небудь, поки всі 329 00:16:22,880 --> 00:16:24,270 що матеріал закінчена. 330 00:16:24,270 --> 00:16:27,390 Так що якщо я пишу Node код в цілому якщо ми не зробимо щось, що я збираюся 331 00:16:27,390 --> 00:16:33,060 запропонувати пізніше, коли ми дивимося на приклади коду, я повинен бути впевнений, що 332 00:16:33,060 --> 00:16:36,060 мій код не пов'язує це цикл подій. 333 00:16:36,060 --> 00:16:38,120 Чи має це сенс? 334 00:16:38,120 --> 00:16:38,350 ОК. 335 00:16:38,350 --> 00:16:40,040 Круто. 336 00:16:40,040 --> 00:16:47,090 >> Так Node.js пропонує ці рамки, що Ви можете побудувати ці події приводом 337 00:16:47,090 --> 00:16:48,210 сервери с. 338 00:16:48,210 --> 00:16:53,460 Так що має такого роду асинхронних без блокування введення / виведення бібліотеки, в той час як 339 00:16:53,460 --> 00:16:56,800 стандартні C бібліотеки, які ми були працювати, як якщо б ви просто 340 00:16:56,800 --> 00:16:59,500 використовувати їх таким же чином, що ми використовував їх з F відкривається і 341 00:16:59,500 --> 00:17:03,000 матеріал, ті, блокують, тому що ви насправді повинні чекати 342 00:17:03,000 --> 00:17:04,470 що файл для відкриття. 343 00:17:04,470 --> 00:17:09,290 >> Але Node.js дає, що і йому в основному накидається на V8 від Google 344 00:17:09,290 --> 00:17:14,030 JavaScript двигун, який є причиною що Chrome настільки швидко при обробці 345 00:17:14,030 --> 00:17:17,040 JavaScript, тому що Тобто цей двигун V8. 346 00:17:17,040 --> 00:17:22,460 Так що я знаю, це звучить, як один з тих, WWDC конференціях розробників річ 347 00:17:22,460 --> 00:17:25,390 де вони просто викинути купу Лист кількість речей для процесорів 348 00:17:25,390 --> 00:17:26,910 і кажуть, що це так здорово. 349 00:17:26,910 --> 00:17:34,200 Але це здорово, що вони зробили це тому, що JavaScript - 350 00:17:34,200 --> 00:17:37,010 або, може бути, якщо ви не знайомі з JavaScript ще тому, що у нас не було 351 00:17:37,010 --> 00:17:38,180 лекції на ньому - 352 00:17:38,180 --> 00:17:40,770 але JavaScript є інтерпретується мову. 353 00:17:40,770 --> 00:17:41,970 >> І це дуже важливий момент теж. 354 00:17:41,970 --> 00:17:45,790 Так що це важливо для нашої мережі сервери, щоб бути швидким, чи не так? 355 00:17:45,790 --> 00:17:49,970 І якщо ми просто бігли Javascript Код, який був інтерпретований тільки з 356 00:17:49,970 --> 00:17:52,130 будь-який старий перекладач це може бути повільним. 357 00:17:52,130 --> 00:17:55,980 Так вузлів вигоди від того, це супер швидкий інтерпретатор V8. 358 00:17:55,980 --> 00:17:59,580 І я не знаю, якщо вони назвали його бо V8 удар в лоб 359 00:17:59,580 --> 00:18:01,110 річ, але добре. 360 00:18:01,110 --> 00:18:07,070 >> Так я підготував кілька прикладів за наступною адресою. 361 00:18:07,070 --> 00:18:10,490 Після семінару, я як би збирається говорити про те, що ви можете отримати Node Set 362 00:18:10,490 --> 00:18:13,570 , Але зараз, я просто як би хочуть ходити через деякі приклади коду. 363 00:18:13,570 --> 00:18:17,250 Так що якщо ви хочете простежити, все Вихідний код доступний там. 364 00:18:17,250 --> 00:18:18,720 ОК? 365 00:18:18,720 --> 00:18:22,280 >> Тому я залишаю цю адресу на трохи. 366 00:18:22,280 --> 00:18:24,440 А потім я просто хочу, щоб перейти в термінал. 367 00:18:24,440 --> 00:18:29,670 368 00:18:29,670 --> 00:18:34,400 Невже все добре з цим URL? 369 00:18:34,400 --> 00:18:37,990 Так що я збираюся перейти на в моєму терміналі тут. 370 00:18:37,990 --> 00:18:42,030 >> Отже, ось код, який У мене є на сьогоднішній день. 371 00:18:42,030 --> 00:18:43,960 Чому б нам не почати з simpler.js файл? 372 00:18:43,960 --> 00:18:49,110 373 00:18:49,110 --> 00:18:52,100 Інша справа, що все це Код збирається записати в 374 00:18:52,100 --> 00:18:56,660 JavaScript, який ви можете або не можете бути знайомі з. 375 00:18:56,660 --> 00:19:00,170 Я думаю, пара речей є те, що багато коду JavaScript є вид 376 00:19:00,170 --> 00:19:04,000 Синтаксис і структура дуже схожа на С, так що ви можете почасти забрати його, як 377 00:19:04,000 --> 00:19:05,020 ви йдете вперед. 378 00:19:05,020 --> 00:19:08,750 Я намагався написати багато починаючи код для цього в способі, яким це 379 00:19:08,750 --> 00:19:11,230 схожий на С, так що це трохи більш читабельним. 380 00:19:11,230 --> 00:19:15,980 Але, як ми просуваємося, я буду демонструючи деякі з додаткових 381 00:19:15,980 --> 00:19:18,980 особливості JavaScript, що є круто. 382 00:19:18,980 --> 00:19:21,510 >> Але давайте подивимося на цю програму зразка. 383 00:19:21,510 --> 00:19:24,820 Я думаю, все це відрізали там. 384 00:19:24,820 --> 00:19:28,500 Я просто хочу, щоб виправити, що реальні швидко, якщо це нормально чи ні. 385 00:19:28,500 --> 00:19:31,400 Я не знаю, що це буде робити. 386 00:19:31,400 --> 00:19:34,660 Хіба що трохи краще? 387 00:19:34,660 --> 00:19:36,510 Чи бачите ви вар та інше? 388 00:19:36,510 --> 00:19:39,320 ОК. 389 00:19:39,320 --> 00:19:44,120 >> Таким чином, перший рядок, як JavaScript версія змінної 390 00:19:44,120 --> 00:19:44,800 Декларація. 391 00:19:44,800 --> 00:19:49,870 Так що просто виділити те, що це буде виглядати в С. Так що це так само, як 392 00:19:49,870 --> 00:19:52,620 мені кажуть індекс дорівнює три або щось в цьому роді. 393 00:19:52,620 --> 00:19:55,740 Так що я не вказати тип. 394 00:19:55,740 --> 00:20:00,780 JavaScript має види, але це дуже динамічно набрав в природі, тому 395 00:20:00,780 --> 00:20:02,580 не передбачає будь-які типу на ньому. 396 00:20:02,580 --> 00:20:03,670 Так він просто повинен вар. 397 00:20:03,670 --> 00:20:05,320 Це як змінної. 398 00:20:05,320 --> 00:20:05,920 ОК? 399 00:20:05,920 --> 00:20:08,340 >> І я дзвоню цієї змінної HTTP. 400 00:20:08,340 --> 00:20:12,480 І на моїй правій стороні, у мене є вираз, що я хочу, щоб покласти в HTTP. 401 00:20:12,480 --> 00:20:14,960 І це говорить вимагають HTTP. 402 00:20:14,960 --> 00:20:18,500 Так що це свого роду схожі включити. 403 00:20:18,500 --> 00:20:22,940 Це трохи більше, як потужний, ніж включити в тому сенсі, що включає 404 00:20:22,940 --> 00:20:26,100 просто скопіюйте і вставте заголовок файл для прототипів функцій або 405 00:20:26,100 --> 00:20:27,930 що з визначеннями типу. 406 00:20:27,930 --> 00:20:30,590 Але вимагають насправді відбувається щоб отримати нам код. 407 00:20:30,590 --> 00:20:33,280 >> Таким чином, ви можете думати про це як імпорту деякий код. 408 00:20:33,280 --> 00:20:37,960 Так десь в модулі Node.js Система або будь-який інший, у них є все це 409 00:20:37,960 --> 00:20:40,790 Код HTTP сервер, так що я просто витяг його для мого власного 410 00:20:40,790 --> 00:20:43,130 особистого користування в цій програмі. 411 00:20:43,130 --> 00:20:44,260 ОК? 412 00:20:44,260 --> 00:20:46,930 >> Тоді я мати цю функцію що я написав. 413 00:20:46,930 --> 00:20:50,330 І зауважте, я не повинен був вказати повертається тип або тип 414 00:20:50,330 --> 00:20:51,140 аргументи ще раз. 415 00:20:51,140 --> 00:20:54,440 Так начебто вільно набрані в Це свого роду почуття. 416 00:20:54,440 --> 00:20:57,290 Два аргументи, що він приймає в, запит і відповідь. 417 00:20:57,290 --> 00:21:02,080 Так от концептуально ніби як знайомі з картинки, яку ми мали 418 00:21:02,080 --> 00:21:05,280 на екрані раніше, тому що ми отримуємо це прохання, що ми 419 00:21:05,280 --> 00:21:06,410 мати від користувача. 420 00:21:06,410 --> 00:21:09,170 І тоді у нас є відповідь, який ми можемо написати речі. 421 00:21:09,170 --> 00:21:15,060 >> Таким чином, перший рядок це робить res.writeHead 200 і потім ця 422 00:21:15,060 --> 00:21:17,070 тип вмісту тексту рівнина. 423 00:21:17,070 --> 00:21:19,300 Так що давайте зібрати це крім небагато. 424 00:21:19,300 --> 00:21:22,340 Так що давайте просто зосередитися на res.write для трохи. 425 00:21:22,340 --> 00:21:28,420 Так пишуть в основному, і написати голову, просто способи роду виписати 426 00:21:28,420 --> 00:21:29,960 речі у відповідь. 427 00:21:29,960 --> 00:21:30,770 ОК? 428 00:21:30,770 --> 00:21:36,230 Так що пишіть голову, якщо хто-небудь пам'ятає від HTTP лекції, ви, хлопці, 429 00:21:36,230 --> 00:21:39,940 пам'ятаю заголовки в Верхня частина HTTP речі? 430 00:21:39,940 --> 00:21:43,580 Так чому б мені просто не демо заголовки дійсно швидко. 431 00:21:43,580 --> 00:21:44,640 Це було б корисним? 432 00:21:44,640 --> 00:21:45,500 Або ми повинні тільки вид - 433 00:21:45,500 --> 00:21:46,070 ОК. 434 00:21:46,070 --> 00:21:46,740 Звичайно. 435 00:21:46,740 --> 00:21:52,340 >> Тому, коли ваш браузер йде в google.com або щось в цьому роді, 436 00:21:52,340 --> 00:21:54,250 там насправді трохи більше - 437 00:21:54,250 --> 00:21:55,380 це як таємницю - 438 00:21:55,380 --> 00:21:58,340 там походить трохи додаткової інформації , Який приходить через трубу, ніж просто 439 00:21:58,340 --> 00:22:00,180 трохи пошук і все. 440 00:22:00,180 --> 00:22:03,550 Таким чином, щоб показати вам це, я збираюся використовувати програму під назвою Curl. 441 00:22:03,550 --> 00:22:04,260 ОК? 442 00:22:04,260 --> 00:22:08,020 Так це те, що ви можете працювати на командний рядок Mac OSX або в 443 00:22:08,020 --> 00:22:09,830 Прилад або будь-який інший. 444 00:22:09,830 --> 00:22:17,050 І тому, якщо я Curl HTTP google.com, Я збираюся побачити HTML. 445 00:22:17,050 --> 00:22:21,230 І це, справедливості заради, просто HTML такого роду говорить вам, щоб 446 00:22:21,230 --> 00:22:24,695 перенаправити на WWW, якщо ваш браузер не автоматично обробляти 447 00:22:24,695 --> 00:22:27,110 перенаправлення. 448 00:22:27,110 --> 00:22:33,390 >> Так що це тільки HTML, але я збираюся Додати в Curl цю дефіс Я прапором. 449 00:22:33,390 --> 00:22:33,600 ОК? 450 00:22:33,600 --> 00:22:35,600 І це збирається показати мені заголовки. 451 00:22:35,600 --> 00:22:40,640 Так що це також інформація, яка надходить через коли я отримую таку відповідь. 452 00:22:40,640 --> 00:22:41,260 ОК? 453 00:22:41,260 --> 00:22:45,320 >> Так на самому верху, ви бачите це HTTP 301 постійно рухатися. 454 00:22:45,320 --> 00:22:49,470 І це свого роду важливо, тому що це відноситься до коду статусу. 455 00:22:49,470 --> 00:22:53,750 Таким чином, 301 ось код статусу, який є в основному тільки ціле число 456 00:22:53,750 --> 00:22:57,750 , Який вказує браузеру або хто б не Прочитавши це, якщо ви робите вигляд, що 457 00:22:57,750 --> 00:23:01,460 ти браузер і ви бачите це, в основному зараз, якщо ви подивитеся на 458 00:23:01,460 --> 00:23:04,960 що і ви бачите 301, ви знаєте, у мене є зробити щось особливе на основі 459 00:23:04,960 --> 00:23:08,810 301, або щось особливе сталося на підставі 301. 460 00:23:08,810 --> 00:23:12,640 Так він говорить переїхав на постійне проживання. 461 00:23:12,640 --> 00:23:17,700 >> І те, в основному, у нас є купа пар ключ-значення. 462 00:23:17,700 --> 00:23:22,100 Отже, ми отримуємо розташування є www.google.com. 463 00:23:22,100 --> 00:23:25,190 А потім начебто все це інші речі, але в основному, те, що розташування 464 00:23:25,190 --> 00:23:29,662 приказка нове місце знаходиться на www.google.com. 465 00:23:29,662 --> 00:23:33,800 Так що тепер, якщо ви йдете в google.com, ви будете роду см. браузера роду мить 466 00:23:33,800 --> 00:23:38,770 на секунду, а потім перенаправити вас назад до www.google.com. 467 00:23:38,770 --> 00:23:41,840 Таким чином, відповіді можуть містити ці заголовки. 468 00:23:41,840 --> 00:23:43,330 >> І кілька речей, щоб вказати. 469 00:23:43,330 --> 00:23:46,890 Так скажімо, ми були фактично успішним у відвідуванні веб-сторінки. 470 00:23:46,890 --> 00:23:49,040 Отже, дозвольте мені перейти до - 471 00:23:49,040 --> 00:23:51,080 що таке хороший сайт? 472 00:23:51,080 --> 00:23:53,285 Я погано мислення добре сайти на місці. 473 00:23:53,285 --> 00:23:53,640 >> АУДИТОРІЯ: Wikipedia. 474 00:23:53,640 --> 00:23:54,160 >> Кевін ШМІД: ОК. 475 00:23:54,160 --> 00:23:56,040 Давайте зробимо Вікіпедію. 476 00:23:56,040 --> 00:23:58,680 Так от, я був переміщений. 477 00:23:58,680 --> 00:23:59,240 Ой, зачекайте. 478 00:23:59,240 --> 00:24:00,160 Був я? 479 00:24:00,160 --> 00:24:00,890 Так, я був. 480 00:24:00,890 --> 00:24:01,100 ОК. 481 00:24:01,100 --> 00:24:03,005 Так що я повинен робити WWW. 482 00:24:03,005 --> 00:24:06,006 Так що я збираюся зробити WWW. 483 00:24:06,006 --> 00:24:09,680 І як ви можете бачити, тут все HTML , Що браузер буде обробляти 484 00:24:09,680 --> 00:24:10,910 для Вікіпедії. 485 00:24:10,910 --> 00:24:14,055 >> Але якщо я буду продовжувати прокрутки вгору тут, що я буду бачити у верхній - 486 00:24:14,055 --> 00:24:17,800 нічого собі, є багато HTML в Вікіпедії - 487 00:24:17,800 --> 00:24:22,550 але те, що я бачу у верхній тут це 200 код стану на відміну від 488 00:24:22,550 --> 00:24:24,570 301, що я бачив раніше. 489 00:24:24,570 --> 00:24:27,100 І зауважте, що у нього є хороший доброзичливий ОК поруч з ним. 490 00:24:27,100 --> 00:24:29,470 Так що це як хороший кодом стану. 491 00:24:29,470 --> 00:24:31,160 >> Чи виглядає, що 200 номер знайомі? 492 00:24:31,160 --> 00:24:34,120 493 00:24:34,120 --> 00:24:39,880 Та тому що, коли я зробив simpler.js, Я написав 200 там. 494 00:24:39,880 --> 00:24:43,290 Так от в основному говорять сказати браузеру або той, хто намагається дістатися до 495 00:24:43,290 --> 00:24:45,440 це, що вони були успішними. 496 00:24:45,440 --> 00:24:49,040 Або те, що ніби як ми були успішними теж. 497 00:24:49,040 --> 00:24:54,320 >> І є така спеціальним синтаксисом в Javascript для оголошення 498 00:24:54,320 --> 00:24:59,870 Карта з цих клавіш, як тип вмісту і ці значення як текст рівнині. 499 00:24:59,870 --> 00:25:03,780 Так що, якщо ви подивитеся на відповідь, що ми повернувся з Вікіпедії і раніше, - 500 00:25:03,780 --> 00:25:06,200 Я збираюся спробувати прокрутити до трохи швидше - 501 00:25:06,200 --> 00:25:09,900 у вас є ці ключі, як сервер і ці значення Apache. 502 00:25:09,900 --> 00:25:12,120 Отже, ви отримали ключі і значення. 503 00:25:12,120 --> 00:25:15,930 І ви можете вказати це в Node що відправити назад. 504 00:25:15,930 --> 00:25:19,380 >> Так що це насправді вид, в деяких способи, і в деяких відносинах це не 505 00:25:19,380 --> 00:25:23,170 дійсно, але це трохи нижчий рівень ніж код PHP, що ви могли б бути 506 00:25:23,170 --> 00:25:26,980 писати для P встановити сім, тому що PHP і Apache роду піклуватися про деякі 507 00:25:26,980 --> 00:25:28,150 з цих речей для вас. 508 00:25:28,150 --> 00:25:32,520 У PHP, ви можете перевизначити значення за замовчуванням поведінку, написавши свої власні заголовки. 509 00:25:32,520 --> 00:25:35,520 Але для цілей це, ми отримуємо виписати наші власні заголовки. 510 00:25:35,520 --> 00:25:38,210 511 00:25:38,210 --> 00:25:41,105 >> Чи означає це, лінія має сенсу все, глава записи лінія? 512 00:25:41,105 --> 00:25:41,380 ОК. 513 00:25:41,380 --> 00:25:42,280 Приголомшливо. 514 00:25:42,280 --> 00:25:45,870 >> Так що я зробити, це я в кінцевому відповідь сказавши привіт світ. 515 00:25:45,870 --> 00:25:47,040 ОК. 516 00:25:47,040 --> 00:25:49,920 Але це тільки функція називається обробник запитів. 517 00:25:49,920 --> 00:25:53,510 Так що тепер я насправді потрібно роду робити щось з цією функцією, чи не так? 518 00:25:53,510 --> 00:25:59,170 >> Так от те, що я роблю, це там це лінія, яка робить рівних УАГ сервера 519 00:25:59,170 --> 00:26:03,530 HTTP.create сервер, а потім я пройти в обробник запиту. 520 00:26:03,530 --> 00:26:06,080 Так що це свого роду Вузла спосіб створення сервера. 521 00:26:06,080 --> 00:26:08,790 І зауважте, що я передаю в обробник запиту. 522 00:26:08,790 --> 00:26:12,290 Так що це говорить createServer Функція, що я хочу, щоб ти мене 523 00:26:12,290 --> 00:26:16,270 сервер, і коли отримує, що сервер відповідь, мені потрібно, щоб назвати це 524 00:26:16,270 --> 00:26:18,680 запросити функцію обробника. 525 00:26:18,680 --> 00:26:18,990 ОК? 526 00:26:18,990 --> 00:26:22,290 >> Так що лінія в значній мірі закінчується відразу ж. 527 00:26:22,290 --> 00:26:28,780 Таким чином, сервер лінія вар зроблено правильно після цього в значній мірі. 528 00:26:28,780 --> 00:26:31,770 Я маю на увазі, він повинен налаштувати деякі внутрішні Держава знати, що ви повинні були б 529 00:26:31,770 --> 00:26:35,400 виклику цієї функції обробника запиту, але він не збирається сидіти і 530 00:26:35,400 --> 00:26:37,730 скажімо має користувачеві відправляється мені запит ще? 531 00:26:37,730 --> 00:26:39,270 Має користувач надіслав мені запит ще? 532 00:26:39,270 --> 00:26:40,780 Так що не блокує. 533 00:26:40,780 --> 00:26:41,650 ОК? 534 00:26:41,650 --> 00:26:46,120 >> Так що ж це буде робити це в основному тепер зберігає покажчик на цей код, 535 00:26:46,120 --> 00:26:49,670 це прохання функція обробника, а потім працюватиме цей код, коли хтось 536 00:26:49,670 --> 00:26:52,170 робить запит. 537 00:26:52,170 --> 00:26:54,120 А потім ми робимо server.listen. 538 00:26:54,120 --> 00:26:56,950 539 00:26:56,950 --> 00:26:59,960 >> 1337, там досить довільно. 540 00:26:59,960 --> 00:27:02,285 У мене не було особливих причин для збору цей номер. 541 00:27:02,285 --> 00:27:03,860 Це було зовсім випадково. 542 00:27:03,860 --> 00:27:07,010 Але це тільки вказує порт. 543 00:27:07,010 --> 00:27:10,640 Так більшість веб-серверів ви побачите, що вони використовувати порт 80, тому що це свого роду 544 00:27:10,640 --> 00:27:11,810 начебто конвенції. 545 00:27:11,810 --> 00:27:16,170 Так що, якщо я йду на щось подібне, Я не знаю,, Wikipedia.org, 546 00:27:16,170 --> 00:27:17,700 і я поклав товсту кишку 8 - 547 00:27:17,700 --> 00:27:18,610 о, нічого собі, ви не можете бачити, що. 548 00:27:18,610 --> 00:27:19,370 Мені дуже шкода. 549 00:27:19,370 --> 00:27:21,820 Але якщо я Вікіпедію - 550 00:27:21,820 --> 00:27:24,810 Я напишу його тут просто так, що зрозуміло, на камері. 551 00:27:24,810 --> 00:27:29,150 Але якщо я візьму це в браузері з двокрапка 80, що вказує перейти до 552 00:27:29,150 --> 00:27:31,430 Wikipedia.org на порт 80. 553 00:27:31,430 --> 00:27:36,200 Так що це як те, як Сполучені Штати кілька портів, як, де ви можете відправити 554 00:27:36,200 --> 00:27:37,440 речі для виду. 555 00:27:37,440 --> 00:27:40,730 Так що це, як піти в цей особливий розмістити на цьому сервері. 556 00:27:40,730 --> 00:27:40,990 ОК. 557 00:27:40,990 --> 00:27:45,730 >> Так що я просто вибрав 1337. 558 00:27:45,730 --> 00:27:47,910 Там цілий діапазон чисел що ви можете вибрати. 559 00:27:47,910 --> 00:27:50,390 Це не було повністю особливим. 560 00:27:50,390 --> 00:27:54,560 >> Але те, що я збираюся зробити зараз це я збираюся запустити вузол. 561 00:27:54,560 --> 00:27:59,730 Дозвольте мені насправді ввести, що пара лінії вниз, так що ви можете побачити його. 562 00:27:59,730 --> 00:28:03,130 Я збираюся зробити вузол, і я збирається запустити simpler.js. 563 00:28:03,130 --> 00:28:06,880 І ми будемо говорити про те, як отримати Вузол створений в небагато. 564 00:28:06,880 --> 00:28:09,350 Але тепер це просто управляти сервером. 565 00:28:09,350 --> 00:28:14,360 >> Таким чином, одна річ, яку ми можемо спробувати, який не може те, що цікаво, ми можемо насправді 566 00:28:14,360 --> 00:28:16,300 спробі доступу до нього в Curl. 567 00:28:16,300 --> 00:28:20,680 Так що я можу зробити Curl, і мій Машина локальний хост. 568 00:28:20,680 --> 00:28:24,600 Ви також побачите, що це написано як це іноді. 569 00:28:24,600 --> 00:28:29,810 Часовий господар і 127.0.0.1 ласкаві начебто вашого домашнього комп'ютера. 570 00:28:29,810 --> 00:28:33,180 Так що це як розмовляти з ваш власний комп'ютер. 571 00:28:33,180 --> 00:28:33,760 ОК. 572 00:28:33,760 --> 00:28:36,030 >> І тоді я можу сказати, 1337. 573 00:28:36,030 --> 00:28:39,630 Так що, якщо я запускаю цей рядок коду, він говорить привіт світ. 574 00:28:39,630 --> 00:28:44,050 І якби я хотів бачити, що матеріал, який був текст типу контенту простий або 575 00:28:44,050 --> 00:28:46,560 все, що я міг навіть поставити це тут. 576 00:28:46,560 --> 00:28:48,810 І зауважте, що це дійсно говорить ОК. 577 00:28:48,810 --> 00:28:50,810 І у мене є текстовий рівнину. 578 00:28:50,810 --> 00:28:53,140 А тут ще ніби все це інша речі, які вузол додасть в 579 00:28:53,140 --> 00:28:54,440 там для мене. 580 00:28:54,440 --> 00:28:55,700 Це не супер важливо. 581 00:28:55,700 --> 00:28:58,230 >> Я маю на увазі, є якась технічна аспекти в той ласкаві 582 00:28:58,230 --> 00:29:02,280 круто говорити, але просто щоб показати, Ви, я також мають право 583 00:29:02,280 --> 00:29:03,070 змінити їх навколо. 584 00:29:03,070 --> 00:29:06,280 Тому я можу тільки додати купу з все в такому дусі. 585 00:29:06,280 --> 00:29:11,780 І то тепер, якщо я дивлюся в моєму вихід, це буде що. 586 00:29:11,780 --> 00:29:19,740 Таким чином, ці заголовки на увазі певні речі до браузерів тощо. 587 00:29:19,740 --> 00:29:23,040 >> І заголовки можуть в основному розповісти браузер як реагувати на щось. 588 00:29:23,040 --> 00:29:26,280 Якщо ви коли-небудь чули про печиво і раніше, або якщо ви коли-небудь були роздратовані 589 00:29:26,280 --> 00:29:29,330 Встановивши печиво веб-сторінки, або не включено печива блоку або 590 00:29:29,330 --> 00:29:30,320 щось в цьому роді. 591 00:29:30,320 --> 00:29:33,040 Ви насправді можете встановити печиво в цих заголовків. 592 00:29:33,040 --> 00:29:36,990 Так вони говорять браузеру, як поведінку в деяких випадках. 593 00:29:36,990 --> 00:29:37,750 ОК. 594 00:29:37,750 --> 00:29:40,310 >> Так, щоб було simpler.js. 595 00:29:40,310 --> 00:29:42,780 Хто-небудь є які-небудь питання на цьому файлі з вихідним кодом? 596 00:29:42,780 --> 00:29:45,420 597 00:29:45,420 --> 00:29:45,610 ОК. 598 00:29:45,610 --> 00:29:46,490 Круто. 599 00:29:46,490 --> 00:29:50,780 >> Так що давайте видалити р від і подивитися на simple.js. 600 00:29:50,780 --> 00:29:53,010 Так що це в значній мірі та ж програма. 601 00:29:53,010 --> 00:29:56,030 Я просто написав її трохи по-іншому тому що я хотів, щоб розібратися в підсвічуванням 602 00:29:56,030 --> 00:29:57,850 деякі особливості JavaScript. 603 00:29:57,850 --> 00:30:03,880 >> Так помітити, що обробник запитів функція повністю зникли. 604 00:30:03,880 --> 00:30:05,800 О так, ти є запитання? 605 00:30:05,800 --> 00:30:08,200 >> Аудиторія: Да уж, аргументи , Які передаються в тому, що 606 00:30:08,200 --> 00:30:10,120 Функція, які вони? 607 00:30:10,120 --> 00:30:12,050 >> Кевін ШМІД: Отже, це JavaScript об'єкти. 608 00:30:12,050 --> 00:30:15,230 У документації Node.js, це в основному говорить, що методи 609 00:30:15,230 --> 00:30:15,910 є на них. 610 00:30:15,910 --> 00:30:19,602 Ми просто, виявляється, мають доступ до цей метод називається голова і кінець запису 611 00:30:19,602 --> 00:30:20,730 і все в такому дусі. 612 00:30:20,730 --> 00:30:22,590 Але є цілий букет кілька методів. 613 00:30:22,590 --> 00:30:27,670 >> І наприклад, як один з них зокрема, на річок, ви можете зробити 614 00:30:27,670 --> 00:30:34,540 щось на зразок rec.method який буде сказати вам, чи є це HTTP GET або 615 00:30:34,540 --> 00:30:36,780 HTTP POST запити і такі речі, як, що. 616 00:30:36,780 --> 00:30:39,100 Таким чином, є всі види відрізняються властивості, але вони обидва 617 00:30:39,100 --> 00:30:42,560 JavaScript об'єкти, і вони просто є функції, додані до них, що вам 618 00:30:42,560 --> 00:30:43,850 можете написати речі. 619 00:30:43,850 --> 00:30:45,520 ОК? 620 00:30:45,520 --> 00:30:49,030 >> Так помітити, що обробник запитів повністю зник. 621 00:30:49,030 --> 00:30:52,650 Але код, який я мав у запиті обробник раніше існує. 622 00:30:52,650 --> 00:30:56,520 Я до сих пір цей res.writeHead і я до сих пір цей res.end. 623 00:30:56,520 --> 00:31:00,270 І те, що це є прикладом в JavaScript є ця ідея 624 00:31:00,270 --> 00:31:01,460 анонімна функція. 625 00:31:01,460 --> 00:31:04,180 і анонімний, як відповідна назва для нього, тому що він що буквально не 626 00:31:04,180 --> 00:31:05,180 мати ім'я. 627 00:31:05,180 --> 00:31:07,900 Там немає запиту немає функції обробник там. 628 00:31:07,900 --> 00:31:10,110 >> не має імені, але він як і раніше приймає аргумент. 629 00:31:10,110 --> 00:31:12,250 Так що я ще є запис і дозволом. 630 00:31:12,250 --> 00:31:16,180 І я досі код. 631 00:31:16,180 --> 00:31:18,930 Це прекрасно JavaScript код. 632 00:31:18,930 --> 00:31:22,540 Так що я можу оголосити функцію без явно даючи йому ім'я. 633 00:31:22,540 --> 00:31:24,250 Це трохи заплутаним на перший. 634 00:31:24,250 --> 00:31:26,230 Є деякі, як корисні речі що ви можете зробити з 635 00:31:26,230 --> 00:31:28,450 ці анонімні функції. 636 00:31:28,450 --> 00:31:32,100 Хто-небудь є які-небудь питання з цього приводу, або це добре тільки для, на даний момент, 637 00:31:32,100 --> 00:31:34,130 роду просто визнати, що це буде робити те ж саме? 638 00:31:34,130 --> 00:31:36,700 639 00:31:36,700 --> 00:31:37,125 Так? 640 00:31:37,125 --> 00:31:38,680 >> АУДИТОРІЯ: Чи є функції спочатку клас в JavaScript? 641 00:31:38,680 --> 00:31:41,020 >> Кевін ШМІД: Вони спочатку клас в JavaScript. 642 00:31:41,020 --> 00:31:45,490 І точно знаю, що ці поняття переходячи в анонімній функції як 643 00:31:45,490 --> 00:31:49,600 це відноситься до JavaScript, що ви може написати у вашому остаточного проекту для 644 00:31:49,600 --> 00:31:51,260 веб-браузер теж. 645 00:31:51,260 --> 00:31:56,700 Так, наприклад, в JavaScript в ваш браузер, це також декілька подій 646 00:31:56,700 --> 00:32:00,680 в'їхав у тому сенсі, що те, що ви будете Тобто, коли користувач клацає цей 647 00:32:00,680 --> 00:32:02,640 Кнопка, я хочу, щоб ви запустите цей код. 648 00:32:02,640 --> 00:32:07,070 >> Так що це той же самий вид ідей на стороні клієнта, коли клацання миші або вони 649 00:32:07,070 --> 00:32:09,870 миші на деяке зображення на вашому веб-сторінки, запустити цей код. 650 00:32:09,870 --> 00:32:11,350 Це можна застосувати до серверів. 651 00:32:11,350 --> 00:32:16,380 Так що ніби як цікаво Причина, чому JavaScript є дійсно 652 00:32:16,380 --> 00:32:19,810 підходящі або деякі люди думають, що це підходить мову для цього виду 653 00:32:19,810 --> 00:32:22,530 Сервер водій подія, тому що у вас є ці анонімні функції. 654 00:32:22,530 --> 00:32:26,150 У вас є вся ідея це асинхронний код. 655 00:32:26,150 --> 00:32:27,060 ОК. 656 00:32:27,060 --> 00:32:30,360 Хто-небудь є які-небудь питання? 657 00:32:30,360 --> 00:32:30,470 >> ОК. 658 00:32:30,470 --> 00:32:33,440 Так, щоб було simple.js. 659 00:32:33,440 --> 00:32:38,070 Отже, давайте поглянемо на ще один або ще пару. 660 00:32:38,070 --> 00:32:42,040 Так що це sleep.js. 661 00:32:42,040 --> 00:32:47,160 Так хто-небудь знайомий з функція сну C? 662 00:32:47,160 --> 00:32:50,936 С може бути, один з ранніх лекцій або щось в цьому роді? 663 00:32:50,936 --> 00:32:54,650 >> Тому в основному ви можете передати в я думаю кількість секунд або якщо ви використовуєте U 664 00:32:54,650 --> 00:32:57,080 спати число мілісекунд або наносекунд. 665 00:32:57,080 --> 00:33:00,450 І в основному програма буде просто зупинитися працює для того кількості часу. 666 00:33:00,450 --> 00:33:01,280 Чи не так? 667 00:33:01,280 --> 00:33:06,970 А потім прокинеться зрештою і то це буде просто продовжувати працювати 668 00:33:06,970 --> 00:33:08,340 програма. 669 00:33:08,340 --> 00:33:12,740 >> Так цей сервер роду дає враження від сну. 670 00:33:12,740 --> 00:33:17,580 Так помітити, що у нас є те ж саме res.writeHead 200 із заголовком, як 671 00:33:17,580 --> 00:33:22,130 і раніше, але тоді ми називаємо це Функція називається набір тайм-аут. 672 00:33:22,130 --> 00:33:26,170 Встановіть тайм-аут також доступний в ваш веб-браузер Google Chrome 673 00:33:26,170 --> 00:33:28,000 або Safari або будь-який інший. 674 00:33:28,000 --> 00:33:31,720 І в основному, що він робить тут буде це займає у функції. 675 00:33:31,720 --> 00:33:33,360 Зверніть увагу, знову ж, це анонімна функція. 676 00:33:33,360 --> 00:33:36,310 Так от круто, тому що ми використовуючи анонімну функцію в 677 00:33:36,310 --> 00:33:38,950 анонімна функція, яка може бути трохи дивно. 678 00:33:38,950 --> 00:33:42,270 >> Але це займає цю функцію, яка в основному говорять - і те, як це 679 00:33:42,270 --> 00:33:47,430 Роботи в 5000 мілісекунд, я хочу вам виконувати цю функцію, 680 00:33:47,430 --> 00:33:50,830 просто закінчується відповідь і записує агов. 681 00:33:50,830 --> 00:33:56,730 Так що це справляє враження, як спати, але те, як це насправді 682 00:33:56,730 --> 00:33:59,780 працює, ми будемо проходити через ця лінія дуже швидко. 683 00:33:59,780 --> 00:34:01,190 Ми просто писати щось. 684 00:34:01,190 --> 00:34:03,780 І тоді ми будемо також запустити через ця лінія дуже швидко. 685 00:34:03,780 --> 00:34:08,620 Так що ми насправді не збирається чекати п'ять секунд. 686 00:34:08,620 --> 00:34:11,370 Ми просто збираємося запустити цей код миттєво. 687 00:34:11,370 --> 00:34:14,219 >> А тут ще, знову ж, це трохи цикл подій, що в даний час ця справа 688 00:34:14,219 --> 00:34:17,570 регістри, що в основному є просто постійно відбувається по колу 689 00:34:17,570 --> 00:34:21,620 і, дивлячись на годинник в один нитку і приказка, має п'ять секунд 690 00:34:21,620 --> 00:34:22,360 Минуло ще? 691 00:34:22,360 --> 00:34:26,409 А потім, коли він бачить, що другий рука рухалася, як п'ять секунд або 692 00:34:26,409 --> 00:34:29,190 все, то прокидається і говорить: ой, що я повинен робити? 693 00:34:29,190 --> 00:34:30,350 О, я повинен виконати цей код. 694 00:34:30,350 --> 00:34:33,110 А потім він збирається запустити res.end агов. 695 00:34:33,110 --> 00:34:35,360 >> Отже, ще раз, ми ніколи не чекали тут. 696 00:34:35,360 --> 00:34:38,590 Так що це не те, що цей код всередині ця функція буде приймати п'ять 697 00:34:38,590 --> 00:34:39,900 секунд для запуску. 698 00:34:39,900 --> 00:34:43,090 Цей код буде працювати в значній мірі миттєво, принаймні, щодо 699 00:34:43,090 --> 00:34:46,139 п'ять секунд, що ми говорили про раніше раніше. 700 00:34:46,139 --> 00:34:52,100 >> Так тільки, щоб показати це в дії, Я можу зробити Node.sleep.js. 701 00:34:52,100 --> 00:34:55,159 І я безлад щось? 702 00:34:55,159 --> 00:34:56,310 Можливо. 703 00:34:56,310 --> 00:34:57,410 Вибачте. 704 00:34:57,410 --> 00:34:59,530 Давайте подивимося, що ми можемо зробити, щоб виправити це. 705 00:34:59,530 --> 00:35:10,830 706 00:35:10,830 --> 00:35:12,080 ОК. 707 00:35:12,080 --> 00:35:15,460 708 00:35:15,460 --> 00:35:17,464 Так виразно використовувати Node.js. 709 00:35:17,464 --> 00:35:19,440 Жартую. 710 00:35:19,440 --> 00:35:19,570 ОК. 711 00:35:19,570 --> 00:35:20,820 Тільки один сек. 712 00:35:20,820 --> 00:35:27,380 713 00:35:27,380 --> 00:35:27,900 ОК. 714 00:35:27,900 --> 00:35:29,130 Я знаю, що це таке. 715 00:35:29,130 --> 00:35:34,440 >> Так що питання в тому, що в інший мій рахунок тут, я біг вузол вже на 716 00:35:34,440 --> 00:35:36,590 що ж адресу, 1337. 717 00:35:36,590 --> 00:35:43,370 Таким чином, помилка, що це кинув, якщо ми подивимося на нього в реальному тісно, ​​є адреса в 718 00:35:43,370 --> 00:35:45,180 використовувати, EADDRINUSE. 719 00:35:45,180 --> 00:35:47,970 Так що я вже використав 1337 тут. 720 00:35:47,970 --> 00:35:52,210 Так що, якщо я закрив цю геть, і тоді я зараз спробуйте запустити цей, сподіваюся, все 721 00:35:52,210 --> 00:35:53,210 буде добре. 722 00:35:53,210 --> 00:35:53,440 ОК. 723 00:35:53,440 --> 00:35:57,020 Таким чином, ви можете мати тільки одну річ роду з прослуховує порт відразу. 724 00:35:57,020 --> 00:35:59,660 Іншим рішенням було б для мене просто редагувати цю програму і зробити 725 00:35:59,660 --> 00:36:02,370 це було схоже 1338 або щось так. 726 00:36:02,370 --> 00:36:04,100 >> Але тепер сон біжить. 727 00:36:04,100 --> 00:36:06,400 Так що давайте насправді спробувати його в браузеру на цей раз, тому що це 728 00:36:06,400 --> 00:36:09,080 трохи нецікавий, щоб побачити це в терміналі. 729 00:36:09,080 --> 00:36:13,560 Так що я просто збираюся йти до того, що 127 адресу знову в 1337. 730 00:36:13,560 --> 00:36:14,850 І якщо ви можете побачити його - 731 00:36:14,850 --> 00:36:18,050 Я не знаю, якщо ви можете - але мій браузера з дуже, дуже довго 732 00:36:18,050 --> 00:36:20,600 Час для завантаження або як п'ять секунд. 733 00:36:20,600 --> 00:36:23,460 >> А потім після цього, він, нарешті, закінчив відповідь. 734 00:36:23,460 --> 00:36:29,070 І ви не можете бачити це, тому що річ переміщається на трохи, але якщо я зроблю 735 00:36:29,070 --> 00:36:32,500 це трохи менше, ви можете бачити, що говорить агов. 736 00:36:32,500 --> 00:36:35,130 Таким чином я отримав агов, але через п'ять секунд. 737 00:36:35,130 --> 00:36:38,510 І це може бути трохи чистішим, щоб побачити це тут на терміналі, так що я 738 00:36:38,510 --> 00:36:40,980 збираюся зробити - 739 00:36:40,980 --> 00:36:43,540 давайте зробимо тут - 740 00:36:43,540 --> 00:36:48,370 давайте зробимо Curl цією адресою знову з 1337. 741 00:36:48,370 --> 00:36:50,820 І я тільки частково мають сидіти тут протягом п'яти секунд. 742 00:36:50,820 --> 00:36:53,760 Але зверніть увагу, що сервер може приймати нові відповіді. 743 00:36:53,760 --> 00:36:54,940 Так він друкує агов. 744 00:36:54,940 --> 00:36:58,720 >> І для демонстрації цього, в основному, що Що я можу зробити в цій іншій вкладці - 745 00:36:58,720 --> 00:37:02,640 так скажемо я роблю це в іншій вкладці, Я збираюся зробити Curl і те ж 746 00:37:02,640 --> 00:37:03,780 річ знову. 747 00:37:03,780 --> 00:37:06,600 І я збираюся спробувати штовхнути їх хлопці геть в той же час. 748 00:37:06,600 --> 00:37:08,260 Так що я збираюся зробити це, і я збираються гонці тут, і я 749 00:37:08,260 --> 00:37:09,650 збирається зробити це знову. 750 00:37:09,650 --> 00:37:14,030 >> І давайте зробимо так, що ви можна побачити їх обох. 751 00:37:14,030 --> 00:37:20,250 Це один надруковані агов і що один надруковані агов всю дорогу в - 752 00:37:20,250 --> 00:37:22,550 давайте зробимо цей експеримент ще раз. 753 00:37:22,550 --> 00:37:25,100 Насправді, давайте використовувати це обдурити, якщо це нормально. 754 00:37:25,100 --> 00:37:30,520 >> Так що я збираюся використовувати оболонки річ, яка дозволяє мені в основному запустити дві копії 755 00:37:30,520 --> 00:37:32,630 даної програми паралельно. 756 00:37:32,630 --> 00:37:36,070 Так він працюватиме першу програму і друга програма паралельно. 757 00:37:36,070 --> 00:37:39,060 Так що тепер, якщо я натискаю Enter, він збирається зробити, що запит в значній мірі 758 00:37:39,060 --> 00:37:40,570 миттєво в той же час. 759 00:37:40,570 --> 00:37:42,620 Так давайте дамо цей постріл. 760 00:37:42,620 --> 00:37:44,950 >> Так що тепер помітите, що він говорить два процеси. 761 00:37:44,950 --> 00:37:50,630 І якщо вам цікаво, що 27 000 число в основному процес ID. 762 00:37:50,630 --> 00:37:52,940 І зверніть увагу на те, що вони надруковані агов одночасно. 763 00:37:52,940 --> 00:37:56,820 Це не було схоже нам довелося чекати п'ять секунд для однієї і то після того, 764 00:37:56,820 --> 00:37:59,640 через п'ять секунд отримати другу. 765 00:37:59,640 --> 00:38:03,300 Так ось вид, в певному сенсі, це насправді не свідчити, але це 766 00:38:03,300 --> 00:38:07,390 інтуїтивне доказ того, що це не просто як очікування п'ять секунд і блокування 767 00:38:07,390 --> 00:38:08,960 весь потік. 768 00:38:08,960 --> 00:38:10,720 ОК здорово. 769 00:38:10,720 --> 00:38:17,850 >> Аарон поставив запитання раніше, що було, добре, що якщо ми щось зробити - 770 00:38:17,850 --> 00:38:18,735 Так? 771 00:38:18,735 --> 00:38:19,051 >> АУДИТОРІЯ: Зачекайте. 772 00:38:19,051 --> 00:38:21,585 Як це відрізняється від Е буфера, хоча? 773 00:38:21,585 --> 00:38:23,010 Хіба це не автоматично це зробити? 774 00:38:23,010 --> 00:38:25,390 Чому ми повинні турбуватися про це? 775 00:38:25,390 --> 00:38:26,555 >> Кевін ШМІД: О, ти міг сказати, що ще раз? 776 00:38:26,555 --> 00:38:29,510 >> АУДИТОРІЯ: Не любить Printf буфер зробити ту ж саму річ? 777 00:38:29,510 --> 00:38:31,280 >> Кевін ШМІД: Буфер Е? 778 00:38:31,280 --> 00:38:32,753 >> АУДИТОРІЯ: Так. 779 00:38:32,753 --> 00:38:33,244 ОК. 780 00:38:33,244 --> 00:38:40,609 Був не в одному з опитувань вони були говорити про те, якщо ви прямо Е 781 00:38:40,609 --> 00:38:42,899 щось, а потім вже він паузу один Друга, а потім у вас є це цикл десять 782 00:38:42,899 --> 00:38:46,530 раз, це буде чекати десять секунд і потім Е всі разом? 783 00:38:46,530 --> 00:38:47,460 >> Кевін ШМІД: О, добре. 784 00:38:47,460 --> 00:38:49,170 >> АУДИТОРІЯ: Це робити те ж саме річ, то в цьому випадку? 785 00:38:49,170 --> 00:38:52,630 >> Кевін ШМІД: Таким чином, питання було в основному в одному з колишніх вікторини 786 00:38:52,630 --> 00:38:57,200 або щось, виникло питання, що в основному, якщо ви говорите, для друку F 10 787 00:38:57,200 --> 00:39:01,490 речі в той час, а потім спав як в процес друку тих з, 788 00:39:01,490 --> 00:39:04,850 в кінці чомусь, що це буде просто звалище тих, все на екрані. 789 00:39:04,850 --> 00:39:06,740 Так що начебто двох різних поняття тут. 790 00:39:06,740 --> 00:39:10,400 >> Так що я думаю одне, що в цьому так, що ми маємо справу з двома різними 791 00:39:10,400 --> 00:39:13,510 роду люди просять сервер для речей одночасно. 792 00:39:13,510 --> 00:39:17,455 І причина того, що Е роду чекає, як це і звалища все це 793 00:39:17,455 --> 00:39:21,760 відразу більше пов'язана з як Е роду - 794 00:39:21,760 --> 00:39:25,100 тому шлях Е насправді реалізується це в основному повинен 795 00:39:25,100 --> 00:39:28,850 поговорити з операційною системою писати що матеріал на консоль. 796 00:39:28,850 --> 00:39:33,460 Так що не хочете, щоб зробити все, що матеріал відразу, коли ви говорите Е 797 00:39:33,460 --> 00:39:36,260 деякі рядки, бо міг дорого обійтися, якщо він повинен 798 00:39:36,260 --> 00:39:37,340 зробити це в будь-який час. 799 00:39:37,340 --> 00:39:41,530 >> Так що, якщо ви робите Е агов, вашу програму не може насправді друкувати, що 800 00:39:41,530 --> 00:39:43,040 відразу на консоль. 801 00:39:43,040 --> 00:39:46,080 Це можна сказати, добре, я її написав. 802 00:39:46,080 --> 00:39:49,570 А потім начебто чекати вас, щоб дати це трохи більше, перш ніж насправді 803 00:39:49,570 --> 00:39:51,380 записавши його на консоль. 804 00:39:51,380 --> 00:39:54,040 >> Так що причина, що б це було так - 805 00:39:54,040 --> 00:39:56,450 і це частково пов'язані в сон - 806 00:39:56,450 --> 00:40:00,060 є те, що сон був свого роду просто вводять туди, щоб продемонструвати 807 00:40:00,060 --> 00:40:02,480 Справа в тому, що він не записує це синхронно. 808 00:40:02,480 --> 00:40:06,210 Але причина, що це просто продуктивність, так що ви не повинні 809 00:40:06,210 --> 00:40:08,920 зробити, що багато контактів операційна система. 810 00:40:08,920 --> 00:40:12,300 >> Але ось те, що ми дійсно намагаємося зробити з цією річчю сну є лише шоу 811 00:40:12,300 --> 00:40:17,730 , Що, коли у нас є два людей, які відвідують цей сайт, він не збирається ставити 812 00:40:17,730 --> 00:40:22,310 їх в лінії, де він збирається сказати У мене є, щоб допомогти вам, а потім, коли я 813 00:40:22,310 --> 00:40:25,350 повністю закінчила допомагати вам після них п'ять секунд, то я збираюся 814 00:40:25,350 --> 00:40:26,750 перейти на наступний людини. 815 00:40:26,750 --> 00:40:29,515 Так запит першого особи не зв'язати, що цикл подій 816 00:40:29,515 --> 00:40:31,610 якщо це має сенс. 817 00:40:31,610 --> 00:40:34,980 >> Але тут насправді приклад чогось, що зв'яже 818 00:40:34,980 --> 00:40:36,090 до циклу подій. 819 00:40:36,090 --> 00:40:39,130 Отже, ось жахлива функція обчислити п-ю Фібоначчі. 820 00:40:39,130 --> 00:40:43,510 Це буквально в гіршу сторону, як ви можете обчислити енної кількості Фібоначчі. 821 00:40:43,510 --> 00:40:48,480 І це насправді просто визнати звідки це взялося, 822 00:40:48,480 --> 00:40:49,330 там насправді - 823 00:40:49,330 --> 00:40:53,230 Я маю на увазі, ви можете спробувати піти знайти його - але є як дуже тривалий блозі 824 00:40:53,230 --> 00:40:54,130 повідомлення, що хтось написав. 825 00:40:54,130 --> 00:40:55,660 Це як один з тих Reddit речей. 826 00:40:55,660 --> 00:40:59,650 Але хтось критикував Node.js, і вони використовували це як приклад. 827 00:40:59,650 --> 00:41:03,700 Так що я почасти хотів просто показати вам два різні точки зору тільки, щоб отримати 828 00:41:03,700 --> 00:41:07,320 загальне розуміння понять За цими двома речами. 829 00:41:07,320 --> 00:41:13,050 >> Але це вибирається як просто жахливо, жахливо неефективний обчислювально 830 00:41:13,050 --> 00:41:15,940 інтенсивне спосіб обчислення енної кількості Фібоначчі. 831 00:41:15,940 --> 00:41:21,180 Так само, як примітка боку, чому це жахливо, як у тій? 832 00:41:21,180 --> 00:41:23,210 Так? 833 00:41:23,210 --> 00:41:25,130 >> АУДИТОРІЯ: Припустимо, ви починаєте з 1000. 834 00:41:25,130 --> 00:41:27,050 1000 розпадається на 999 і 998. 835 00:41:27,050 --> 00:41:28,970 Кожен з цього розпадається на дві речі. 836 00:41:28,970 --> 00:41:30,890 Кожен з цього розпадається на дві речі. 837 00:41:30,890 --> 00:41:31,355 >> Кевін ШМІД: Вірно. 838 00:41:31,355 --> 00:41:32,400 >> АУДИТОРІЯ: Всю дорогу вниз. 839 00:41:32,400 --> 00:41:32,840 >> Кевін ШМІД: Абсолютно вірно. 840 00:41:32,840 --> 00:41:37,330 Так що просто повторити для камери, якщо я подзвонити Фибо на як 1000 або щось 841 00:41:37,330 --> 00:41:41,810 так, це, очевидно, не менше або рівне одиниці, так що я збираюся 842 00:41:41,810 --> 00:41:46,040 піти в цей ще випадку, а потім я збираюся подзвонити Фибо 999 плюс Фибо 998. 843 00:41:46,040 --> 00:41:50,290 А потім в значній мірі все, що робота, яка Фибо 999 робить 844 00:41:50,290 --> 00:41:52,950 вид на цьому рівні. 845 00:41:52,950 --> 00:41:55,620 Якщо ви йдете вниз, то це ще більш надлишковим Крім цього, але якщо ви просто 846 00:41:55,620 --> 00:42:01,390 думаю обчислення вигадка 998 отримує нам досить близько до Фибо 999. 847 00:42:01,390 --> 00:42:05,860 Таким чином, ми повинні дійсно бути трохи більш розумний про те, як ми почасти повторно 848 00:42:05,860 --> 00:42:07,580 них, але ми не повторного використання ці речі взагалі. 849 00:42:07,580 --> 00:42:11,860 Таким чином, ви можете собі уявити, цей гігантський, гігантський дерево, яке просто жахливо. 850 00:42:11,860 --> 00:42:12,940 >> Але в кожному разі, добре. 851 00:42:12,940 --> 00:42:14,040 Так, щоб було вигадка. 852 00:42:14,040 --> 00:42:15,530 Це займе деякий час для запуску. 853 00:42:15,530 --> 00:42:16,510 Так? 854 00:42:16,510 --> 00:42:17,760 >> АУДИТОРІЯ: [нерозбірливо]. 855 00:42:17,760 --> 00:42:20,430 856 00:42:20,430 --> 00:42:22,481 >> Кевін ШМІД: О, ти міг повторити питання? 857 00:42:22,481 --> 00:42:23,731 >> АУДИТОРІЯ: [нерозбірливо]. 858 00:42:23,731 --> 00:42:30,840 859 00:42:30,840 --> 00:42:33,990 >> Кевін ШМІД: О, так це тільки код що буде свого роду на 860 00:42:33,990 --> 00:42:34,850 на стороні сервера. 861 00:42:34,850 --> 00:42:38,100 Так що це не буде знайдено в браузері або що-небудь. 862 00:42:38,100 --> 00:42:42,160 Це в основному те, що ми є, що коли користувач тут досить багато марок 863 00:42:42,160 --> 00:42:45,300 їх прохання знову, коли ми начебто зробити запит, ми збираємося назвати 864 00:42:45,300 --> 00:42:47,040 ця функція на стороні сервера. 865 00:42:47,040 --> 00:42:50,480 А потім ми отримаємо результат назад від виклику цієї функції. 866 00:42:50,480 --> 00:42:52,460 А потім ми просто надрукувати це користувачеві. 867 00:42:52,460 --> 00:42:54,580 Таким чином, користувач насправді не справа За допомогою цієї функції занадто багато. 868 00:42:54,580 --> 00:42:57,270 >> Був, що питання? 869 00:42:57,270 --> 00:42:58,470 Чи має це сенс? 870 00:42:58,470 --> 00:42:58,810 ОК. 871 00:42:58,810 --> 00:43:00,930 Круто. 872 00:43:00,930 --> 00:43:04,240 >> Отже, ще раз, ми робимо все це res.writeHead річ, де ми роздрукувати 873 00:43:04,240 --> 00:43:05,150 заголовок. 874 00:43:05,150 --> 00:43:09,730 А потім я в кінцевому відповідь, роблячи магічне число вигадка 45. 875 00:43:09,730 --> 00:43:12,100 Так що давайте просто запустити цей сервер. 876 00:43:12,100 --> 00:43:15,190 Так що я збираюся зробити вузол fib.js. 877 00:43:15,190 --> 00:43:17,340 Так що тепер моя вигадка сервер працює. 878 00:43:17,340 --> 00:43:21,790 >> А потім тут, я збираюся зробити один з них. 879 00:43:21,790 --> 00:43:22,200 ОК? 880 00:43:22,200 --> 00:43:24,960 Так що я просто хотів сказати, Curl. 881 00:43:24,960 --> 00:43:32,226 Так що це займе якийсь час, але ми сподіваємося, скоро він закінчить і 882 00:43:32,226 --> 00:43:35,660 він буде друкувати, що 45-й Число Фібоначчі. 883 00:43:35,660 --> 00:43:36,910 >> АУДИТОРІЯ: [нерозбірливо]. 884 00:43:36,910 --> 00:43:40,720 885 00:43:40,720 --> 00:43:42,050 >> Кевін ШМІД: Він повинен зроблено досить скоро. 886 00:43:42,050 --> 00:43:43,780 Так воно і повинно прийняти 5:55 секунд. 887 00:43:43,780 --> 00:43:48,570 Я не знаю, це тільки V8 бути супер швидко, але в кожному разі, це 888 00:43:48,570 --> 00:43:52,700 дуже короткий приклад, і навмисне несмачний з нетривіальна 889 00:43:52,700 --> 00:43:54,200 обчислення. 890 00:43:54,200 --> 00:43:56,700 Так через деякий час, це дійсно стає це. 891 00:43:56,700 --> 00:44:02,130 >> Але тепер, що якщо я це зроблю такий же Експеримент, як і колись, де я роблю 892 00:44:02,130 --> 00:44:04,010 два запити в той же час? 893 00:44:04,010 --> 00:44:06,990 Так от я йду на Curl на що адреса, і я збираюся 894 00:44:06,990 --> 00:44:08,260 зробити ще Curl. 895 00:44:08,260 --> 00:44:12,070 І пам'ятайте, коли ми зробили це для спати сервер, коли ми в основному повинні були його 896 00:44:12,070 --> 00:44:15,320 через п'ять секунд, вони значною багато і повернувся право 897 00:44:15,320 --> 00:44:16,380 приблизно в той же час. 898 00:44:16,380 --> 00:44:18,650 Так що це не було особливо зв'язали. 899 00:44:18,650 --> 00:44:20,290 >> Але давайте спробуємо це зараз. 900 00:44:20,290 --> 00:44:22,370 Отже, ми отримали наші два процеси. 901 00:44:22,370 --> 00:44:24,210 Пам'ятайте це ті ідентифікатори процесів. 902 00:44:24,210 --> 00:44:25,900 Це буде трохи незручно в той час як ми стійло. 903 00:44:25,900 --> 00:44:31,340 904 00:44:31,340 --> 00:44:35,360 Так що давайте просто залишитися тут і чекати. 905 00:44:35,360 --> 00:44:37,090 >> Так один з них повинен прийти тому після як - 906 00:44:37,090 --> 00:44:39,190 Отже, один повернувся. 907 00:44:39,190 --> 00:44:43,570 Але тоді чому не другий один повернутися тільки поки що? 908 00:44:43,570 --> 00:44:44,389 Так? 909 00:44:44,389 --> 00:44:49,280 >> АУДИТОРІЯ: Сервер не може нічого зробити поки вона обчислення, що велика кількість. 910 00:44:49,280 --> 00:44:51,620 >> Кевін ШМІД: Вірно. 911 00:44:51,620 --> 00:44:55,395 Таким чином, відповідь була просто, що сервер дійсно нічого не може зробити в той час як 912 00:44:55,395 --> 00:44:57,460 це обчислення, що число Фібоначчі. 913 00:44:57,460 --> 00:44:59,360 Так що тепер я тільки що отримав мої дві речі назад. 914 00:44:59,360 --> 00:45:03,210 Але я думаю, просто думати про код трохи більше, як це працює 915 00:45:03,210 --> 00:45:05,030 і все. 916 00:45:05,030 --> 00:45:11,750 >> Так ця функція тут код, який Я сказав цей сервер для запуску, коли вона 917 00:45:11,750 --> 00:45:14,100 отримує новий вхідний запит. 918 00:45:14,100 --> 00:45:17,940 Так що це просто збирається запустити через це весь код, а потім він збирається піти 919 00:45:17,940 --> 00:45:21,120 назад в цикл обробки подій, а потім продовжити перевірки нових подій. 920 00:45:21,120 --> 00:45:23,670 Тому в основному те, що ми відбувається є сервер 921 00:45:23,670 --> 00:45:25,080 прислухаючись до нових речей. 922 00:45:25,080 --> 00:45:28,070 Перша людина просить за те, що 45 є. 923 00:45:28,070 --> 00:45:30,490 Ми проводимо цей код, щоб обчислити його. 924 00:45:30,490 --> 00:45:33,420 Цей код бере приблизно п'ять до шести секунд для запуску. 925 00:45:33,420 --> 00:45:36,990 Тоді ми йдемо назад в цикл подій і перевіряти наявність нових запитів. 926 00:45:36,990 --> 00:45:42,700 >> Таким чином, це приклад того, як, якщо є речі, які так званий обчислювальний 927 00:45:42,700 --> 00:45:48,140 пов'язаний, або використовувати багато обчислювальних, не влада, але, як і в 928 00:45:48,140 --> 00:45:50,260 обчислень - 929 00:45:50,260 --> 00:45:54,080 Я думаю, одна річ, щоб сказати про це є що ця функція робить повністю, 930 00:45:54,080 --> 00:45:56,310 здебільшого, досить корисна робота правою. 931 00:45:56,310 --> 00:45:59,970 Весь час, що, що зворотного виклику Функція втік, це було досить 932 00:45:59,970 --> 00:46:03,670 багато витрачати більшу частину свого часу просто обчислення число, п Фібоначчі. 933 00:46:03,670 --> 00:46:05,930 >> Але у нас був тільки один потік мати справу з. 934 00:46:05,930 --> 00:46:10,270 У моделі Apache, коли дві людини зробив запит, щоб отримати Фибо 45, ми 935 00:46:10,270 --> 00:46:11,610 було б два різних теми. 936 00:46:11,610 --> 00:46:15,060 А потім робота операційної системи було б, або рівень користувача 937 00:46:15,060 --> 00:46:18,660 код, який управляє теми, буде вже в тому, щоб нарізати, що на 938 00:46:18,660 --> 00:46:23,060 Процесор, або навіть якщо у вас кілька процесорів, розподілити їх рівномірно по всій процесорів 939 00:46:23,060 --> 00:46:26,130 так, щоб вони обидва були обробка приблизно в той же час. 940 00:46:26,130 --> 00:46:31,120 >> Так що просто показати вам, як ми можемо сортувати з - і це не є повним досконалим 941 00:46:31,120 --> 00:46:34,280 рішення, але свого роду, як ми можемо зробити повернутися сюди і зробити 942 00:46:34,280 --> 00:46:35,880 трохи краще. 943 00:46:35,880 --> 00:46:41,540 Так що у мене тут є програма під назвою Фибо С. І це в основному використовує 944 00:46:41,540 --> 00:46:45,690 ще один з модулів вузла називається Модуль по догляду за дітьми Процес. 945 00:46:45,690 --> 00:46:49,210 Так я включив, що у верхньому роду начебто я зробив би фунт включають 946 00:46:49,210 --> 00:46:51,230 дитина process.h або щось. 947 00:46:51,230 --> 00:46:56,210 Тепер у мене є доступ до цієї змінної СР який має всю функціональність. 948 00:46:56,210 --> 00:47:01,810 >> Так що тепер, що я роблю в цій відповіді обробник я біжу цю програму 949 00:47:01,810 --> 00:47:04,100 точка слеш вигадка 45. 950 00:47:04,100 --> 00:47:06,820 Так що я зробив - і я просто хочу, вийти з цієї програми для 951 00:47:06,820 --> 00:47:07,620 небагато - 952 00:47:07,620 --> 00:47:11,060 є Я написав програму на С, що в основному обчислює 953 00:47:11,060 --> 00:47:12,630 енної кількості Фібоначчі. 954 00:47:12,630 --> 00:47:15,960 Так от просто програма, що я написав в С, яка обчислює це. 955 00:47:15,960 --> 00:47:19,040 Я можу скомпілювати його, і я можу працювати це в командному рядку. 956 00:47:19,040 --> 00:47:22,150 І це буде обчислити Число 45-е Фібоначчі. 957 00:47:22,150 --> 00:47:24,510 >> Так помітите, що він просто бере в значній мірі як довго. 958 00:47:24,510 --> 00:47:28,240 Я, ймовірно, могли б використовувати тире 03 до оптимізувати його або щось на зразок цього, 959 00:47:28,240 --> 00:47:31,050 але я просто зробив, як звичайна настройки компілятора. 960 00:47:31,050 --> 00:47:33,260 І це друкує його. 961 00:47:33,260 --> 00:47:36,830 >> Але тепер, що я начебто робиш? 962 00:47:36,830 --> 00:47:39,800 Ех шкода, так файл. 963 00:47:39,800 --> 00:47:42,800 Так що я той же самий матеріал з заголовок, як раніше. 964 00:47:42,800 --> 00:47:45,780 Тоді я роблю це cp.exec. 965 00:47:45,780 --> 00:47:49,460 Так що це буде зробити, це він збирається запустити цю програму. 966 00:47:49,460 --> 00:47:51,960 Але те, як це працює в тому, що він не збирається чекати 967 00:47:51,960 --> 00:47:53,400 що програма до кінця. 968 00:47:53,400 --> 00:47:56,000 Це просто в основному говорить виконати цю програму. 969 00:47:56,000 --> 00:47:58,700 Тому в основному наберіть в командного рядка роду. 970 00:47:58,700 --> 00:48:02,350 >> А потім, коли ви закінчите з це, запустити цю функцію. 971 00:48:02,350 --> 00:48:04,800 Так що тепер ми якось отримати Весь відновлений річ 972 00:48:04,800 --> 00:48:06,750 як ми не чекаємо. 973 00:48:06,750 --> 00:48:08,530 Така чи є сенс? 974 00:48:08,530 --> 00:48:08,990 Так? 975 00:48:08,990 --> 00:48:11,060 >> АУДИТОРІЯ: [нерозбірливо]? 976 00:48:11,060 --> 00:48:13,610 >> Кевін ШМІД: Так що це буде насправді відкрити новий процес, щоб зробити це. 977 00:48:13,610 --> 00:48:19,310 Так що це насправді, в деякому розумінні, зло, не супер зла, але це 978 00:48:19,310 --> 00:48:22,990 Важливо сказати, що це свого роду повертаючись до, з одного боку, Apache 979 00:48:22,990 --> 00:48:26,450 модель, де ми робимо потоків і процесів для кожного запиту або 980 00:48:26,450 --> 00:48:29,280 процеси для кожного запиту. 981 00:48:29,280 --> 00:48:32,090 Так що це свого роду аналогічні до того, що Apache робить. 982 00:48:32,090 --> 00:48:35,110 У деяких випадках, це буде просто використовувати новий нитка, яка трохи більше світла 983 00:48:35,110 --> 00:48:39,040 вага, ніж процес, але Apache міг зрештою породження нового процесу 984 00:48:39,040 --> 00:48:43,370 яка є своєрідною, що ми робимо тут неявно, роблячи точковий косою вигадка 45. 985 00:48:43,370 --> 00:48:48,690 >> І то в цьому випадку, ми як би на себе одні й ті ж витрати процесів. 986 00:48:48,690 --> 00:48:50,710 Так що це тільки одна річ, ви можете зробити. 987 00:48:50,710 --> 00:48:52,600 Але тільки, щоб показати цей вид бігу. 988 00:48:52,600 --> 00:48:57,120 І ці розмови просто дійсно спрямовані на представляючи такого роду програм, як 989 00:48:57,120 --> 00:49:00,710 спосіб показати різні точки зору на як проектувати сервери, як це. 990 00:49:00,710 --> 00:49:08,300 Так що це працює, і то зараз, якщо я роблю це знову, я отримав два ідентифікатори процесів. 991 00:49:08,300 --> 00:49:10,320 >> Давайте просто говорити про речі, щоб відзначити. 992 00:49:10,320 --> 00:49:11,980 Так помітити, що вони поступово. 993 00:49:11,980 --> 00:49:12,700 Це круто. 994 00:49:12,700 --> 00:49:15,140 Тому що це було 27122 раніше. 995 00:49:15,140 --> 00:49:18,580 Але зверніть увагу зараз, вони повернулися приблизно в той же самий час. 996 00:49:18,580 --> 00:49:23,960 >> А тепер, гарне питання, щоб запитати про чому, що справа, в чиї обов'язки 997 00:49:23,960 --> 00:49:27,590 був його зараз, щоб свого роду роблять ці речі вид грати чесно один з 998 00:49:27,590 --> 00:49:31,350 інші, ці два примірники точка слеш вигадка 45, що я побіг 999 00:49:31,350 --> 00:49:32,880 або що вузол побіг? 1000 00:49:32,880 --> 00:49:36,940 Хто роду робить його справедливим, що вони обидва отримати вид збалансовані час роботи? 1001 00:49:36,940 --> 00:49:42,900 1002 00:49:42,900 --> 00:49:44,220 >> АУДИТОРІЯ: [нерозбірливо]. 1003 00:49:44,220 --> 00:49:44,620 >> Кевін ШМІД: Так. 1004 00:49:44,620 --> 00:49:49,740 Так в основному, коли я роблю точка слеш вигадка 45 або щось на зразок цього, тепер це 1005 00:49:49,740 --> 00:49:53,750 роду до операційної системи обробляти виконання цих програм. 1006 00:49:53,750 --> 00:49:56,920 І тепер він може планувати їх на різних процесорах або його 1007 00:49:56,920 --> 00:49:58,330 може планувати їх. 1008 00:49:58,330 --> 00:50:01,870 Він може нарізати час, що один Процесор отримує його або що вони отримують 1009 00:50:01,870 --> 00:50:03,330 для роботи на одному процесорі. 1010 00:50:03,330 --> 00:50:05,620 Так от ідея, що. 1011 00:50:05,620 --> 00:50:07,220 Чи має це сенс всім? 1012 00:50:07,220 --> 00:50:10,950 Так що тепер вузол насправді не грає участь у поділу цих завдань. 1013 00:50:10,950 --> 00:50:12,200 ОК. 1014 00:50:12,200 --> 00:50:14,050 1015 00:50:14,050 --> 00:50:17,840 >> Так ось майже це приклади. 1016 00:50:17,840 --> 00:50:23,370 Я просто хотів показати ще одну річ тому що багато чого з цього досі 1017 00:50:23,370 --> 00:50:27,350 неповністю супер практичних в деяких випадках. 1018 00:50:27,350 --> 00:50:30,970 Я можу собі уявити, щоб приходити додому після цього говорити і щось і говорив, як, 1019 00:50:30,970 --> 00:50:35,710 ну я як би отримав з цієї розмови, що Я можу зробити сервер Фібоначчі для 1020 00:50:35,710 --> 00:50:37,360 мій остаточний проект. 1021 00:50:37,360 --> 00:50:40,770 Отже, ось тільки вигляд ще один приклад що ми сподіваємося, буде - 1022 00:50:40,770 --> 00:50:44,620 може бути, немає, але, може бути, - трохи більше роду ставлення до остаточних проектів і 1023 00:50:44,620 --> 00:50:46,440 подбати про це заздалегідь такі речі, як, що. 1024 00:50:46,440 --> 00:50:48,870 >> Так що це chat.js. 1025 00:50:48,870 --> 00:50:52,290 Так що це ніби як деякий зразок Серверна частина коду, який можна використовувати, щоб 1026 00:50:52,290 --> 00:50:55,700 створити невелику чат сервер, як Ви, можливо, бачили на 1027 00:50:55,700 --> 00:50:56,630 Facebook Чат або будь-який інший. 1028 00:50:56,630 --> 00:50:59,990 Так що я не говорю, що це, як Facebook Чат, але це свого роду 1029 00:50:59,990 --> 00:51:06,230 як хороший - можливо, не дуже добре, але, можливо, добре - відправною точкою для бесіди 1030 00:51:06,230 --> 00:51:08,560 сервер для вашого сайту для остаточного проекту. 1031 00:51:08,560 --> 00:51:11,040 Отже, давайте поглянемо на те, що він робить. 1032 00:51:11,040 --> 00:51:15,500 >> Так ми отримуємо цю спеціальну річ у верхній частині, ця змінна SIO 1033 00:51:15,500 --> 00:51:17,050 одно вимагають Socket.IO. 1034 00:51:17,050 --> 00:51:20,280 Так що це інша справа, що це не так насправді приходять в комплекті з 1035 00:51:20,280 --> 00:51:22,300 Вузол але ви можете встановити його. 1036 00:51:22,300 --> 00:51:23,480 Це модуль Node. 1037 00:51:23,480 --> 00:51:25,670 Так що це просто, як деякі розширення Node. 1038 00:51:25,670 --> 00:51:29,220 >> SocketIO насправді дуже круто. 1039 00:51:29,220 --> 00:51:32,550 Це абстракція, яка в основному те, що він є це дозволяє 1040 00:51:32,550 --> 00:51:35,770 Тобто цей потік комунікації між павутиною 1041 00:51:35,770 --> 00:51:39,430 браузер і веб-сервер. 1042 00:51:39,430 --> 00:51:45,250 Так здебільшого досі, у нас були це дуже швидко за одну секунду або дві 1043 00:51:45,250 --> 00:51:48,790 другий зв'язку між веб браузер і веб-сервер. 1044 00:51:48,790 --> 00:51:53,310 Так що це в основному йдуть на google.com, Get матеріал, відправити його назад, а потім 1045 00:51:53,310 --> 00:51:53,770 ми закінчили. 1046 00:51:53,770 --> 00:51:56,560 Ми ніколи не говоримо знову, поки користувач вводить в чомусь іншому. 1047 00:51:56,560 --> 00:52:01,090 >> Але те, що Socket.IO і подібного роду речі - і SocketIO насправді одна 1048 00:52:01,090 --> 00:52:03,940 з речей, яка побудована на якості WebSocket який є свого роду доступні 1049 00:52:03,940 --> 00:52:06,440 як частина HTML5 - 1050 00:52:06,440 --> 00:52:09,620 що дозволяє мати це продовження діалогу. 1051 00:52:09,620 --> 00:52:13,990 І це дуже корисно в чат-сервера Такі речі, тому що це 1052 00:52:13,990 --> 00:52:17,390 ніби як продовження діалогу в деякі способи, тому що, якщо ви в чаті 1053 00:52:17,390 --> 00:52:21,540 з кимось, тепер ви можете просто відправити повідомлення вниз по трубі, а потім 1054 00:52:21,540 --> 00:52:23,940 сервер може відправити повідомлення вниз труби до іншої людини ви знаходитесь 1055 00:52:23,940 --> 00:52:24,520 чаті с. 1056 00:52:24,520 --> 00:52:26,903 І тоді ви можете мати це обмінюватися так. 1057 00:52:26,903 --> 00:52:30,590 1058 00:52:30,590 --> 00:52:32,850 >> Так що начебто того, що SocketIO хороший для. 1059 00:52:32,850 --> 00:52:38,400 Причина, по якій SocketIO використовує WebSockets як одне, що в 1060 00:52:38,400 --> 00:52:43,980 додаток до просто старих WebSockets, це також робить деякі трюки, щоб в основному 1061 00:52:43,980 --> 00:52:45,610 зробити його браузер, сумісний. 1062 00:52:45,610 --> 00:52:50,040 Так браузери, такі як Internet Explorer на жаль, не підтримує WebSockets 1063 00:52:50,040 --> 00:52:50,810 прямо з коробки. 1064 00:52:50,810 --> 00:52:55,290 Так він використовує деякий інший вид круто акуратно речі з Adobe Flash, щоб дозволити 1065 00:52:55,290 --> 00:52:57,170 вам мати підтримку крос-браузера. 1066 00:52:57,170 --> 00:52:58,800 Так що це дійсно корисно. 1067 00:52:58,800 --> 00:53:02,440 >> А насправді, я знаю, я почасти працює на час тут, але CS50 1068 00:53:02,440 --> 00:53:08,490 Обговорити, ви коли-небудь бачили щось як, я не знаю,, порожній, тому й так 1069 00:53:08,490 --> 00:53:11,030 відповідаючи на цей пост або щось так, що функція? 1070 00:53:11,030 --> 00:53:12,250 Це SocketIO. 1071 00:53:12,250 --> 00:53:15,580 Тому, коли хтось починає друкувати в обговорити вікно, щоб зробити відповідь або 1072 00:53:15,580 --> 00:53:20,040 щось, ваш браузер що називається в SocketIO випромінює якусь 1073 00:53:20,040 --> 00:53:22,660 подія, яка говорить чийсь відповідаючи на цей пост. 1074 00:53:22,660 --> 00:53:26,110 >> Потім сервер говорить, добре, що я повинен робити? 1075 00:53:26,110 --> 00:53:29,270 Ну тепер я повинен сказати цим з іншими хлопцями хто на CS50 Обговорити дивлячись 1076 00:53:29,270 --> 00:53:31,170 на цій посаді, що хтось відповісти. 1077 00:53:31,170 --> 00:53:34,190 Так що начебто того, що SocketIO є добре для, цієї триваючої виду 1078 00:53:34,190 --> 00:53:35,930 потік діалогу. 1079 00:53:35,930 --> 00:53:37,250 ОК. 1080 00:53:37,250 --> 00:53:40,060 >> Так що у мене є тут - і ми просто збирається ігнорувати масив з'єднань 1081 00:53:40,060 --> 00:53:41,390 для небагато - 1082 00:53:41,390 --> 00:53:43,080 що я роблю, я інший слухати. 1083 00:53:43,080 --> 00:53:46,880 Так ось саме так, як в Socket.IO буде кажучи давайте послухаємо на цей порт. 1084 00:53:46,880 --> 00:53:50,060 А потім я роблю це на зв'язку. 1085 00:53:50,060 --> 00:53:53,360 Так от просто в основному гніздо МО спосіб сказати, коли ми отримаємо 1086 00:53:53,360 --> 00:53:55,840 з'єднання, я хочу, щоб ви щоб запустити цей код. 1087 00:53:55,840 --> 00:53:59,870 >> І зауважте, що замість того, REC і дозволом пройшли там у мене є гнізда. 1088 00:53:59,870 --> 00:54:03,260 І це гніздо ідея полягає в основному це , Що ви можете написати і прочитати 1089 00:54:03,260 --> 00:54:05,750 від якого є користувача Повідомлення можливо. 1090 00:54:05,750 --> 00:54:10,700 І повідомлення, які ви б послати може пройти через це Socket. 1091 00:54:10,700 --> 00:54:12,140 Чи має це сенс? 1092 00:54:12,140 --> 00:54:14,490 Так що це, це триваюче річ. 1093 00:54:14,490 --> 00:54:17,820 >> Так що я роблю, це я називаю Socket.emit. 1094 00:54:17,820 --> 00:54:20,330 І випромінюють займає досить багато два аргументи. 1095 00:54:20,330 --> 00:54:24,100 Перший аргумент є рядком просто, що представляє тип 1096 00:54:24,100 --> 00:54:25,270 річ ви випромінюючих. 1097 00:54:25,270 --> 00:54:28,120 Так для цього випадку, у мене використання цей рядок нового повідомлення. 1098 00:54:28,120 --> 00:54:32,670 І це тільки в основному говорять, що тип цієї речі, те, що я 1099 00:54:32,670 --> 00:54:34,750 відправки, є нове повідомлення. 1100 00:54:34,750 --> 00:54:38,460 Таким чином, ви можете слухати для конкретних типів як нове повідомлення або що 1101 00:54:38,460 --> 00:54:39,960 за допомогою точку на. 1102 00:54:39,960 --> 00:54:44,570 >> Так з'єднання і користувач відправив туди, якщо ви подивіться на те, де ми називаємо точка на, 1103 00:54:44,570 --> 00:54:48,150 ті, й інші рядки, що представляють типи повідомлень користувачів. 1104 00:54:48,150 --> 00:54:52,060 Так що це в основному ви можете мати цю Emit один з цих типів повідомлень, і 1105 00:54:52,060 --> 00:54:55,520 потім зробити щось у відповідь на один з цих типів повідомлень 1106 00:54:55,520 --> 00:54:57,640 >> Так що я випромінюючих цю нове повідомлення. 1107 00:54:57,640 --> 00:55:00,540 Ми збираємося ігнорувати connections.push ні на секунду. 1108 00:55:00,540 --> 00:55:03,360 Але тоді я говорю, користувач Socket.on надіслано. 1109 00:55:03,360 --> 00:55:07,540 Так що тепер це ніби як, коли Користувач посилає мені повідомлення, я хочу 1110 00:55:07,540 --> 00:55:09,240 запускати цей код. 1111 00:55:09,240 --> 00:55:12,080 І зауважте, що, що анонімна функція приймає в цій змінній 1112 00:55:12,080 --> 00:55:16,300 називається дані, які в основному йдуть мати повідомлення користувача. 1113 00:55:16,300 --> 00:55:20,700 >> А тепер давайте роду розмови про масив з'єднання. 1114 00:55:20,700 --> 00:55:24,590 Так що це розраховано на чат-клієнт , Де в основному все ніби в 1115 00:55:24,590 --> 00:55:25,950 те ж саме в чат. 1116 00:55:25,950 --> 00:55:29,640 Так в основному, те, що ми повинні тримати навколо деяких масив, який в основному 1117 00:55:29,640 --> 00:55:33,170 представляє всі людей, балакунів в деякі способи, якщо це має сенс. 1118 00:55:33,170 --> 00:55:33,340 Чи не так? 1119 00:55:33,340 --> 00:55:37,190 Тому що ми повинні знати, хто ці хлопці так ми можемо послати їм повідомлення 1120 00:55:37,190 --> 00:55:39,140 що інші люди прийшли до нас. 1121 00:55:39,140 --> 00:55:44,440 >> Так що робить цей код, коли користувач посилає повідомлення - ось тип 1122 00:55:44,440 --> 00:55:45,300 подія - 1123 00:55:45,300 --> 00:55:47,120 ми збираємося запустити цей код. 1124 00:55:47,120 --> 00:55:51,240 І те, що ми робимо, ми будемо проходити через це Масив, ми назвали з'єднання. 1125 00:55:51,240 --> 00:55:54,390 І значною мірою для кожного з'єднання за винятком одного, це наше, це 1126 00:55:54,390 --> 00:55:59,520 , Що говорить цей код, ми відправляємо новий повідомлення з таким додається повідомлення 1127 00:55:59,520 --> 00:56:01,210 інформація. 1128 00:56:01,210 --> 00:56:04,880 >> Так що, якщо ви помітили, тут, що я зробив, коли користувач дійсно робить новий 1129 00:56:04,880 --> 00:56:08,560 з'єднання я додав з Метод JavaScript.push, це 1130 00:56:08,560 --> 00:56:12,100 в основному просто кажу, як додати що гніздо як значення в 1131 00:56:12,100 --> 00:56:13,900 наша з'єднання масив. 1132 00:56:13,900 --> 00:56:20,560 Так що тепер при виконанні цього коду, він буде відправити речі для тих, зокрема 1133 00:56:20,560 --> 00:56:22,020 з'єднання. 1134 00:56:22,020 --> 00:56:26,980 Так що це може бути гарною відправною точкою для створення чат-сервера 1135 00:56:26,980 --> 00:56:28,250 або щось подібне. 1136 00:56:28,250 --> 00:56:33,315 >> І вигляд здорово те, що код, який ви бачите тут, як на і 1137 00:56:33,315 --> 00:56:36,390 випромінюють і все в такому дусі те ж саме вид коду JavaScript, які ви б 1138 00:56:36,390 --> 00:56:39,260 написати в браузері взаємодіяти з сервером. 1139 00:56:39,260 --> 00:56:42,480 Так ось чому SocketIO почасти акуратно і корисно таким чином. 1140 00:56:42,480 --> 00:56:45,680 1141 00:56:45,680 --> 00:56:49,250 >> Ох, і ще одна річ, дуже швидко. 1142 00:56:49,250 --> 00:56:55,970 Був останній проект CS50 торік , Що в основному реалізується поговорити 1143 00:56:55,970 --> 00:56:57,840 сервер в Node.js. 1144 00:56:57,840 --> 00:57:01,350 Я думаю, що це Harvardchats.org але я не - 1145 00:57:01,350 --> 00:57:02,940 ОК. 1146 00:57:02,940 --> 00:57:06,190 Я не впевнений, що URL є, але Я можу послати, що згодом. 1147 00:57:06,190 --> 00:57:09,260 Але це круто, що ви можете зробити з Node.js. 1148 00:57:09,260 --> 00:57:14,680 >> Так що я сподіваюся, загалом, ви, хлопці, гарне почуття, що Node.js корисно 1149 00:57:14,680 --> 00:57:17,870 і як ви могли б, можливо, застосувати до кінцевого проекту. 1150 00:57:17,870 --> 00:57:21,050 Я буду посилати ще трохи ресурси погодитися з цим. 1151 00:57:21,050 --> 00:57:23,170 І спасибі, що прийшли. 1152 00:57:23,170 --> 00:57:23,610 Спасибо. 1153 00:57:23,610 --> 00:57:27,168 >> [Оплески]