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 И если вам интересно, что 27000 число в основном процесс 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 Потому что это было 27 122 раньше. 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 >> [Аплодисменты]