1 00:00:00,000 --> 00:00:08,350 2 00:00:08,350 --> 00:00:09,710 >> KEVIN SCHMID: Bonjour tout le monde. 3 00:00:09,710 --> 00:00:12,640 Bienvenue sur le séminaire de CS50 sur Node.js. 4 00:00:12,640 --> 00:00:13,955 Mon nom est Kevin. 5 00:00:13,955 --> 00:00:15,580 Je suis un TF CS50. 6 00:00:15,580 --> 00:00:17,650 Et je suis un peu comme vraiment excité sur ce séminaire. 7 00:00:17,650 --> 00:00:20,430 Je pense que Node.js est très cool. 8 00:00:20,430 --> 00:00:24,200 J'espère que ce séminaire peut être utilisé comme un bon, je suppose, tremplin pour 9 00:00:24,200 --> 00:00:26,380 certains de vos projets finals le cas vous êtes intéressé à utiliser 10 00:00:26,380 --> 00:00:27,630 quelque chose comme Node.js. 11 00:00:27,630 --> 00:00:29,770 12 00:00:29,770 --> 00:00:33,320 >> Nous allons sorte de commencer le séminaire hors de juste parler un peu de la 13 00:00:33,320 --> 00:00:36,970 sorte de fond évolutivité perspectives de Node.js, puis 14 00:00:36,970 --> 00:00:39,240 nous passons à des exemples de code. 15 00:00:39,240 --> 00:00:42,340 Et je vais avoir le code sur un site Web, et vous pouvez regarder le code. 16 00:00:42,340 --> 00:00:45,475 Et après le séminaire, je vais genre de discours sur la façon dont vous pouvez configurer Node.js 17 00:00:45,475 --> 00:00:48,220 sur votre ordinateur. 18 00:00:48,220 --> 00:00:48,710 >> OK. 19 00:00:48,710 --> 00:00:49,760 Donc, nous allons commencer. 20 00:00:49,760 --> 00:00:53,700 Donc je suppose que je veux juste parler serveurs web, vraiment, d'abord. 21 00:00:53,700 --> 00:00:59,730 Et pour commencer cette discussion, je avoir essentiellement un diagramme qui est compris entre 22 00:00:59,730 --> 00:01:04,269 le manuel utilisé pour CS61, qui montre essentiellement l'interaction 23 00:01:04,269 --> 00:01:08,510 entre un processus client, comme votre site navigateur ou comme votre client de but ou 24 00:01:08,510 --> 00:01:11,340 quelque chose comme ça, et un serveur web. 25 00:01:11,340 --> 00:01:15,150 Donc, ce genre de ressemble à l' image que vous avez vu en conférence sur 26 00:01:15,150 --> 00:01:19,270 Mercredi où fondamentalement nous avons quelques processus client comme Google Chrome. 27 00:01:19,270 --> 00:01:22,980 >> Et puis la première étape est la le client envoie une demande. 28 00:01:22,980 --> 00:01:27,510 Alors, ça peut être quelque chose comme Eh bien nous allons visiter, je ne sais pas, CS50.net. 29 00:01:27,510 --> 00:01:29,320 Donc, nous émettons cette demande. 30 00:01:29,320 --> 00:01:34,280 Et ce que quelqu'un se rappeler le nom de le protocole qui spécifie la façon dont 31 00:01:34,280 --> 00:01:35,610 demande devrait être structuré? 32 00:01:35,610 --> 00:01:36,382 Yep. 33 00:01:36,382 --> 00:01:37,650 >> PUBLIC: [inaudible]. 34 00:01:37,650 --> 00:01:38,150 >> KEVIN SCHMID: Exactement. 35 00:01:38,150 --> 00:01:40,100 Donc, c'est comme HTTP, non? 36 00:01:40,100 --> 00:01:44,720 Donc, fondamentalement, la spécification de la façon dont cette demande doit être effectivement mis 37 00:01:44,720 --> 00:01:47,450 , parce que, à la fin de la journée, cette demande est vraiment juste comme un 38 00:01:47,450 --> 00:01:50,240 chaîne essentiellement dit que je veux cela. 39 00:01:50,240 --> 00:01:53,580 Et la spécification pour cela est le protocole HTTP. 40 00:01:53,580 --> 00:01:55,270 Donc, c'est comme un protocole. 41 00:01:55,270 --> 00:01:57,920 >> Alors le serveur reçoit cette demande. 42 00:01:57,920 --> 00:02:01,610 Alors vous les gars ont un serveur web installé dans l'appareil de CS50. 43 00:02:01,610 --> 00:02:02,460 C'est Apache. 44 00:02:02,460 --> 00:02:06,230 Et cette semaine, lorsque vous travaillez sur le problème mis sept, vous aurez en fait travailler 45 00:02:06,230 --> 00:02:08,160 avec le serveur Web. 46 00:02:08,160 --> 00:02:12,380 Ainsi, le serveur reçoit cette demande, et alors il doit genre de rayer son 47 00:02:12,380 --> 00:02:15,090 tête et dire comme bien ce dois-je faire cela? 48 00:02:15,090 --> 00:02:20,060 >> Donc, sur la base de ce qu'il décide de faire, alors il peut avoir à contacter une sorte 49 00:02:20,060 --> 00:02:20,730 de ressource. 50 00:02:20,730 --> 00:02:23,700 Et cette ressource pourrait être un beaucoup de choses différentes. 51 00:02:23,700 --> 00:02:26,810 D'une part, il pourrait être juste comme un fichier HTML statique. 52 00:02:26,810 --> 00:02:29,820 Donc, il pourrait simplement être comme une HTML qui est comme pour 53 00:02:29,820 --> 00:02:31,100 votre site personnel. 54 00:02:31,100 --> 00:02:35,360 Il pourrait s'agir d'un fichier statique comme une image ou comme un film que vous avez. 55 00:02:35,360 --> 00:02:37,660 Il pourrait même avoir à parler à une sorte de base de données 56 00:02:37,660 --> 00:02:39,530 comme une base de données MySQL. 57 00:02:39,530 --> 00:02:43,910 Donc, il n'est pas toujours nécessaire de communiquer avec une ressource, mais en 58 00:02:43,910 --> 00:02:45,700 certains cas, il pourrait. 59 00:02:45,700 --> 00:02:47,800 >> Alors ce qu'il va faire après qui est ça va 60 00:02:47,800 --> 00:02:49,430 renvoyer la réponse. 61 00:02:49,430 --> 00:02:53,130 Et la réponse à cela est également précisé par HTTP. 62 00:02:53,130 --> 00:02:54,830 Donc, le client peut recevoir. 63 00:02:54,830 --> 00:02:56,740 Il peut déchirer et le traiter. 64 00:02:56,740 --> 00:03:00,900 Et puis, vous obtenez une page web comme Google ou CS50.net ou 65 00:03:00,900 --> 00:03:02,240 tout ce que vous allé. 66 00:03:02,240 --> 00:03:03,100 OK? 67 00:03:03,100 --> 00:03:06,080 >> Donc, c'est l'interaction de base qui nous allons être confrontés. 68 00:03:06,080 --> 00:03:08,770 Et nous sommes à peu près va être mettant l'accent sur cette partie de la 69 00:03:08,770 --> 00:03:10,640 interaction, le serveur. 70 00:03:10,640 --> 00:03:10,990 OK. 71 00:03:10,990 --> 00:03:12,210 Cool. 72 00:03:12,210 --> 00:03:15,500 N'importe qui ont des questions à ce jour? 73 00:03:15,500 --> 00:03:17,720 OK. 74 00:03:17,720 --> 00:03:22,430 >> Donc, comme nous l'avons dit, le serveur Web reçoit cette demande HTTP, puis émet ce 75 00:03:22,430 --> 00:03:24,760 réponse HTTP. 76 00:03:24,760 --> 00:03:29,100 Et comme nous avons parlé avant, la serveur Web de l'appareil de CS50 est Apache. 77 00:03:29,100 --> 00:03:32,490 Ainsi, lorsque vous travaillez sur les gars P défini sept, vous allez travailler avec le 78 00:03:32,490 --> 00:03:34,120 Le serveur web Apache. 79 00:03:34,120 --> 00:03:37,890 Vous n'aurez jamais à vraiment travailler avec Apache directement trop. 80 00:03:37,890 --> 00:03:41,920 Vous sorte de configurer Apache un peu lorsque vous spécifiez les hôtes virtuels ou 81 00:03:41,920 --> 00:03:44,970 les hôtes de v, et nous aurons pour que, dans un petit peu. 82 00:03:44,970 --> 00:03:50,620 >> Mais fondamentalement, le serveur Web Apache mis en place pour travailler avec le genre de PHP 83 00:03:50,620 --> 00:03:51,730 de sortie de la boîte. 84 00:03:51,730 --> 00:03:56,170 Donc ce qui se passe vraiment, c'est quand vous allez à un de vos sites comme, par exemple, 85 00:03:56,170 --> 00:04:00,360 hôte barre index.php ou quelque chose de local, est que votre navigateur envoie 86 00:04:00,360 --> 00:04:04,330 demande, puis Apache est assis il et détermine à faire avec elle. 87 00:04:04,330 --> 00:04:08,840 Et l'action est d'exécuter ce code dans index.php et 88 00:04:08,840 --> 00:04:11,330 alors envoyez-retour. 89 00:04:11,330 --> 00:04:15,640 Il n'y a donc que. 90 00:04:15,640 --> 00:04:16,980 Donc nous sorte de parlé. 91 00:04:16,980 --> 00:04:21,990 Donc, il pourrait simplement servir d'un fichier statique ou exécuter du code PHP et question 92 00:04:21,990 --> 00:04:23,510 la réponse. 93 00:04:23,510 --> 00:04:27,670 >> Alors une question commune qui peut venir vous est ainsi, comment traitons-nous vraiment 94 00:04:27,670 --> 00:04:31,750 avec de multiples utilisateurs ayant en même temps? 95 00:04:31,750 --> 00:04:36,930 Alors, imaginez si vous écriviez un web serveur, si vous aviez un serveur Web 96 00:04:36,930 --> 00:04:39,900 vous tentiez d'écrire quelque chose comme C ou quelque chose comme ça, 97 00:04:39,900 --> 00:04:45,150 fondamentalement, vous pouvez penser à la façon dont il pourrait être une sorte de code qui 98 00:04:45,150 --> 00:04:49,330 recevrait la demande, mais il doit faire tout ce travail sur elle. 99 00:04:49,330 --> 00:04:53,060 Il peut y avoir, par exemple, communiquer avec le base de données ou quelque chose comme ça. 100 00:04:53,060 --> 00:04:53,300 Droite? 101 00:04:53,300 --> 00:04:56,010 Et puis, il ferait ce genre de traitement et 102 00:04:56,010 --> 00:04:57,060 renvoyé la réponse. 103 00:04:57,060 --> 00:04:58,950 Donc, c'est comme la haute Vue d'ensemble du niveau. 104 00:04:58,950 --> 00:05:04,210 >> Mais il n'est pas immédiatement évident comment vous peut le faire de telle sorte que deux personnes ou 105 00:05:04,210 --> 00:05:09,040 même 1000 personnes pourraient travailler avec votre le serveur web en même temps. 106 00:05:09,040 --> 00:05:14,880 Donc, la solution qui utilise Apache est appelé threads ou processus. 107 00:05:14,880 --> 00:05:16,770 Donc, vous avez peut-être entendu parler de ces termes avant. 108 00:05:16,770 --> 00:05:22,190 C'est OK si vous ne l'avez pas, mais il suffit de penser sur les threads ou processus que des moyens pour 109 00:05:22,190 --> 00:05:26,290 un système d'exploitation ou un programme d'utilisateur ou quelque chose comme ça ou un serveur Web 110 00:05:26,290 --> 00:05:28,810 en quelque sorte de l'exécution multiple choses à la fois. 111 00:05:28,810 --> 00:05:31,760 Donc, vous avez peut-être entendu le terme comme des fils d'exécution. 112 00:05:31,760 --> 00:05:34,140 Donc c'est un peu comme si vous étiez sorte de multitâche. 113 00:05:34,140 --> 00:05:37,710 >> Et si vous avez vu sur la boîte de votre ordinateur portable, ou quelque chose comme ça, 114 00:05:37,710 --> 00:05:43,040 multicœur, ce que vous pouvez faire est que vous pouvez exécuter deux threads différents sur différents 115 00:05:43,040 --> 00:05:46,700 les parties de la CPU de sorte qu'ils puissent en fait se produire en même temps. 116 00:05:46,700 --> 00:05:48,100 Donc, c'est vraiment puissant. 117 00:05:48,100 --> 00:05:52,270 Et c'est un peu Apache solution à ce problème. 118 00:05:52,270 --> 00:05:57,900 >> Donc, y at-il un peu comme toutes les questions avec cette approche si? 119 00:05:57,900 --> 00:05:59,870 Donc je suppose que je sorte d'entre eux écrit là. 120 00:05:59,870 --> 00:06:03,440 Mais deux d'entre eux sorte de utiliser beaucoup de mémoire. 121 00:06:03,440 --> 00:06:07,490 Il est très coûteux de créer un fil ou d'un processus. 122 00:06:07,490 --> 00:06:11,750 >> Et une partie du raisonnement est que, tout comme lorsque vous utilisez un programme C 123 00:06:11,750 --> 00:06:15,090 comme votre principal et que les appels une autre fonction, qui possède 124 00:06:15,090 --> 00:06:16,520 une sorte de pile. 125 00:06:16,520 --> 00:06:19,910 Donc, les discussions ont également besoin d'un tout pile séparé qui 126 00:06:19,910 --> 00:06:21,220 peut être très grand. 127 00:06:21,220 --> 00:06:25,170 Et si vous pouvez imaginer avoir des tonnes de utilisateurs sur votre site Web, vous auriez 128 00:06:25,170 --> 00:06:26,280 un grand nombre de threads différents. 129 00:06:26,280 --> 00:06:28,230 C'est beaucoup de piles à gérer et à entretenir. 130 00:06:28,230 --> 00:06:31,280 C'est donc une grande consommation de mémoire. 131 00:06:31,280 --> 00:06:35,650 >> Et puis, aussi, disons que vous avez seulement un CPU, ou disons que vous avez 132 00:06:35,650 --> 00:06:38,460 plus de threads que vous avez ces multicores. 133 00:06:38,460 --> 00:06:38,730 Droite? 134 00:06:38,730 --> 00:06:43,280 Alors disons que vous aviez 10 threads et vous aviez seulement cinq processeurs. 135 00:06:43,280 --> 00:06:46,260 Vous avez sorte de faire cette chose où vous basculez entre le courant 136 00:06:46,260 --> 00:06:49,090 celui qui est en cours d'exécution parce que vous ne peut pas courir tous les 10 à la fois. 137 00:06:49,090 --> 00:06:50,980 Et c'est ce qu'on appelle un changement de contexte. 138 00:06:50,980 --> 00:06:54,260 Et ce terme a fait deux différents contextes, mais disons simplement 139 00:06:54,260 --> 00:06:56,620 penser que la commutation entre deux fils. 140 00:06:56,620 --> 00:06:59,730 Cela peut être assez cher, car essentiellement ce que vous avez à faire est de vous 141 00:06:59,730 --> 00:07:03,340 avoir à arrêter ce que vous faites, faites gagner la état de ce fil conducteur, et 142 00:07:03,340 --> 00:07:05,440 puis passer à un autre endroit. 143 00:07:05,440 --> 00:07:09,420 >> Donc, tout le monde ne sorte de la voir motivation pourquoi les discussions et 144 00:07:09,420 --> 00:07:12,030 processus peut être un peu encombrant? 145 00:07:12,030 --> 00:07:13,840 Et avez-vous une question? 146 00:07:13,840 --> 00:07:14,376 OK. 147 00:07:14,376 --> 00:07:15,070 Cool. 148 00:07:15,070 --> 00:07:18,090 Quelqu'un a des questions? 149 00:07:18,090 --> 00:07:19,620 OK. 150 00:07:19,620 --> 00:07:26,720 >> Donc, si nous prenons un peu de recul pour un deuxième, il ya peu comme un 151 00:07:26,720 --> 00:07:30,350 observation que nous pouvons faire sur un grand nombre d'applications web. 152 00:07:30,350 --> 00:07:34,810 Et c'est vraiment ce que beaucoup d'entre eux fait de ne pas faire beaucoup utile 153 00:07:34,810 --> 00:07:37,140 travailler à l'intérieur d'un fil. 154 00:07:37,140 --> 00:07:41,170 Donc, quiconque a commencé sur P défini sept du tout? 155 00:07:41,170 --> 00:07:45,650 Alors voulez-vous décrire peut-être certaines des parties? 156 00:07:45,650 --> 00:07:47,850 Avez-vous travaillé sur la connexion ou quelque chose comme ça? 157 00:07:47,850 --> 00:07:49,330 >> PUBLIC: Non 158 00:07:49,330 --> 00:07:49,780 >> KEVIN SCHMID: OK. 159 00:07:49,780 --> 00:07:50,150 Ce n'est rien. 160 00:07:50,150 --> 00:07:50,900 Désolé. 161 00:07:50,900 --> 00:07:55,790 Mais fondamentalement, dans l'ensemble P, vous êtes allez faire beaucoup de sorte de 162 00:07:55,790 --> 00:07:59,760 requêtes à une base de données pour obtenir une certaine les informations de cette base de données. 163 00:07:59,760 --> 00:08:03,330 Et ce que votre code va être fait, ce que le processus Apache ou 164 00:08:03,330 --> 00:08:06,030 ce thread Apache va faire alors il doit prendre contact avec le 165 00:08:06,030 --> 00:08:08,990 base de données est-il en quelque sorte va être assis là et il va être 166 00:08:08,990 --> 00:08:12,130 attente de la base de données pour répondre. 167 00:08:12,130 --> 00:08:16,290 >> Maintenant que peut ne pas sembler un gros traiter parce que la base de données est sur votre 168 00:08:16,290 --> 00:08:18,240 appareil CS50, non? 169 00:08:18,240 --> 00:08:22,930 Mais il est une sorte de réseau latence là parce que maintenant le web 170 00:08:22,930 --> 00:08:26,830 serveur doit émettre sa propre demande la base de données pour communiquer avec l' 171 00:08:26,830 --> 00:08:29,520 base de données et ensuite obtenir que informations de retour. 172 00:08:29,520 --> 00:08:33,190 Alors maintenant, c'est comme bien attendez-moi, je suis vais aller chercher quelque chose de l' 173 00:08:33,190 --> 00:08:35,770 base de données et puis il ya un beaucoup d'attente en cours. 174 00:08:35,770 --> 00:08:36,870 Cela fait-il sens? 175 00:08:36,870 --> 00:08:38,580 >> Et pour certaines choses, ce n'est pas si mal que ça. 176 00:08:38,580 --> 00:08:41,950 Si elle a simplement, par exemple, mémoire, qui n'est pas comme 177 00:08:41,950 --> 00:08:44,100 terrible latence E / S. 178 00:08:44,100 --> 00:08:47,110 Et quand je dis, I / O de latence, ce que je suis référence est comme n'importe quel genre de comme 179 00:08:47,110 --> 00:08:48,290 d'entrée-sortie. 180 00:08:48,290 --> 00:08:52,950 Mais pour accéder à un fichier sur le disque, comme si je voulais servir le HTML statique 181 00:08:52,950 --> 00:08:57,850 fichier qui a été sur ma page web ou quelque chose comme ça, je sorte de besoin d' 182 00:08:57,850 --> 00:09:02,310 arrêter un peu, lisez ce fichier à partir du disque, et ensuite en 183 00:09:02,310 --> 00:09:04,400 ce processus, je suis en attente. 184 00:09:04,400 --> 00:09:06,700 Je ne fais pas un travail utile. 185 00:09:06,700 --> 00:09:11,270 >> Ce n'est pas vrai du tout, mais il est commun dans des applications comme P ensemble 186 00:09:11,270 --> 00:09:13,960 sept et un grand nombre d'applications que vous n'êtes pas 187 00:09:13,960 --> 00:09:15,440 en train de faire beaucoup de réflexion. 188 00:09:15,440 --> 00:09:19,090 Et quand je dis pensée, je veux dire comme le travail de calcul. 189 00:09:19,090 --> 00:09:23,270 Donc, le travail de calcul pourrait être quelque chose comme, par exemple, que vous vouliez 190 00:09:23,270 --> 00:09:26,590 écrire un serveur web qui vient calculé le nombre de Fibonacci nième. 191 00:09:26,590 --> 00:09:29,300 Cela ne ressemble pas à un particulier serveur web plaisir. 192 00:09:29,300 --> 00:09:34,220 Comme je ne m'attends pas à ce site d'être le prochain Facebook, mais c'est un peu 193 00:09:34,220 --> 00:09:35,610 genre de travail informatique. 194 00:09:35,610 --> 00:09:39,570 >> Et vous pouvez imaginer que le remplacement de un autre type intéressant 195 00:09:39,570 --> 00:09:43,070 travail de calcul. 196 00:09:43,070 --> 00:09:46,050 Disons que vous écriviez quelque chose celui calculé les degrés de 197 00:09:46,050 --> 00:09:49,170 séparation entre deux personnes ou quelque chose comme ça. 198 00:09:49,170 --> 00:09:51,860 Alors qui n'implique une sorte de calcul, non? 199 00:09:51,860 --> 00:09:56,630 Et même alors, pour ce faire, vous avez encore pour faire beaucoup de l'attente pour peut-être 200 00:09:56,630 --> 00:09:59,550 vous avez pour interroger une base de données à examiner vous qui est ami avec qui ou 201 00:09:59,550 --> 00:10:00,600 quelque chose comme ça. 202 00:10:00,600 --> 00:10:03,510 Donc, il ya ce genre de notion le travail de calcul. 203 00:10:03,510 --> 00:10:05,260 Cela fait-il sens? 204 00:10:05,260 --> 00:10:08,258 Quelqu'un at-il des questions? 205 00:10:08,258 --> 00:10:11,960 >> Oh, et je suppose que je mets serveurs de chat il parce que les serveurs de chat sont un peu 206 00:10:11,960 --> 00:10:13,240 un autre bon exemple de cela. 207 00:10:13,240 --> 00:10:15,250 Un serveur de chat n'a pas encore pour faire beaucoup de réflexion. 208 00:10:15,250 --> 00:10:18,350 Il a juste à attendre que les gens envoyer des messages et puis quand 209 00:10:18,350 --> 00:10:19,800 ils le font, les envoient. 210 00:10:19,800 --> 00:10:21,050 OK? 211 00:10:21,050 --> 00:10:23,410 212 00:10:23,410 --> 00:10:28,180 >> Donc, juste pour résumer encore une fois, Apache et serveurs web similaires comme ça fourche un 213 00:10:28,180 --> 00:10:31,470 beaucoup de discussions et les processus qui peut être une sorte de gaspillage. 214 00:10:31,470 --> 00:10:37,530 Donc je suppose que la question qui peut venir de qui est-on besoin d'avoir 215 00:10:37,530 --> 00:10:39,610 plusieurs threads et processus? 216 00:10:39,610 --> 00:10:41,890 Que faire si nous avons juste eu un? 217 00:10:41,890 --> 00:10:45,710 >> Donc, nous allons type de peinture une image de ce que cela pourrait ressembler. 218 00:10:45,710 --> 00:10:47,810 Nous allons donc utiliser un seul thread. 219 00:10:47,810 --> 00:10:48,660 OK? 220 00:10:48,660 --> 00:10:52,790 Alors imaginez ce avec un fil. 221 00:10:52,790 --> 00:10:56,600 >> Supposons que nous n'étions pas vraiment en train de faire que beaucoup utile - et quand je dis 222 00:10:56,600 --> 00:10:59,450 utile, je veux dire le travail de calcul - 223 00:10:59,450 --> 00:11:01,130 dans ces multiples discussions avant. 224 00:11:01,130 --> 00:11:04,180 Donc, nous allons genre de consolider tout dans un seul fil. 225 00:11:04,180 --> 00:11:07,780 Alors que faire si nous avions un fil de ce genre de juste qui circule dans la boucle et 226 00:11:07,780 --> 00:11:10,880 constamment contrôles ont fait quelque chose nouveau se produire. 227 00:11:10,880 --> 00:11:15,130 Ainsi, par exemple, quelque chose de nouveau est arrivé pourrait dire que je suis quelque chose de 228 00:11:15,130 --> 00:11:19,310 la base de données, ou quelqu'un envoyé moi une nouvelle requête HTTP. 229 00:11:19,310 --> 00:11:22,290 Ce sont donc les types d'événements que cela se produise, non? 230 00:11:22,290 --> 00:11:26,130 >> Et puis ce que je peux faire quand les nouveaux les choses se passent dans ce même fil 231 00:11:26,130 --> 00:11:30,120 d'exécution, ce seul thread d' exécution, je peux appeler un code qui 232 00:11:30,120 --> 00:11:32,410 permettrait de gérer cette chose particulière. 233 00:11:32,410 --> 00:11:36,640 Ainsi, par exemple, si j'ai quelque chose en retour de la base de données, je pouvais courir ma 234 00:11:36,640 --> 00:11:40,960 petite partie de calcul de ce que effectivement prépare juste la chose pour 235 00:11:40,960 --> 00:11:42,620 envoyer à l'utilisateur. 236 00:11:42,620 --> 00:11:46,710 Il en va de ce genre de logique? 237 00:11:46,710 --> 00:11:49,940 >> Mais ce sont vraiment les implications de cette? 238 00:11:49,940 --> 00:11:50,660 Droite? 239 00:11:50,660 --> 00:11:53,730 Parce que nous avons écrit beaucoup de code qui - 240 00:11:53,730 --> 00:11:58,330 et je vais juste pour sauter en avant dans les coulisses si c'est OK. 241 00:11:58,330 --> 00:12:00,930 Donc, si cela ne vous dérange pas, je suis juste va prendre un peu de recul. 242 00:12:00,930 --> 00:12:03,410 Donc, ce genre de chose est appelé une boucle d'événements. 243 00:12:03,410 --> 00:12:04,070 OK? 244 00:12:04,070 --> 00:12:07,240 Et c'est un peu la base idée derrière Node.js. 245 00:12:07,240 --> 00:12:11,240 >> Alors, que Node.js fait vraiment comme une toile serveur, c'est qu'il ya un seul fil 246 00:12:11,240 --> 00:12:14,850 qui va fondamentalement autour d'une boucle comme un moment une sorte de sous 247 00:12:14,850 --> 00:12:18,510 le capot de Node.js qui est constamment vérifier, avons-nous reçu de nouvelles choses? 248 00:12:18,510 --> 00:12:22,720 Et puis, il activera les gestionnaires que vous définissez. 249 00:12:22,720 --> 00:12:26,720 Mais une bonne question à poser est: comment pouvons-nous y arriver 250 00:12:26,720 --> 00:12:28,090 avec des choses existantes? 251 00:12:28,090 --> 00:12:32,440 >> Alors, j'ai mis une ligne de code C ici que ressemble fondamentalement à son ouverture une 252 00:12:32,440 --> 00:12:33,060 déposer, non? 253 00:12:33,060 --> 00:12:36,090 Je Elle vient de sortir un album. 254 00:12:36,090 --> 00:12:39,600 J'ai donc dû lui ouvrir un nouveau fichier. 255 00:12:39,600 --> 00:12:43,810 Donc, la façon dont notre code C en fonctionnement - 256 00:12:43,810 --> 00:12:47,890 et je suppose que la raison pour laquelle je choisi fichiers était parce que c'est un peu de l'ampleur 257 00:12:47,890 --> 00:12:52,000 des travaux d'E / S que nous avons fait dans C dans un sentiment qu'il ya d'entrée-sortie. 258 00:12:52,000 --> 00:12:55,070 Nous appelons donc ce code qui le fait f ouverte. 259 00:12:55,070 --> 00:12:59,370 Et puis sur la ligne suivante de notre programme, nous pouvons maintenant travailler avec f. 260 00:12:59,370 --> 00:13:02,710 >> Donc, ce serait un exemple de quelque chose c'est comme synchrone ou 261 00:13:02,710 --> 00:13:06,850 blocage parce que sur cette première ligne il nous attendons jusqu'à ce que nous 262 00:13:06,850 --> 00:13:08,110 obtenir le fichier ouvert. 263 00:13:08,110 --> 00:13:12,260 Donc, sur la deuxième ligne, nous savons que nous peut travailler avec f, mais cela signifie que 264 00:13:12,260 --> 00:13:16,240 que deuxième ligne ne peut pas vraiment fonctionner jusqu'à ce que la première ligne est effectué. 265 00:13:16,240 --> 00:13:17,760 Cela fait-il sens? 266 00:13:17,760 --> 00:13:20,890 >> Donc, ce serait mauvais de mettre dans un gestionnaire d'événements. 267 00:13:20,890 --> 00:13:23,920 Et la raison en est que ce genre d'attentes, non? 268 00:13:23,920 --> 00:13:26,500 Donc cela nous revenir à la même chose. 269 00:13:26,500 --> 00:13:29,470 Et maintenant, nous n'aurions même pas le bénéfice de plusieurs threads ou 270 00:13:29,470 --> 00:13:32,390 processus parce que nous avons un fil dans Node.js. 271 00:13:32,390 --> 00:13:35,496 Cela fait-il sens à tout le monde? 272 00:13:35,496 --> 00:13:35,990 >> PUBLIC: Attendez. 273 00:13:35,990 --> 00:13:36,980 Alors, quel est le remplacement? 274 00:13:36,980 --> 00:13:37,840 >> KEVIN SCHMID: Oh, oui. 275 00:13:37,840 --> 00:13:39,560 Donc, je vais arriver à le remplacement. 276 00:13:39,560 --> 00:13:40,430 OK. 277 00:13:40,430 --> 00:13:42,960 Alors que faire si nous avions quelque chose qui avait l'air comme ça? 278 00:13:42,960 --> 00:13:45,730 Alors que faire si maintenant j'ai édité f ouvrir un peu? 279 00:13:45,730 --> 00:13:48,370 Donc, je suis de passage dans la même deux arguments que précédemment. 280 00:13:48,370 --> 00:13:52,610 J'aime toujours la nouvelle chanson qu'elle est venue avec. 281 00:13:52,610 --> 00:13:57,260 Mais je suis de passage une troisième chose qui cette variable est appelé code. 282 00:13:57,260 --> 00:14:02,280 >> Mais ce qui est réellement le code dans ce contexte? 283 00:14:02,280 --> 00:14:05,360 Est-ce comme une variable ordinaire de C? 284 00:14:05,360 --> 00:14:06,740 C'est une fonction, non? 285 00:14:06,740 --> 00:14:09,450 Et c'est peut-être un peu bizarre parce que Je suis fait comme maintenant passer un 286 00:14:09,450 --> 00:14:12,320 fonctionner dans une autre fonction. 287 00:14:12,320 --> 00:14:14,400 >> Ainsi, un couple de choses à noter à ce sujet. 288 00:14:14,400 --> 00:14:17,145 Premièrement, je ne suis pas fait appel la fonction de code. 289 00:14:17,145 --> 00:14:20,650 Donc vous ne voyez pas le code de la parenthèse gauche, parenthèse droite. 290 00:14:20,650 --> 00:14:23,010 Je ne fais que passer dans le code. 291 00:14:23,010 --> 00:14:26,990 Et en C, ce que cela fait faire est me donner un pointeur sur cette réelle 292 00:14:26,990 --> 00:14:29,740 code, et cela pourrait l'exécuter. 293 00:14:29,740 --> 00:14:33,350 Mais il suffit de penser à ce sujet que vous êtes passer le code à exécuter lorsque 294 00:14:33,350 --> 00:14:35,150 ce fichier est ouvert. 295 00:14:35,150 --> 00:14:41,430 >> Mais ce que cela signifie, c'est que maintenant la reste de mon programme qui pourrait faire 296 00:14:41,430 --> 00:14:47,050 autres choses, peut continuer à faire d'autres trucs pendant que nous, pas vraiment attendre, mais 297 00:14:47,050 --> 00:14:50,890 juste avoir à l'arrière de nos têtes lorsqu'il est ouvert, terme de ce fichier que 298 00:14:50,890 --> 00:14:52,130 code en haut. 299 00:14:52,130 --> 00:14:53,390 Cela fait-il sens? 300 00:14:53,390 --> 00:14:58,060 >> Et maintenant, l'idée derrière Node.js est que le code dans la substance de do avec f 301 00:14:58,060 --> 00:15:04,590 partie devrait être assez court et simple et simple et pas vraiment 302 00:15:04,590 --> 00:15:06,160 très calcul intensif. 303 00:15:06,160 --> 00:15:09,390 Il peut avoir à ouvrir un autre fichier, mais qui devrait également être assez rapide 304 00:15:09,390 --> 00:15:14,710 car il devrait simplement dire faire une autre f ouvrir et appeler cette autre code. 305 00:15:14,710 --> 00:15:19,100 >> Donc, juste pour être tout à fait clair, la f ouvrir ce fait la nouvelle chanson de Katy Perry 306 00:15:19,100 --> 00:15:23,060 mp3 faire, cela va assez beaucoup retourner immédiatement. 307 00:15:23,060 --> 00:15:27,820 Et puis nous ne pouvons continuer à faire autres choses parce que tout ce qui maintenant f 308 00:15:27,820 --> 00:15:33,410 appel ouvert ne se dit fondamentalement la sous-jacente code ouvert f ouvrir ce fichier 309 00:15:33,410 --> 00:15:36,020 et lorsque vous avez terminé ouvrir ce déposer ou lorsque vous le récupérez, 310 00:15:36,020 --> 00:15:37,480 puis exécutez ce code. 311 00:15:37,480 --> 00:15:39,540 Mais il n'exécute pas le code. 312 00:15:39,540 --> 00:15:41,815 Et vous aviez une question? 313 00:15:41,815 --> 00:15:46,180 >> PUBLIC: Vous semblez impliquer un peu fois que l'ajout de calcul 314 00:15:46,180 --> 00:15:50,545 Code intensive sorte de briser le [Inaudible] système piloté. 315 00:15:50,545 --> 00:15:51,795 [Inaudible]? 316 00:15:51,795 --> 00:15:54,450 317 00:15:54,450 --> 00:15:55,290 >> KEVIN SCHMID: C'est une excellente question. 318 00:15:55,290 --> 00:15:59,280 J'ai donc fait un exemple de la façon dont vous pouvez intégrer des calculs 319 00:15:59,280 --> 00:16:01,090 Code intensive dans un peu. 320 00:16:01,090 --> 00:16:03,620 Alors, quand nous arrivons à les exemples de code, Je vais être sûr de tirer celui-là. 321 00:16:03,620 --> 00:16:04,700 Est-ce OK? 322 00:16:04,700 --> 00:16:05,950 Merci. 323 00:16:05,950 --> 00:16:07,690 324 00:16:07,690 --> 00:16:08,750 >> Quel était votre nom? 325 00:16:08,750 --> 00:16:10,620 >> PUBLIC: Aaron. 326 00:16:10,620 --> 00:16:14,830 >> KEVIN SCHMID: Aaron apporte une très bon point, qui est que si j'avais 327 00:16:14,830 --> 00:16:18,560 un code de calcul intensif en les trucs faire avec une partie f, le reste de 328 00:16:18,560 --> 00:16:22,880 mon programme ne peut pas fonctionner et ne peut pas écouter pour les nouvelles demandes ou quoi que ce soit jusqu'à ce que tous 329 00:16:22,880 --> 00:16:24,270 ça est terminé. 330 00:16:24,270 --> 00:16:27,390 Donc, si je vous écris code Noeud en général sauf si nous faisons quelque chose que je vais 331 00:16:27,390 --> 00:16:33,060 de proposer plus tard, quand nous regardons le des exemples de code, je dois être sûr que 332 00:16:33,060 --> 00:16:36,060 mon code ne bloque pas cette boucle d'événements. 333 00:16:36,060 --> 00:16:38,120 Cela fait-il sens? 334 00:16:38,120 --> 00:16:38,350 OK. 335 00:16:38,350 --> 00:16:40,040 Cool. 336 00:16:40,040 --> 00:16:47,090 >> Donc Node.js offre ce cadre que vous pouvez construire ces événementielle 337 00:16:47,090 --> 00:16:48,210 serveurs avec. 338 00:16:48,210 --> 00:16:53,460 Ainsi, il a ce genre de asynchrone non bloquant E / S bibliothèques, alors que 339 00:16:53,460 --> 00:16:56,800 les bibliothèques standard C que nous avons été travailler avec, comme si vous venez de 340 00:16:56,800 --> 00:16:59,500 les utiliser de la même manière que nous avons été de les utiliser avec f s'ouvre et 341 00:16:59,500 --> 00:17:03,000 trucs, ceux bloquent parce vous avez fait attendre 342 00:17:03,000 --> 00:17:04,470 ce fichier pour l'ouvrir. 343 00:17:04,470 --> 00:17:09,290 >> Mais Node.js vous donne cela et il cravates essentiellement en V8 de Google 344 00:17:09,290 --> 00:17:14,030 Moteur JavaScript qui est la raison que Chrome est si rapide au traitement 345 00:17:14,030 --> 00:17:17,040 JavaScript car il a ce moteur V8. 346 00:17:17,040 --> 00:17:22,460 Donc, je sais que cela ressemble à l'un de ceux WWDC conférences de développeurs chose 347 00:17:22,460 --> 00:17:25,390 où ils jettent tout simplement un groupe de la numéro de lettre choses pour processeurs 348 00:17:25,390 --> 00:17:26,910 et dire que c'est tellement cool. 349 00:17:26,910 --> 00:17:34,200 Mais c'est cool qu'ils ont fait car JavaScript - 350 00:17:34,200 --> 00:17:37,010 ou peut-être si vous n'êtes pas familier avec JavaScript encore parce que nous n'avons pas eu 351 00:17:37,010 --> 00:17:38,180 les conférences sur le sujet - 352 00:17:38,180 --> 00:17:40,770 mais JavaScript est un langage interprété langue. 353 00:17:40,770 --> 00:17:41,970 >> Et c'est un point important. 354 00:17:41,970 --> 00:17:45,790 Il est donc important pour notre site web serveurs d'être rapide, non? 355 00:17:45,790 --> 00:17:49,970 Et si nous étions juste en cours d'exécution JavaScript code qui a été interprété avec juste 356 00:17:49,970 --> 00:17:52,130 n'importe interprète, il pourrait être lente. 357 00:17:52,130 --> 00:17:55,980 Donc avantages nœud d'avoir ce super rapide interprète V8. 358 00:17:55,980 --> 00:17:59,580 Et je ne sais pas si ils l'ont nommé parce que la claque de V8 dans le front 359 00:17:59,580 --> 00:18:01,110 chose, mais OK. 360 00:18:01,110 --> 00:18:07,070 >> Donc, je vous ai préparé quelques exemples à cette URL. 361 00:18:07,070 --> 00:18:10,490 Après le séminaire, je suis une sorte de va parler de la façon dont vous pouvez obtenir ensemble de nœud 362 00:18:10,490 --> 00:18:13,570 , mais pour l'instant, je veux juste une sorte de de marcher à travers quelques exemples de code. 363 00:18:13,570 --> 00:18:17,250 Donc, si vous voulez suivre, tous les le code source est disponible. 364 00:18:17,250 --> 00:18:18,720 OK? 365 00:18:18,720 --> 00:18:22,280 >> Donc, je vais laisser cette URL pour un peu. 366 00:18:22,280 --> 00:18:24,440 Et puis je vais juste passer dans le terminal. 367 00:18:24,440 --> 00:18:29,670 368 00:18:29,670 --> 00:18:34,400 Tout le monde est bien avec cette URL? 369 00:18:34,400 --> 00:18:37,990 Je vais donc passer plus de à ma borne ici. 370 00:18:37,990 --> 00:18:42,030 >> Alors, voici le code qui J'ai aujourd'hui. 371 00:18:42,030 --> 00:18:43,960 Pourquoi avons-nous pas commencer par simpler.js fichier? 372 00:18:43,960 --> 00:18:49,110 373 00:18:49,110 --> 00:18:52,100 L'autre chose est que tout cela du code va être écrit dans 374 00:18:52,100 --> 00:18:56,660 JavaScript que vous déciderez ou peut-être pas familier. 375 00:18:56,660 --> 00:19:00,170 Je suppose que quelques choses est que beaucoup de code JavaScript est le genre de 376 00:19:00,170 --> 00:19:04,000 syntaxe et la structure est très similaire à C, de sorte que vous pouvez sorte de ramasser comme 377 00:19:04,000 --> 00:19:05,020 vous allez le long. 378 00:19:05,020 --> 00:19:08,750 J'ai essayé d'écrire une grande partie de la un code de départ pour cela d'une manière qui est 379 00:19:08,750 --> 00:19:11,230 similaire à C de sorte qu'il est un peu plus lisible. 380 00:19:11,230 --> 00:19:15,980 Mais alors que nous progressons, je serai montrant une partie de l'supplémentaire 381 00:19:15,980 --> 00:19:18,980 fonctionnalités de JavaScript qui sont plutôt cool. 382 00:19:18,980 --> 00:19:21,510 >> Mais regardons cet exemple de programme. 383 00:19:21,510 --> 00:19:24,820 Je suppose que tout est coupé là. 384 00:19:24,820 --> 00:19:28,500 Je vais corriger cela réel rapide si c'est OK ou pas. 385 00:19:28,500 --> 00:19:31,400 Je ne sais pas ce que cela va faire. 386 00:19:31,400 --> 00:19:34,660 Est-ce un peu mieux? 387 00:19:34,660 --> 00:19:36,510 Pouvez-vous voir le var et des trucs? 388 00:19:36,510 --> 00:19:39,320 OK. 389 00:19:39,320 --> 00:19:44,120 >> Ainsi, la première ligne est comme le JavaScript version d'une variable 390 00:19:44,120 --> 00:19:44,800 déclaration. 391 00:19:44,800 --> 00:19:49,870 Il suffit donc de mettre en évidence ce que ce serait ressemble à C. Donc, c'est tout comme 392 00:19:49,870 --> 00:19:52,620 indice me dire égale à trois ou quelque chose comme ça. 393 00:19:52,620 --> 00:19:55,740 Donc, je n'ai pas précisé le type. 394 00:19:55,740 --> 00:20:00,780 JavaScript a des types, mais il est très typé dynamiquement dans la nature, 395 00:20:00,780 --> 00:20:02,580 ne pas fournir toute sorte de type sur elle. 396 00:20:02,580 --> 00:20:03,670 Ainsi, il a juste var. 397 00:20:03,670 --> 00:20:05,320 C'est comme variable. 398 00:20:05,320 --> 00:20:05,920 OK? 399 00:20:05,920 --> 00:20:08,340 >> Et je vais appeler cette HTTP variable. 400 00:20:08,340 --> 00:20:12,480 Et sur ma droite, j'ai l' expression que je veux mettre en HTTP. 401 00:20:12,480 --> 00:20:14,960 Et cela dit nécessite HTTP. 402 00:20:14,960 --> 00:20:18,500 Donc c'est un peu similaire à inclure. 403 00:20:18,500 --> 00:20:22,940 Il est un peu plus puissant que comme inclure dans le sens d'inclure 404 00:20:22,940 --> 00:20:26,100 serait tout simplement copier et coller l'en-tête déposer pour les prototypes de fonction ou 405 00:20:26,100 --> 00:20:27,930 que ce soit avec les définitions de type. 406 00:20:27,930 --> 00:20:30,590 Mais exiger qui se passe réellement pour nous obtenir le code. 407 00:20:30,590 --> 00:20:33,280 >> Ainsi, vous pouvez penser que c'est l'importation du code. 408 00:20:33,280 --> 00:20:37,960 Donc, quelque part dans le module Node.js système ou autre, ils ont tous ce 409 00:20:37,960 --> 00:20:40,790 code du serveur HTTP, donc je suis chercher pour mon propre 410 00:20:40,790 --> 00:20:43,130 usage personnel dans ce programme. 411 00:20:43,130 --> 00:20:44,260 OK? 412 00:20:44,260 --> 00:20:46,930 >> Alors j'ai cette fonction que j'ai écrit. 413 00:20:46,930 --> 00:20:50,330 Et remarquez que je n'ai pas eu à préciser le type de retour ou le type de l' 414 00:20:50,330 --> 00:20:51,140 arguments de nouveau. 415 00:20:51,140 --> 00:20:54,440 Alors sorte de lâche tapé dans ce genre de sentiment. 416 00:20:54,440 --> 00:20:57,290 Deux arguments qu'il prend dans, la demande et la réponse. 417 00:20:57,290 --> 00:21:02,080 Donc, c'est un peu comme conceptuellement familier de l'image que nous avions 418 00:21:02,080 --> 00:21:05,280 sur l'écran avant parce nous obtenons ce que nous demande 419 00:21:05,280 --> 00:21:06,410 avoir de l'utilisateur. 420 00:21:06,410 --> 00:21:09,170 Et puis nous avons une réponse nous pouvons écrire des choses à. 421 00:21:09,170 --> 00:21:15,060 >> Ainsi, la première ligne de ce fait res.writeHead 200 puis ce 422 00:21:15,060 --> 00:21:17,070 type de contenu texte brut. 423 00:21:17,070 --> 00:21:19,300 Donc, nous allons pièce Cet dehors un peu. 424 00:21:19,300 --> 00:21:22,340 Donc, nous allons nous concentrer sur res.write pour un peu. 425 00:21:22,340 --> 00:21:28,420 Alors écriture est fondamentalement, et écrire la tête, ne sont que des façons de sorte de les écrire 426 00:21:28,420 --> 00:21:29,960 choses à la réponse. 427 00:21:29,960 --> 00:21:30,770 OK? 428 00:21:30,770 --> 00:21:36,230 Donc, écrire la tête, si quelqu'un se souvient de la conférence de HTTP, que vous les gars 429 00:21:36,230 --> 00:21:39,940 n'oubliez pas les en-têtes à l' haut de la chose HTTP? 430 00:21:39,940 --> 00:21:43,580 Alors, pourquoi dois-je Demo pas seulement têtes réel rapides. 431 00:21:43,580 --> 00:21:44,640 Serait-ce utile? 432 00:21:44,640 --> 00:21:45,500 Ou devrions-nous juste une sorte de - 433 00:21:45,500 --> 00:21:46,070 OK. 434 00:21:46,070 --> 00:21:46,740 Bien sûr. 435 00:21:46,740 --> 00:21:52,340 >> Ainsi, lorsque votre navigateur va google.com ou quelque chose comme ça, 436 00:21:52,340 --> 00:21:54,250 il ya en fait un peu plus - 437 00:21:54,250 --> 00:21:55,380 c'est comme un secret - 438 00:21:55,380 --> 00:21:58,340 il ya comme un peu plus d'informations qui vient à travers la conduite de tout 439 00:21:58,340 --> 00:22:00,180 la petite recherche et tout. 440 00:22:00,180 --> 00:22:03,550 Donc, pour vous montrer, je vais à utiliser un programme appelé Curl. 441 00:22:03,550 --> 00:22:04,260 OK? 442 00:22:04,260 --> 00:22:08,020 Donc, c'est quelque chose que vous pouvez exécuter à votre ligne de commande Mac OSX ou dans le 443 00:22:08,020 --> 00:22:09,830 appareil ou autre. 444 00:22:09,830 --> 00:22:17,050 Et si je ne Curl HTTP google.com, Je vais voir le code HTML. 445 00:22:17,050 --> 00:22:21,230 Et c'est, en toute équité, tout le HTML qui vous indique sorte de à 446 00:22:21,230 --> 00:22:24,695 rediriger vers www si votre navigateur ne gérer automatiquement le 447 00:22:24,695 --> 00:22:27,110 redirection. 448 00:22:27,110 --> 00:22:33,390 >> Donc, ce n'est que HTML, mais je vais à ajouter à ce trait d'union Détendez-je pavillon. 449 00:22:33,390 --> 00:22:33,600 OK? 450 00:22:33,600 --> 00:22:35,600 Et cela va montrer me les en-têtes. 451 00:22:35,600 --> 00:22:40,640 Donc, c'est aussi de l'information qui vient à travers quand je reçois cette réponse. 452 00:22:40,640 --> 00:22:41,260 OK? 453 00:22:41,260 --> 00:22:45,320 >> Donc, en haut, vous voyez ce HTTP 301 se déplacent en permanence. 454 00:22:45,320 --> 00:22:49,470 Et c'est assez important parce cela fait référence à l'aide du code d'état. 455 00:22:49,470 --> 00:22:53,750 Ainsi, la 301 ici est le code d'état, qui est fondamentalement juste un nombre entier 456 00:22:53,750 --> 00:22:57,750 qui raconte le navigateur ou celui qui est cette lecture, si vous prétendez que 457 00:22:57,750 --> 00:23:01,460 vous êtes un navigateur et que vous voyez ce, essentiellement maintenant si vous regardez 458 00:23:01,460 --> 00:23:04,960 que et vous voyez une 301, vous savez que j'ai de faire quelque chose de spécial sur la base de 459 00:23:04,960 --> 00:23:08,810 301, ou quelque chose de spécial s'est passé sur la base de la 301. 460 00:23:08,810 --> 00:23:12,640 Alors il dit s'installe définitivement. 461 00:23:12,640 --> 00:23:17,700 >> Et puis, au fond, nous avons un tas de paires clé-valeur. 462 00:23:17,700 --> 00:23:22,100 Nous obtenons donc l'emplacement est www.google.com. 463 00:23:22,100 --> 00:23:25,190 Et puis type de toutes ces autres choses, mais fondamentalement, ce que l'emplacement est 464 00:23:25,190 --> 00:23:29,662 énonciation est le nouvel emplacement est à l'adresse www.google.com. 465 00:23:29,662 --> 00:23:33,800 Alors maintenant, si vous allez à google.com, vous aurez sorte de voir le genre de clin de navigateur 466 00:23:33,800 --> 00:23:38,770 pour une seconde, puis vous redirigera retour à www.google.com. 467 00:23:38,770 --> 00:23:41,840 Ainsi, les réponses peuvent contenir ces en-têtes. 468 00:23:41,840 --> 00:23:43,330 >> Et un certain nombre de choses à souligner. 469 00:23:43,330 --> 00:23:46,890 Donc, disons que nous avons fait avec succès à visiter une page web. 470 00:23:46,890 --> 00:23:49,040 Donc, laissez-moi aller à - 471 00:23:49,040 --> 00:23:51,080 ce qui est un bon site web? 472 00:23:51,080 --> 00:23:53,285 Je suis mal à penser le bien sites sur place. 473 00:23:53,285 --> 00:23:53,640 >> PUBLIC: Wikipedia. 474 00:23:53,640 --> 00:23:54,160 >> KEVIN SCHMID: OK. 475 00:23:54,160 --> 00:23:56,040 Faisons Wikipedia. 476 00:23:56,040 --> 00:23:58,680 Donc ici, je suis ému. 477 00:23:58,680 --> 00:23:59,240 Oh, attends. 478 00:23:59,240 --> 00:24:00,160 Étais-je? 479 00:24:00,160 --> 00:24:00,890 Oui, je l'étais. 480 00:24:00,890 --> 00:24:01,100 OK. 481 00:24:01,100 --> 00:24:03,005 Donc, je dois faire www. 482 00:24:03,005 --> 00:24:06,006 Donc, je vais faire www. 483 00:24:06,006 --> 00:24:09,680 Et comme vous pouvez le voir, ici c'est tout le HTML que le navigateur traiterait 484 00:24:09,680 --> 00:24:10,910 pour Wikipedia. 485 00:24:10,910 --> 00:24:14,055 >> Mais si je continue à faire défiler ici, ce que je vais voir en haut - 486 00:24:14,055 --> 00:24:17,800 wow, il ya beaucoup de HTML sur Wikipedia - 487 00:24:17,800 --> 00:24:22,550 mais ce que je peux voir en haut ici est ce code, par opposition à la 200 d'état 488 00:24:22,550 --> 00:24:24,570 301 que j'ai vu auparavant. 489 00:24:24,570 --> 00:24:27,100 Et remarquez qu'il a une belle OK amical à côté de lui. 490 00:24:27,100 --> 00:24:29,470 Donc, c'est comme le bon code d'état. 491 00:24:29,470 --> 00:24:31,160 >> Est-ce que le numéro 200 semble familier? 492 00:24:31,160 --> 00:24:34,120 493 00:24:34,120 --> 00:24:39,880 Oui parce que quand je l'ai simpler.js, J'ai écrit une 200 il. 494 00:24:39,880 --> 00:24:43,290 Donc, c'est essentiellement que dire la navigateur ou celui qui essaie de se rendre à 495 00:24:43,290 --> 00:24:45,440 ce qu'ils ont réussi. 496 00:24:45,440 --> 00:24:49,040 Ou ce genre de nous comme ont réussi aussi. 497 00:24:49,040 --> 00:24:54,320 >> Et il ya ce genre de syntaxe spéciale en Javascript pour déclarer une 498 00:24:54,320 --> 00:24:59,870 carte de ces touches comme type de contenu et ces valeurs comme texte brut. 499 00:24:59,870 --> 00:25:03,780 Donc, si vous regardez la réponse que nous de rentrer de Wikipedia avant, - 500 00:25:03,780 --> 00:25:06,200 Je vais essayer de faire défiler un peu plus vite - 501 00:25:06,200 --> 00:25:09,900 vous avez ces touches comme serveur et ces valeurs Apache. 502 00:25:09,900 --> 00:25:12,120 Donc, vous avez les clés et les valeurs. 503 00:25:12,120 --> 00:25:15,930 Et vous pouvez le spécifier dans Nœud quoi renvoyer. 504 00:25:15,930 --> 00:25:19,380 >> Donc, c'est en fait assez, dans certains moyens, et à certains égards, il n'est pas 505 00:25:19,380 --> 00:25:23,170 vraiment, mais c'est un peu plus bas niveau que le code PHP que vous seriez peut-être 506 00:25:23,170 --> 00:25:26,980 écriture pour P fixé sept parce que PHP et Apache sorte de prendre soin de certains 507 00:25:26,980 --> 00:25:28,150 de ces choses pour vous. 508 00:25:28,150 --> 00:25:32,520 En PHP, vous pouvez remplacer la valeur par défaut comportement en écrivant vos propres têtes. 509 00:25:32,520 --> 00:25:35,520 Mais pour les fins de la présente, nous obtenons d'écrire nos propres têtes. 510 00:25:35,520 --> 00:25:38,210 511 00:25:38,210 --> 00:25:41,105 >> Donc, est-ce que la ligne de sens de tout le monde, la ligne de tête d'écriture? 512 00:25:41,105 --> 00:25:41,380 OK. 513 00:25:41,380 --> 00:25:42,280 Impressionnant. 514 00:25:42,280 --> 00:25:45,870 >> Alors ce que je fais, c'est que je finis la réponse en disant bonjour monde. 515 00:25:45,870 --> 00:25:47,040 OK. 516 00:25:47,040 --> 00:25:49,920 Mais c'est juste une fonction appelé gestionnaire de requêtes. 517 00:25:49,920 --> 00:25:53,510 Alors maintenant, j'ai fait de sorte de faire quelque chose avec cette fonction, non? 518 00:25:53,510 --> 00:25:59,170 >> Alors, voici ce que je fais est il est ce ligne qui fait égaux serveur var 519 00:25:59,170 --> 00:26:03,530 HTTP.create serveur, puis je passer dans le gestionnaire de demande. 520 00:26:03,530 --> 00:26:06,080 Donc, c'est un peu le nœud moyen de créer un serveur. 521 00:26:06,080 --> 00:26:08,790 Et remarque que je suis de passage dans le gestionnaire de demande. 522 00:26:08,790 --> 00:26:12,290 Donc, ce dit la createServer fonction que je veux que vous me faites une 523 00:26:12,290 --> 00:26:16,270 serveur, et lorsque le serveur reçoit une réponse, j'ai besoin que vous appelez cette 524 00:26:16,270 --> 00:26:18,680 demander fonction de gestionnaire. 525 00:26:18,680 --> 00:26:18,990 OK? 526 00:26:18,990 --> 00:26:22,290 >> Alors que la ligne à peu près termine immédiatement. 527 00:26:22,290 --> 00:26:28,780 Ainsi, la ligne de serveur var est bien fait après vous faites cela assez bien. 528 00:26:28,780 --> 00:26:31,770 Je veux dire, il doit mettre en place une interne état de savoir que vous auriez à 529 00:26:31,770 --> 00:26:35,400 appeler cette fonction demande du gestionnaire, mais il ne va pas rester là et 530 00:26:35,400 --> 00:26:37,730 par exemple a l'utilisateur envoyé moi encore une demande? 531 00:26:37,730 --> 00:26:39,270 A l'utilisateur m'a envoyé une demande encore? 532 00:26:39,270 --> 00:26:40,780 Donc, il ne bloque pas. 533 00:26:40,780 --> 00:26:41,650 OK? 534 00:26:41,650 --> 00:26:46,120 >> Donc ce que cela va faire, c'est qu'il est fondamentalement stocke désormais un pointeur vers ce code, 535 00:26:46,120 --> 00:26:49,670 cette fonction de gestionnaire de requête, puis se déroulera ce code lorsque quelqu'un 536 00:26:49,670 --> 00:26:52,170 formule une demande. 537 00:26:52,170 --> 00:26:54,120 Et puis nous faisons server.listen. 538 00:26:54,120 --> 00:26:56,950 539 00:26:56,950 --> 00:26:59,960 >> 1337, il est assez arbitraire. 540 00:26:59,960 --> 00:27:02,285 Je n'avais aucune raison particulière pour prélever de ce nombre. 541 00:27:02,285 --> 00:27:03,860 Il était totalement aléatoire. 542 00:27:03,860 --> 00:27:07,010 Mais qui spécifie uniquement le port. 543 00:27:07,010 --> 00:27:10,640 Ainsi, la plupart des serveurs Web vous verrez qu'ils utiliser le port 80, car c'est le genre 544 00:27:10,640 --> 00:27:11,810 de comme la convention. 545 00:27:11,810 --> 00:27:16,170 Donc, si je vais à quelque chose comme: Je ne sais pas, Wikipedia.org, 546 00:27:16,170 --> 00:27:17,700 et je mets deux points 8 - 547 00:27:17,700 --> 00:27:18,610 oh wow, vous ne pouvez pas le voir. 548 00:27:18,610 --> 00:27:19,370 Je suis désolé. 549 00:27:19,370 --> 00:27:21,820 Mais si je fais Wikipedia - 550 00:27:21,820 --> 00:27:24,810 Je vais écrire ici juste pour que il est clair sur la caméra. 551 00:27:24,810 --> 00:27:29,150 Mais si je prends ce dans un navigateur avec un colon 80, qui spécifie aller à 552 00:27:29,150 --> 00:27:31,430 Wikipedia.org sur le port 80. 553 00:27:31,430 --> 00:27:36,200 Donc, c'est comme la façon dont les États-Unis plusieurs ports comme l'endroit où vous pouvez expédier 554 00:27:36,200 --> 00:27:37,440 choses à type de. 555 00:27:37,440 --> 00:27:40,730 Donc, c'est comme aller à ce particulier placer sur ce serveur. 556 00:27:40,730 --> 00:27:40,990 OK. 557 00:27:40,990 --> 00:27:45,730 >> Alors j'ai juste choisi 1337. 558 00:27:45,730 --> 00:27:47,910 Il ya toute une série de numéros que vous pouvez choisir. 559 00:27:47,910 --> 00:27:50,390 Ce n'était pas tout à fait spécial. 560 00:27:50,390 --> 00:27:54,560 >> Mais ce que je vais faire maintenant c'est que je vais courir Node. 561 00:27:54,560 --> 00:27:59,730 Permettez-moi de réellement entrer que quelques lignes vers le bas de sorte que vous pouvez le voir. 562 00:27:59,730 --> 00:28:03,130 Je vais faire de nœud, et je suis va courir simpler.js. 563 00:28:03,130 --> 00:28:06,880 Et nous allons parler de la façon d'obtenir Noeud mis en place en un peu. 564 00:28:06,880 --> 00:28:09,350 Mais maintenant, il est juste de lancer le serveur. 565 00:28:09,350 --> 00:28:14,360 >> Donc, une chose que nous pouvons essayer qui ne peut pas être excitant est que nous pouvons effectivement 566 00:28:14,360 --> 00:28:16,300 essayer d'y accéder en boucle. 567 00:28:16,300 --> 00:28:20,680 Donc, je peux faire Curl, et mon machine hôte local. 568 00:28:20,680 --> 00:28:24,600 Vous verrez également ce écrit comme ceci parfois. 569 00:28:24,600 --> 00:28:29,810 Hôte local et 127.0.0.1 sont gentils comme votre ordinateur à la maison. 570 00:28:29,810 --> 00:28:33,180 Donc, c'est comme parler à votre propre ordinateur. 571 00:28:33,180 --> 00:28:33,760 OK. 572 00:28:33,760 --> 00:28:36,030 >> Et puis je peux dire 1337. 573 00:28:36,030 --> 00:28:39,630 Donc, si je lance cette ligne de code, il dit bonjour monde. 574 00:28:39,630 --> 00:28:44,050 Et si je voulais voir ce genre de choses que eu moins de type de contenu simple ou 575 00:28:44,050 --> 00:28:46,560 que ce soit, je ne pouvais même mettre cela ici. 576 00:28:46,560 --> 00:28:48,810 Et remarquez qu'il ne dit OK. 577 00:28:48,810 --> 00:28:50,810 Et j'ai le texte brut. 578 00:28:50,810 --> 00:28:53,140 Et puis il ya genre de tous ces autres choses que Node ajouter dans 579 00:28:53,140 --> 00:28:54,440 là pour moi. 580 00:28:54,440 --> 00:28:55,700 C'est pas super important. 581 00:28:55,700 --> 00:28:58,230 >> Je veux dire, il ya une sorte de technique aspects de à qui sont un peu 582 00:28:58,230 --> 00:29:02,280 cool de parler, mais juste pour montrer vous, j'ai aussi le pouvoir de 583 00:29:02,280 --> 00:29:03,070 changer ces autour. 584 00:29:03,070 --> 00:29:06,280 Donc, je peux juste ajouter un tas des trucs comme ça. 585 00:29:06,280 --> 00:29:11,780 Et puis maintenant, si je regarde dans mon sortie, il sera que. 586 00:29:11,780 --> 00:29:19,740 Ainsi, ces têtes signifient certaines choses aux navigateurs et des choses comme ça. 587 00:29:19,740 --> 00:29:23,040 >> Et en-têtes peuvent essentiellement dire à un navigateur comment répondre à quelque chose. 588 00:29:23,040 --> 00:29:26,280 Si vous avez déjà entendu parler de cookies avant, ou si vous avez jamais été ennuyé 589 00:29:26,280 --> 00:29:29,330 par une page web mise biscuits, ou transformé sur le bloc de biscuits ou 590 00:29:29,330 --> 00:29:30,320 quelque chose comme ça. 591 00:29:30,320 --> 00:29:33,040 Vous pouvez effectivement créer des cookies dans ces en-têtes. 592 00:29:33,040 --> 00:29:36,990 Alors, ils disent un navigateur comment comportement dans certains cas. 593 00:29:36,990 --> 00:29:37,750 OK. 594 00:29:37,750 --> 00:29:40,310 >> C'était donc simpler.js. 595 00:29:40,310 --> 00:29:42,780 Quelqu'un at-il des questions sur ce fichier de code source? 596 00:29:42,780 --> 00:29:45,420 597 00:29:45,420 --> 00:29:45,610 OK. 598 00:29:45,610 --> 00:29:46,490 Cool. 599 00:29:46,490 --> 00:29:50,780 >> Donc, nous allons supprimer le r de ce et regarder simple.js. 600 00:29:50,780 --> 00:29:53,010 Donc, c'est à peu près le même programme. 601 00:29:53,010 --> 00:29:56,030 Je viens d'écrire un peu différemment parce que je voulais faire un tri de clou 602 00:29:56,030 --> 00:29:57,850 certaines fonctionnalités de JavaScript. 603 00:29:57,850 --> 00:30:03,880 >> Donc remarquer que le gestionnaire de demande fonction a totalement disparu. 604 00:30:03,880 --> 00:30:05,800 Oh oui, avez-vous une question? 605 00:30:05,800 --> 00:30:08,200 >> PUBLIC: Ouais, les arguments qui sont transmis à qui 606 00:30:08,200 --> 00:30:10,120 fonction, quels sont-ils? 607 00:30:10,120 --> 00:30:12,050 >> KEVIN SCHMID: Donc, ce sont Objets JavaScript. 608 00:30:12,050 --> 00:30:15,230 Dans la documentation Node.js, il dit essentiellement ce que les méthodes sont 609 00:30:15,230 --> 00:30:15,910 disponible sur eux. 610 00:30:15,910 --> 00:30:19,602 Nous arriver juste pour avoir l'accès à cette méthode appelée tête d'écriture et à la fin 611 00:30:19,602 --> 00:30:20,730 et des trucs comme ça. 612 00:30:20,730 --> 00:30:22,590 Mais il ya tout un tas plusieurs méthodes. 613 00:30:22,590 --> 00:30:27,670 >> Et par exemple, comme l'un d'eux en particulier sur rec, vous pouvez faire 614 00:30:27,670 --> 00:30:34,540 quelque chose comme rec.method qui sera vous dire si c'est obtenir un serveur HTTP ou 615 00:30:34,540 --> 00:30:36,780 demandes HTTP POST et des choses comme ça. 616 00:30:36,780 --> 00:30:39,100 Donc, il ya toutes sortes de différents propriétés, mais ils sont tous les deux 617 00:30:39,100 --> 00:30:42,560 JavaScript objets, et ils ont juste fonctions attachées à ceux qui vous 618 00:30:42,560 --> 00:30:43,850 peut écrire des choses à. 619 00:30:43,850 --> 00:30:45,520 OK? 620 00:30:45,520 --> 00:30:49,030 >> Donc remarquer que gestionnaire de requêtes totalement disparu. 621 00:30:49,030 --> 00:30:52,650 Mais le code que j'avais en demande gestionnaire est toujours là. 622 00:30:52,650 --> 00:30:56,520 J'ai encore ce res.writeHead et j'ai toujours ce res.end. 623 00:30:56,520 --> 00:31:00,270 Et que ceci est un exemple de dans JavaScript est cette idée d'un 624 00:31:00,270 --> 00:31:01,460 fonction anonyme. 625 00:31:01,460 --> 00:31:04,180 et anonyme est comme un nom qui convient pour lui, car il ne littéralement 626 00:31:04,180 --> 00:31:05,180 avoir un nom. 627 00:31:05,180 --> 00:31:07,900 Il n'y a pas demande de fonction gestionnaire là. 628 00:31:07,900 --> 00:31:10,110 >> N'a pas de nom, mais il reste est de prendre un argument. 629 00:31:10,110 --> 00:31:12,250 Alors je me suis toujours rec et res. 630 00:31:12,250 --> 00:31:16,180 Et j'ai encore le code. 631 00:31:16,180 --> 00:31:18,930 Cela est parfaitement bien Le code JavaScript. 632 00:31:18,930 --> 00:31:22,540 Donc, je peux déclarer une fonction sans donner explicitement un nom. 633 00:31:22,540 --> 00:31:24,250 C'est un peu déroutant au premier abord. 634 00:31:24,250 --> 00:31:26,230 Il ya des choses utiles comme que vous pouvez faire avec 635 00:31:26,230 --> 00:31:28,450 ces fonctions anonymes. 636 00:31:28,450 --> 00:31:32,100 Quelqu'un at-il des questions à ce sujet, ou est-ce juste OK, pour le moment, 637 00:31:32,100 --> 00:31:34,130 sorte de simplement accepter qu'il va faire la même chose? 638 00:31:34,130 --> 00:31:36,700 639 00:31:36,700 --> 00:31:37,125 Ouais? 640 00:31:37,125 --> 00:31:38,680 >> PUBLIC: Existe fonctions de première classe en JavaScript? 641 00:31:38,680 --> 00:31:41,020 >> KEVIN SCHMID: Ils sont d'abord classe en JavaScript. 642 00:31:41,020 --> 00:31:45,490 Et il suffit de savoir que ces concepts de passant dans une fonction anonyme comme 643 00:31:45,490 --> 00:31:49,600 cela s'applique à l'JavaScript que vous peut écrire dans votre projet final pour 644 00:31:49,600 --> 00:31:51,260 le navigateur web aussi. 645 00:31:51,260 --> 00:31:56,700 Ainsi, par exemple, dans le code JavaScript à votre navigateur, c'est aussi un peu l'événement 646 00:31:56,700 --> 00:32:00,680 entraîné dans le sens que ce que vous aurez avoir est lorsque l'utilisateur clique sur ce 647 00:32:00,680 --> 00:32:02,640 bouton, je veux que vous exécutez ce code. 648 00:32:02,640 --> 00:32:07,070 >> Il est donc le même genre d'idées de la côté client lors d'un clic de souris ou qu'ils 649 00:32:07,070 --> 00:32:09,870 la souris sur une certaine image sur votre page Web, exécutez le code. 650 00:32:09,870 --> 00:32:11,350 Cela peut s'appliquer à des serveurs. 651 00:32:11,350 --> 00:32:16,380 Donc, c'est un peu comme le passionnant raison pour laquelle JavaScript est vraiment 652 00:32:16,380 --> 00:32:19,810 personnes aptes ou certains pensent que c'est une un langage adapté à ce genre de 653 00:32:19,810 --> 00:32:22,530 serveur de pilote de l'événement parce que vous avez ces fonctions anonymes. 654 00:32:22,530 --> 00:32:26,150 Vous avez l'idée de ce code asynchrone. 655 00:32:26,150 --> 00:32:27,060 OK. 656 00:32:27,060 --> 00:32:30,360 Quelqu'un a des questions? 657 00:32:30,360 --> 00:32:30,470 >> OK. 658 00:32:30,470 --> 00:32:33,440 C'était donc simple.js. 659 00:32:33,440 --> 00:32:38,070 Alors regardons un plus ou un couple plus. 660 00:32:38,070 --> 00:32:42,040 C'est donc sleep.js. 661 00:32:42,040 --> 00:32:47,160 Alors est quelqu'un familier avec la fonction sommeil C? 662 00:32:47,160 --> 00:32:50,936 De peut-être l'une des conférences antérieures ou quelque chose comme ça? 663 00:32:50,936 --> 00:32:54,650 >> Donc, fondamentalement, vous pouvez passer je pense que nombre de secondes ou si vous utilisez U 664 00:32:54,650 --> 00:32:57,080 dormir un certain nombre de millisecondes ou nanosecondes. 665 00:32:57,080 --> 00:33:00,450 Et dans le fond le programme s'arrêter courante pendant ce laps de temps. 666 00:33:00,450 --> 00:33:01,280 Droite? 667 00:33:01,280 --> 00:33:06,970 Et puis il se réveille finalement et alors il va juste continuer à fonctionner 668 00:33:06,970 --> 00:33:08,340 le programme. 669 00:33:08,340 --> 00:33:12,740 >> Donc, ce genre de serveur donne l'impression de dormir. 670 00:33:12,740 --> 00:33:17,580 Donc remarquerez que nous avons le même res.writeHead 200 avec l'en-tête en tant que 671 00:33:17,580 --> 00:33:22,130 avant, mais nous demandons ce fonction appelée ensemble timeout. 672 00:33:22,130 --> 00:33:26,170 Définir le délai est également disponible en votre navigateur web Google Chrome 673 00:33:26,170 --> 00:33:28,000 ou Safari ou autre. 674 00:33:28,000 --> 00:33:31,720 Et au fond ce qu'il fait ici est ça prend dans une fonction. 675 00:33:31,720 --> 00:33:33,360 Avis, encore une fois, c'est une fonction anonyme. 676 00:33:33,360 --> 00:33:36,310 Donc, c'est plutôt cool parce que nous sommes en utilisant une fonction anonyme dans un 677 00:33:36,310 --> 00:33:38,950 fonction anonyme qui peut être un peu bizarre. 678 00:33:38,950 --> 00:33:42,270 >> Mais ça prend cette fonction, qui est essentiellement dire - et la façon dont cette 679 00:33:42,270 --> 00:33:47,430 œuvres est en 5000 millisecondes, je veux d'exécuter cette fonction qui 680 00:33:47,430 --> 00:33:50,830 se termine juste la réponse et écrit hey. 681 00:33:50,830 --> 00:33:56,730 Donc, ce qui donne l'impression de comme dormir, mais la manière dont cette réalité 682 00:33:56,730 --> 00:33:59,780 fonctionne, c'est que nous allons nous lancer dans cette ligne très rapidement. 683 00:33:59,780 --> 00:34:01,190 Nous sommes en train d'écrire quelque chose. 684 00:34:01,190 --> 00:34:03,780 Et puis nous allons aussi parcourons cette ligne très rapidement. 685 00:34:03,780 --> 00:34:08,620 Donc, nous ne sommes pas réellement aller attendre cinq secondes. 686 00:34:08,620 --> 00:34:11,370 Nous allons juste à courir ce code instantanément. 687 00:34:11,370 --> 00:34:14,219 >> Et puis il ya, encore une fois, ce petit boucle d'événements qui a maintenant cette chose 688 00:34:14,219 --> 00:34:17,570 registres qui est fondamentalement juste constamment tourner en un cercle 689 00:34:17,570 --> 00:34:21,620 et en regardant l'horloge en un seul fil et dit, a cinq secondes 690 00:34:21,620 --> 00:34:22,360 encore passé? 691 00:34:22,360 --> 00:34:26,409 Et puis quand il voit que la deuxième main a bougé comme cinq secondes ou 692 00:34:26,409 --> 00:34:29,190 que ce soit, il se réveille et dit, oh, que dois-je faire? 693 00:34:29,190 --> 00:34:30,350 Oh, je dois exécuter ce code. 694 00:34:30,350 --> 00:34:33,110 Et puis il va exécuter res.end hey. 695 00:34:33,110 --> 00:34:35,360 >> Encore une fois, nous ne sommes jamais attendre ici. 696 00:34:35,360 --> 00:34:38,590 Donc ce n'est pas que ce code à l'intérieur de cette fonction va prendre cinq 697 00:34:38,590 --> 00:34:39,900 secondes pour courir. 698 00:34:39,900 --> 00:34:43,090 Ce code sera exécuté à peu près instantanément, au moins par rapport à 699 00:34:43,090 --> 00:34:46,139 les cinq secondes nous parlions tout à l'heure avant. 700 00:34:46,139 --> 00:34:52,100 >> Il suffit donc de montrer en action, Je peux faire Node.sleep.js. 701 00:34:52,100 --> 00:34:55,159 Et ai-je gâcher quelque chose? 702 00:34:55,159 --> 00:34:56,310 Peut-être. 703 00:34:56,310 --> 00:34:57,410 Désolé. 704 00:34:57,410 --> 00:34:59,530 Voyons ce que nous pouvons faire pour résoudre ce problème. 705 00:34:59,530 --> 00:35:10,830 706 00:35:10,830 --> 00:35:12,080 OK. 707 00:35:12,080 --> 00:35:15,460 708 00:35:15,460 --> 00:35:17,464 Donc certainement utiliser Node.js. 709 00:35:17,464 --> 00:35:19,440 Je plaisante. 710 00:35:19,440 --> 00:35:19,570 OK. 711 00:35:19,570 --> 00:35:20,820 Juste une seconde. 712 00:35:20,820 --> 00:35:27,380 713 00:35:27,380 --> 00:35:27,900 OK. 714 00:35:27,900 --> 00:35:29,130 Je sais ce que c'est. 715 00:35:29,130 --> 00:35:34,440 >> Donc, le problème est que dans mon autre onglet ici, je courais Noeud déjà 716 00:35:34,440 --> 00:35:36,590 cette même adresse, 1337. 717 00:35:36,590 --> 00:35:43,370 Donc l'erreur que cette jeté, si nous regardons à ce réel de près, est l'adresse en 718 00:35:43,370 --> 00:35:45,180 utiliser, EADDRINUSE. 719 00:35:45,180 --> 00:35:47,970 Donc j'utilisais déjà 1337 ici. 720 00:35:47,970 --> 00:35:52,210 Donc, si je ferme cette session, puis-je maintenant essayez d'exécuter ce, espérons-le, tout 721 00:35:52,210 --> 00:35:53,210 sera bien. 722 00:35:53,210 --> 00:35:53,440 OK. 723 00:35:53,440 --> 00:35:57,020 Donc, vous ne pouvez avoir une sorte de chose de l'écoute sur un port à la fois. 724 00:35:57,020 --> 00:35:59,660 Une autre solution aurait été pour moi juste modifier ce programme et de faire 725 00:35:59,660 --> 00:36:02,370 il sera comme 1338 ou quelque chose comme ça. 726 00:36:02,370 --> 00:36:04,100 >> Mais maintenant, le sommeil est en cours d'exécution. 727 00:36:04,100 --> 00:36:06,400 Donc, nous allons effectivement essayer dans la navigateur pour le moment parce que c'est un 728 00:36:06,400 --> 00:36:09,080 peu sans intérêt à voir dans un terminal. 729 00:36:09,080 --> 00:36:13,560 Donc, je vais juste aller à cette 127 adresse à nouveau à 1337. 730 00:36:13,560 --> 00:36:14,850 Et si vous pouvez le voir - 731 00:36:14,850 --> 00:36:18,050 Je ne sais pas si vous le pouvez - mais mon navigateur prenant une très, très longue 732 00:36:18,050 --> 00:36:20,600 de temps à charger ou comme cinq secondes. 733 00:36:20,600 --> 00:36:23,460 >> Et puis après, il a finalement terminé la réponse. 734 00:36:23,460 --> 00:36:29,070 Et vous ne pouvez pas le voir parce que la chose est déplacé sur un peu, mais si je fais 735 00:36:29,070 --> 00:36:32,500 ce un peu plus petit, vous peut voir qu'il dit hey. 736 00:36:32,500 --> 00:36:35,130 Alors, j'ai fait le bon, mais après cinq secondes. 737 00:36:35,130 --> 00:36:38,510 Et il pourrait être un peu plus propre à voir ici sur le terminal, donc je suis 738 00:36:38,510 --> 00:36:40,980 va faire un - 739 00:36:40,980 --> 00:36:43,540 faisons ici - 740 00:36:43,540 --> 00:36:48,370 Faisons Curl cette adresse à nouveau avec le 1337. 741 00:36:48,370 --> 00:36:50,820 Et je n'ai sorte de juste s'asseoir ici pendant cinq secondes. 742 00:36:50,820 --> 00:36:53,760 Mais notez que le serveur peut accepter de nouvelles réponses. 743 00:36:53,760 --> 00:36:54,940 Il imprime donc bon. 744 00:36:54,940 --> 00:36:58,720 >> Et de faire la démonstration ce, essentiellement ce que Je peux faire dans cette autre onglet - 745 00:36:58,720 --> 00:37:02,640 alors disons que je fais cela dans un autre onglet, Je vais faire Curl et la même 746 00:37:02,640 --> 00:37:03,780 chose de nouveau. 747 00:37:03,780 --> 00:37:06,600 Et je vais essayer de tirer les gars débarque dans le même temps. 748 00:37:06,600 --> 00:37:08,260 Donc, je vais le faire, et je suis va courir ici et je suis 749 00:37:08,260 --> 00:37:09,650 va le faire à nouveau. 750 00:37:09,650 --> 00:37:14,030 >> Et nous allons faire en sorte que vous peut voir les deux. 751 00:37:14,030 --> 00:37:20,250 C'est un bon imprimé et que l'on imprimé hey tout le chemin à - 752 00:37:20,250 --> 00:37:22,550 Faisons à nouveau cette expérience. 753 00:37:22,550 --> 00:37:25,100 En fait, nous allons utiliser cette tromper, si c'est OK. 754 00:37:25,100 --> 00:37:30,520 >> Donc, je vais utiliser une chose shell me permet de courir essentiellement deux copies 755 00:37:30,520 --> 00:37:32,630 de ce programme en parallèle. 756 00:37:32,630 --> 00:37:36,070 Donc, il va courir le premier programme et le deuxième programme en parallèle. 757 00:37:36,070 --> 00:37:39,060 Alors maintenant, si j'appuie sur Entrée, ça va en faire la demande à peu près 758 00:37:39,060 --> 00:37:40,570 instantanément en même temps. 759 00:37:40,570 --> 00:37:42,620 Donc, nous allons donner à ce coup. 760 00:37:42,620 --> 00:37:44,950 >> Alors maintenant, notez qu'il dit deux processus. 761 00:37:44,950 --> 00:37:50,630 Et si vous êtes curieux, que 27 000 nombre est essentiellement l'ID de processus. 762 00:37:50,630 --> 00:37:52,940 Et puis remarquent, ils ont imprimé hé en même temps. 763 00:37:52,940 --> 00:37:56,820 Ce n'était pas comme nous avons dû attendre cinq secondes pour un et puis après, 764 00:37:56,820 --> 00:37:59,640 Cinq secondes plus tard obtenir le deuxième. 765 00:37:59,640 --> 00:38:03,300 Donc, c'est en quelque sorte, à certains égards, c'est pas vraiment des preuves, mais il est 766 00:38:03,300 --> 00:38:07,390 évidence intuitive que ce n'est pas seulement comme attendez cinq secondes, bloquant 767 00:38:07,390 --> 00:38:08,960 l'ensemble du fil. 768 00:38:08,960 --> 00:38:10,720 OK cool. 769 00:38:10,720 --> 00:38:17,850 >> Aaron a posé une question plus tôt que était, bien que si nous ne faisons rien - 770 00:38:17,850 --> 00:38:18,735 Ouais? 771 00:38:18,735 --> 00:38:19,051 >> PUBLIC: Attendez. 772 00:38:19,051 --> 00:38:21,585 Comment est-ce différent de tampon de printf, si? 773 00:38:21,585 --> 00:38:23,010 N'est-il pas faire automatiquement? 774 00:38:23,010 --> 00:38:25,390 Pourquoi avons-nous à vous en préoccuper? 775 00:38:25,390 --> 00:38:26,555 >> KEVIN SCHMID: Oh, pourriez-vous dire que une fois de plus? 776 00:38:26,555 --> 00:38:29,510 >> PUBLIC: N'aime pas le tampon de printf faire exactement la même chose? 777 00:38:29,510 --> 00:38:31,280 >> KEVIN SCHMID: Le tampon de printf? 778 00:38:31,280 --> 00:38:32,753 >> PUBLIC: Ouais. 779 00:38:32,753 --> 00:38:33,244 OK. 780 00:38:33,244 --> 00:38:40,609 N'était-ce pas dans l'un des questionnaires qu'ils étaient parler de la façon si vous droit printf 781 00:38:40,609 --> 00:38:42,899 quelque chose et ensuite le faire arrêter un deuxième, et puis vous avez dix boucle 782 00:38:42,899 --> 00:38:46,530 fois, il va attendre dix secondes alors printf tout ensemble? 783 00:38:46,530 --> 00:38:47,460 >> KEVIN SCHMID: Oh, OK. 784 00:38:47,460 --> 00:38:49,170 >> PUBLIC: Est-il en train de faire la même chose, alors dans ce cas? 785 00:38:49,170 --> 00:38:52,630 >> KEVIN SCHMID: Donc la question était essentiellement dans l'un des anciens quiz 786 00:38:52,630 --> 00:38:57,200 ou quelque chose, il y avait une question qui fondamentalement, si vous dites impression f 10 787 00:38:57,200 --> 00:39:01,490 choses à la fois et puis dormi comme dans le processus d'impression à ceux qui, 788 00:39:01,490 --> 00:39:04,850 à la fin pour une raison quelconque, il serait simplement vider les tous sur l'écran. 789 00:39:04,850 --> 00:39:06,740 Donc, il ya deux différents types de concepts ici. 790 00:39:06,740 --> 00:39:10,400 >> Donc je suppose une chose, c'est que, dans ce cas, nous avons affaire à deux différents 791 00:39:10,400 --> 00:39:13,510 genre de personnes demandant le serveur pour des choses en même temps. 792 00:39:13,510 --> 00:39:17,455 Et la raison pour laquelle le type de printf attend comme ça et décharges tout ça 793 00:39:17,455 --> 00:39:21,760 à la fois est plus liée à comment printf sorte de - 794 00:39:21,760 --> 00:39:25,100 donc la façon printf est en fait mis en œuvre, c'est qu'il a essentiellement pour 795 00:39:25,100 --> 00:39:28,850 parler du système d'exploitation pour écrire ce genre de choses à la console. 796 00:39:28,850 --> 00:39:33,460 Donc, il ne veut pas faire tout cela trucs immédiatement lorsque vous dites printf 797 00:39:33,460 --> 00:39:36,260 une chaîne de caractères, car qui pourrait coûter cher si elle doit 798 00:39:36,260 --> 00:39:37,340 faire à chaque fois. 799 00:39:37,340 --> 00:39:41,530 >> Donc, si vous faites printf hey, votre programme peut-être pas fait imprimer que 800 00:39:41,530 --> 00:39:43,040 immédiatement à la console. 801 00:39:43,040 --> 00:39:46,080 Il pourrait dire, OK, je l'ai écrit. 802 00:39:46,080 --> 00:39:49,570 Et puis sorte de vous attendre à donner un peu plus avant de réellement 803 00:39:49,570 --> 00:39:51,380 en les écrivant dans la console. 804 00:39:51,380 --> 00:39:54,040 >> Donc la raison que c'était le cas - 805 00:39:54,040 --> 00:39:56,450 et c'est le genre de non liée au sommeil - 806 00:39:56,450 --> 00:40:00,060 est que le sommeil était une sorte de juste injectée là pour démontrer la 807 00:40:00,060 --> 00:40:02,480 fait qu 'il n'est pas écrit elle de façon synchrone. 808 00:40:02,480 --> 00:40:06,210 Mais la raison en est tout simplement la performance de sorte que vous n'avez pas à 809 00:40:06,210 --> 00:40:08,920 faire que plusieurs contacts à le système d'exploitation. 810 00:40:08,920 --> 00:40:12,300 >> Mais ici, ce que nous essayons vraiment de faire avec cette chose de sommeil est juste spectacle 811 00:40:12,300 --> 00:40:17,730 que lorsque nous avons deux personnes qui visitent ce site, il ne va pas mettre 812 00:40:17,730 --> 00:40:22,310 eux dans une ligne où il va dire Je dois vous aider, et puis quand je suis 813 00:40:22,310 --> 00:40:25,350 totalement terminé, vous aider après ces cinq secondes, puis je vais 814 00:40:25,350 --> 00:40:26,750 passer à la personne suivante. 815 00:40:26,750 --> 00:40:29,515 Donc, la demande de la première personne ne attacher la boucle d'événements 816 00:40:29,515 --> 00:40:31,610 si cela fait sens. 817 00:40:31,610 --> 00:40:34,980 >> Mais ici est en fait un exemple de quelque chose qui va lier 818 00:40:34,980 --> 00:40:36,090 la boucle d'événements. 819 00:40:36,090 --> 00:40:39,130 Alors, voici une fonction horrible calculer la nième Fibonacci. 820 00:40:39,130 --> 00:40:43,510 C'est littéralement la pire façon possible calculer le nombre de Fibonacci nième. 821 00:40:43,510 --> 00:40:48,480 Et c'est en fait juste de reconnaître d'où ça vient, 822 00:40:48,480 --> 00:40:49,330 il ya en fait - 823 00:40:49,330 --> 00:40:53,230 Je veux dire, vous pouvez essayer d'aller le trouver - mais il ya comme une très longue Blog 824 00:40:53,230 --> 00:40:54,130 poster que quelqu'un a écrit. 825 00:40:54,130 --> 00:40:55,660 C'est comme une de ces choses Reddit. 826 00:40:55,660 --> 00:40:59,650 Mais quelqu'un a critiqué Node.js, et ils ont utilisé cela comme un exemple. 827 00:40:59,650 --> 00:41:03,700 Donc j'ai un peu envie de vous montrer que deux différents points de vue juste pour obtenir 828 00:41:03,700 --> 00:41:07,320 une compréhension générale des concepts derrière ces deux choses. 829 00:41:07,320 --> 00:41:13,050 >> Mais il est choisi comme juste un horrible, calcul terriblement inefficace 830 00:41:13,050 --> 00:41:15,940 de manière intensive pour calculer la nième nombre de Fibonacci. 831 00:41:15,940 --> 00:41:21,180 Ainsi, tout comme une note côté, pourquoi est- il horribles comme une façon? 832 00:41:21,180 --> 00:41:23,210 Ouais? 833 00:41:23,210 --> 00:41:25,130 >> PUBLIC: Disons que vous commencez avec 1000. 834 00:41:25,130 --> 00:41:27,050 1000 se divise en 999 et 998. 835 00:41:27,050 --> 00:41:28,970 Chacun de ce se divise en deux choses. 836 00:41:28,970 --> 00:41:30,890 Chacun de ce se divise en deux choses. 837 00:41:30,890 --> 00:41:31,355 >> KEVIN SCHMID: Droit. 838 00:41:31,355 --> 00:41:32,400 >> PUBLIC: Tout le chemin vers le bas. 839 00:41:32,400 --> 00:41:32,840 >> KEVIN SCHMID: Exactement. 840 00:41:32,840 --> 00:41:37,330 Il suffit donc de répéter pour la caméra, si je appeler fib sur 1000 ou quelque chose comme 841 00:41:37,330 --> 00:41:41,810 comme ça, ce n'est évidemment pas moins de ou égale à un, donc je vais 842 00:41:41,810 --> 00:41:46,040 aller à cet autre cas, et puis je vais d'appeler fib 999, plus fib 998. 843 00:41:46,040 --> 00:41:50,290 Et puis à peu près tout de ce travail qui FIB 999 ne fait 844 00:41:50,290 --> 00:41:52,950 type de ce niveau. 845 00:41:52,950 --> 00:41:55,620 Si vous allez vers le bas, il est encore plus redondant que cela, mais si vous venez de 846 00:41:55,620 --> 00:42:01,390 pense fib calcul 998 reçoit nous assez proche de FIB 999. 847 00:42:01,390 --> 00:42:05,860 Donc, nous devrions vraiment être un peu plus intelligent sur la façon dont nous sorte de réutiliser 848 00:42:05,860 --> 00:42:07,580 ceux-ci, mais nous ne sommes pas réutiliser ces choses à tous. 849 00:42:07,580 --> 00:42:11,860 Alors vous pouvez imaginer ce gigantesque, arbre gigantesque qui est tout simplement horrible. 850 00:42:11,860 --> 00:42:12,940 >> Mais de toute façon, OK. 851 00:42:12,940 --> 00:42:14,040 C'était donc fib. 852 00:42:14,040 --> 00:42:15,530 Il faut du temps pour s'exécuter. 853 00:42:15,530 --> 00:42:16,510 Ouais? 854 00:42:16,510 --> 00:42:17,760 >> PUBLIC: [inaudible]. 855 00:42:17,760 --> 00:42:20,430 856 00:42:20,430 --> 00:42:22,481 >> KEVIN SCHMID: Oh, pourriez-vous répéter la question? 857 00:42:22,481 --> 00:42:23,731 >> PUBLIC: [inaudible]. 858 00:42:23,731 --> 00:42:30,840 859 00:42:30,840 --> 00:42:33,990 >> KEVIN SCHMID: Oh si ce n'est que le code que ça va être une sorte de sur le 860 00:42:33,990 --> 00:42:34,850 côté serveur. 861 00:42:34,850 --> 00:42:38,100 Donc, cela ne va pas être trouvé dans le navigateur ou quoi que ce soit. 862 00:42:38,100 --> 00:42:42,160 C'est essentiellement ce que nous avons est que lorsque l'utilisateur ici à peu près marques 863 00:42:42,160 --> 00:42:45,300 leur demande de nouveau, quand nous sorte de faire une demande, nous allons appeler 864 00:42:45,300 --> 00:42:47,040 cette fonction sur le côté serveur. 865 00:42:47,040 --> 00:42:50,480 Et puis nous aurons le résultat de retour d'appeler cette fonction. 866 00:42:50,480 --> 00:42:52,460 Et puis nous allons imprimer à l'utilisateur. 867 00:42:52,460 --> 00:42:54,580 Ainsi, l'utilisateur ne traite pas vraiment avec cette fonction trop. 868 00:42:54,580 --> 00:42:57,270 >> Était-ce la question? 869 00:42:57,270 --> 00:42:58,470 Cela fait-il sens? 870 00:42:58,470 --> 00:42:58,810 OK. 871 00:42:58,810 --> 00:43:00,930 Cool. 872 00:43:00,930 --> 00:43:04,240 >> Encore une fois, nous faisons tout ce res.writeHead chose où nous imprimons 873 00:43:04,240 --> 00:43:05,150 l'en-tête. 874 00:43:05,150 --> 00:43:09,730 Et puis je finis la réponse en faisant le nombre magique est fib 45. 875 00:43:09,730 --> 00:43:12,100 Alors disons simplement exécuter ce serveur. 876 00:43:12,100 --> 00:43:15,190 Donc, je vais faire un nœud fib.js. 877 00:43:15,190 --> 00:43:17,340 Alors maintenant, mon serveur de fib est en cours d'exécution. 878 00:43:17,340 --> 00:43:21,790 >> Et puis ici, je vais de faire un de ces. 879 00:43:21,790 --> 00:43:22,200 OK? 880 00:43:22,200 --> 00:43:24,960 Donc, je vais juste dire, Curl. 881 00:43:24,960 --> 00:43:32,226 Donc ça va prendre un peu de temps mais bientôt je l'espère, il va finir et 882 00:43:32,226 --> 00:43:35,660 il affiche cette 45e Fibonacci nombre. 883 00:43:35,660 --> 00:43:36,910 >> PUBLIC: [inaudible]. 884 00:43:36,910 --> 00:43:40,720 885 00:43:40,720 --> 00:43:42,050 >> KEVIN SCHMID: Il devrait se fait assez rapidement. 886 00:43:42,050 --> 00:43:43,780 Donc, il devrait prendre de cinq à six secondes. 887 00:43:43,780 --> 00:43:48,570 Je ne sais pas ce que c'est juste V8 être super rapide, mais dans tous les cas, il s'agit d'un 888 00:43:48,570 --> 00:43:52,700 très court exemple et à dessein inélégant d'un non-trivial 889 00:43:52,700 --> 00:43:54,200 calcul. 890 00:43:54,200 --> 00:43:56,700 Ainsi, après un certain temps, il ne se présente. 891 00:43:56,700 --> 00:44:02,130 >> Mais maintenant, si je fais le même genre de expérience comme avant où je fais 892 00:44:02,130 --> 00:44:04,010 deux demandes en même temps? 893 00:44:04,010 --> 00:44:06,990 Donc ici, je vais à un Curl sur cette adresse, et je vais 894 00:44:06,990 --> 00:44:08,260 faire un autre Curl. 895 00:44:08,260 --> 00:44:12,070 Et rappelez-vous, quand nous l'avons fait pour la dormir serveur, lorsque nous avons eu essentiellement, 896 00:44:12,070 --> 00:44:15,320 après cinq secondes, ils ont pas mal beaucoup tous deux venus arrière droit 897 00:44:15,320 --> 00:44:16,380 dans le même temps. 898 00:44:16,380 --> 00:44:18,650 Donc, il n'était pas particulièrement attaché. 899 00:44:18,650 --> 00:44:20,290 >> Mais essayons maintenant. 900 00:44:20,290 --> 00:44:22,370 OK, donc nous avons eu nos deux processus. 901 00:44:22,370 --> 00:44:24,210 Rappelez-vous que ce sont les ID de processus. 902 00:44:24,210 --> 00:44:25,900 Cela va être un peu maladroit tandis que nous piétinons. 903 00:44:25,900 --> 00:44:31,340 904 00:44:31,340 --> 00:44:35,360 Donc, nous allons rester ici et attendre. 905 00:44:35,360 --> 00:44:37,090 >> Alors l'un d'eux doit venir de retour après comme - 906 00:44:37,090 --> 00:44:39,190 OK, donc on est revenu. 907 00:44:39,190 --> 00:44:43,570 Mais alors pourquoi ne pas le second un come back pour l'instant? 908 00:44:43,570 --> 00:44:44,389 Ouais? 909 00:44:44,389 --> 00:44:49,280 >> AUDIENCE: Le serveur ne peut pas faire n'importe quoi alors qu'il est le calcul de ce grand nombre. 910 00:44:49,280 --> 00:44:51,620 >> KEVIN SCHMID: Droit. 911 00:44:51,620 --> 00:44:55,395 Donc, la réponse était juste que le serveur ne peut vraiment pas faire quoi que ce soit tout 912 00:44:55,395 --> 00:44:57,460 c'est le calcul de ce nombre de Fibonacci. 913 00:44:57,460 --> 00:44:59,360 Alors maintenant, je viens de recevoir mes deux les choses. 914 00:44:59,360 --> 00:45:03,210 Mais je suppose que de penser à tout le code un peu plus, comment ça marche 915 00:45:03,210 --> 00:45:05,030 et tout. 916 00:45:05,030 --> 00:45:11,750 >> Donc, cette fonction ici est le code qui J'ai dit à ce serveur à courir quand il 917 00:45:11,750 --> 00:45:14,100 reçoit une nouvelle demande entrante. 918 00:45:14,100 --> 00:45:17,940 Donc, il va tout simplement de courir à travers ce code complet, puis il va aller 919 00:45:17,940 --> 00:45:21,120 revenir à la boucle d'événements, puis continuer vérification des nouveaux événements. 920 00:45:21,120 --> 00:45:23,670 Donc, fondamentalement, ce que nous avons passe est le serveur est 921 00:45:23,670 --> 00:45:25,080 écoute pour de nouvelles choses. 922 00:45:25,080 --> 00:45:28,070 La première personne demande ce 45 est. 923 00:45:28,070 --> 00:45:30,490 Nous courons le code de la calculer. 924 00:45:30,490 --> 00:45:33,420 Ce code prend environ cinq six secondes pour courir. 925 00:45:33,420 --> 00:45:36,990 Ensuite, nous revenons à la boucle d'événements et vérifier les nouvelles demandes. 926 00:45:36,990 --> 00:45:42,700 >> C'est donc un exemple de la façon dont, si vous des choses qui sont soi-disant calcul 927 00:45:42,700 --> 00:45:48,140 lié, ou utiliser beaucoup de calcul, pas le pouvoir, mais comme sont 928 00:45:48,140 --> 00:45:50,260 calcul intensif - 929 00:45:50,260 --> 00:45:54,080 Je pense qu'une chose à dire à ce sujet est que cette fonction est fait en totalité, 930 00:45:54,080 --> 00:45:56,310 la plupart du temps, assez droit de travail utile. 931 00:45:56,310 --> 00:45:59,970 Pendant tout le temps que ce rappel fonction a été lancé, il était assez 932 00:45:59,970 --> 00:46:03,670 beaucoup passer la plupart de son temps juste informatique numéro nième de Fibonacci. 933 00:46:03,670 --> 00:46:05,930 >> Mais nous avions seulement un fil à traiter. 934 00:46:05,930 --> 00:46:10,270 Dans le modèle Apache, lorsque deux personnes fait la demande pour obtenir fib 45, nous 935 00:46:10,270 --> 00:46:11,610 aurait eu deux fils différents. 936 00:46:11,610 --> 00:46:15,060 Et puis l'emploi de système d'exploitation aurait été, ou le niveau de l'utilisateur 937 00:46:15,060 --> 00:46:18,660 code qui gère les fils, l'aurait fait consiste à diviser que sur la 938 00:46:18,660 --> 00:46:23,060 CPU, ou même si vous aviez plusieurs processeurs, distribuer uniformément sur le CPU 939 00:46:23,060 --> 00:46:26,130 de sorte qu'ils étaient tous les deux fini à peu près en même temps. 940 00:46:26,130 --> 00:46:31,120 >> Donc, juste pour vous montrer comment nous pouvons trier du - et ce n'est pas un parfait totale 941 00:46:31,120 --> 00:46:34,280 solution, mais sorte de comment nous pouvons faire une revenir ici et faire 942 00:46:34,280 --> 00:46:35,880 un peu mieux. 943 00:46:35,880 --> 00:46:41,540 Donc ce que j'ai ici est un programme appelé Fib C. Et ce utilise essentiellement 944 00:46:41,540 --> 00:46:45,690 un autre des modules de noeud appelé Le module de traitement des enfants. 945 00:46:45,690 --> 00:46:49,210 J'ai donc inclus que dans le genre haut des que je ferais un livre inclure 946 00:46:49,210 --> 00:46:51,230 process.h des enfants ou quelque chose. 947 00:46:51,230 --> 00:46:56,210 Maintenant, j'ai accès à cette variable de CP qui a toute ma fonctionnalité. 948 00:46:56,210 --> 00:47:01,810 >> Alors maintenant, ce que je fais dans cette réponse gestionnaire est j'exécute ce programme 949 00:47:01,810 --> 00:47:04,100 point slash fib 45. 950 00:47:04,100 --> 00:47:06,820 Donc ce que j'ai fait - et je vais de sortir de ce programme pour un 951 00:47:06,820 --> 00:47:07,620 peu - 952 00:47:07,620 --> 00:47:11,060 c'est que je l'ai écrit un programme en C qui calcule essentiellement le 953 00:47:11,060 --> 00:47:12,630 nième nombre de Fibonacci. 954 00:47:12,630 --> 00:47:15,960 Alors, voici juste un programme que j'ai écrit en C qui calcule ce. 955 00:47:15,960 --> 00:47:19,040 Je peux le compiler, et je peux courir il à la ligne de commande. 956 00:47:19,040 --> 00:47:22,150 Et il va calculer le Nombre 45e Fibonacci. 957 00:47:22,150 --> 00:47:24,510 >> Donc, il faut juste remarqué à peu près aussi longtemps. 958 00:47:24,510 --> 00:47:28,240 Je pourrais probablement utilisé dash 03 à optimiser ou quelque chose comme ça, 959 00:47:28,240 --> 00:47:31,050 mais je l'ai fait comme régulière paramètres du compilateur. 960 00:47:31,050 --> 00:47:33,260 Et il imprime-le. 961 00:47:33,260 --> 00:47:36,830 >> Mais maintenant, ce que je sorte de faire? 962 00:47:36,830 --> 00:47:39,800 Oh désolé, mauvais fichier. 963 00:47:39,800 --> 00:47:42,800 Donc, je fais la même chose avec l'en-tête avant. 964 00:47:42,800 --> 00:47:45,780 Ensuite, je fais ce cp.exec. 965 00:47:45,780 --> 00:47:49,460 Donc ce que cela va faire, c'est que c'est va exécuter ce programme. 966 00:47:49,460 --> 00:47:51,960 Mais la façon dont cela fonctionne est que ça ne va pas attendre 967 00:47:51,960 --> 00:47:53,400 ce programme à la fin. 968 00:47:53,400 --> 00:47:56,000 Il dit juste fondamentalement exécuter ce programme. 969 00:47:56,000 --> 00:47:58,700 Donc, fondamentalement, ce type dans le commander genre invite de. 970 00:47:58,700 --> 00:48:02,350 >> Et puis, quand vous avez terminé avec il, exécutez cette fonction. 971 00:48:02,350 --> 00:48:04,800 Alors maintenant, nous recevons ce genre de chose tout restauré 972 00:48:04,800 --> 00:48:06,750 comme nous ne sommes pas en attente. 973 00:48:06,750 --> 00:48:08,530 Est-ce que ce genre de sens? 974 00:48:08,530 --> 00:48:08,990 Ouais? 975 00:48:08,990 --> 00:48:11,060 >> PUBLIC: [inaudible]? 976 00:48:11,060 --> 00:48:13,610 >> KEVIN SCHMID: Donc ce sera effectivement ouvrir un nouveau processus pour le faire. 977 00:48:13,610 --> 00:48:19,310 Donc, c'est en fait, à certains égards, mal, pas super mal, mais il est 978 00:48:19,310 --> 00:48:22,990 important de dire que c'est une sorte de revenir à, d'une part, l'Apache 979 00:48:22,990 --> 00:48:26,450 modèle où nous faisons threads et processus pour chaque demande ou 980 00:48:26,450 --> 00:48:29,280 procédés pour chaque demande. 981 00:48:29,280 --> 00:48:32,090 Donc c'est un peu analogue à ce que fait Apache. 982 00:48:32,090 --> 00:48:35,110 Dans certains cas, il suffit d'utiliser une nouvelle fil, qui est un peu plus de lumière 983 00:48:35,110 --> 00:48:39,040 poids d'un processus, mais Apache pourrait finir bifurquer un nouveau processus 984 00:48:39,040 --> 00:48:43,370 qui est une sorte de ce que nous faisons ici implicitement en faisant point barre fib 45. 985 00:48:43,370 --> 00:48:48,690 >> Et alors dans ce cas, nous sorte de encourons les mêmes dépenses de processus. 986 00:48:48,690 --> 00:48:50,710 Donc, c'est juste une chose que vous pouvez faire. 987 00:48:50,710 --> 00:48:52,600 Mais juste pour montrer ce genre de course. 988 00:48:52,600 --> 00:48:57,120 Et ce discours est vraiment destiné à présenter ce genre de programmes en 989 00:48:57,120 --> 00:49:00,710 manière de montrer différents points de vue sur la façon de concevoir des serveurs comme ça. 990 00:49:00,710 --> 00:49:08,300 Donc, cela est en cours d'exécution, puis maintenant, si je fais cette fois, j'ai eu deux ID de processus. 991 00:49:08,300 --> 00:49:10,320 >> Parlons peu près choses à remarquer. 992 00:49:10,320 --> 00:49:11,980 Donc remarquent qu'ils sont progressivement. 993 00:49:11,980 --> 00:49:12,700 C'est cool. 994 00:49:12,700 --> 00:49:15,140 Parce que c'était 27 122 avant. 995 00:49:15,140 --> 00:49:18,580 Mais remarquez maintenant, ils sont revenus à peu près au même moment. 996 00:49:18,580 --> 00:49:23,960 >> Et maintenant, une bonne question à poser à propos de pourquoi est-ce que l'affaire est, dont le travail 997 00:49:23,960 --> 00:49:27,590 était maintenant en quelque sorte de faire ces choses sorte de fair-play à chaque 998 00:49:27,590 --> 00:49:31,350 d'autres, ces deux instances de point barre fib 45 que j'ai couru 999 00:49:31,350 --> 00:49:32,880 ou que Node ran? 1000 00:49:32,880 --> 00:49:36,940 Qui sorte de fait-il juste que les deux se genre de pondérées moment de l'exécution? 1001 00:49:36,940 --> 00:49:42,900 1002 00:49:42,900 --> 00:49:44,220 >> PUBLIC: [inaudible]. 1003 00:49:44,220 --> 00:49:44,620 >> KEVIN SCHMID: Ouais. 1004 00:49:44,620 --> 00:49:49,740 Donc, fondamentalement, quand je fais point barre fib 45 ou quelque chose comme ça, il est maintenant 1005 00:49:49,740 --> 00:49:53,750 de sorte à le système d'exploitation à gérer l'exécution de ces programmes. 1006 00:49:53,750 --> 00:49:56,920 Et maintenant, il peut les programmer sur les processeurs différent ou 1007 00:49:56,920 --> 00:49:58,330 peut les programmer. 1008 00:49:58,330 --> 00:50:01,870 Il peut découper le temps que l'on CPU est ou qu'ils obtiennent 1009 00:50:01,870 --> 00:50:03,330 pour fonctionner sur un processeur. 1010 00:50:03,330 --> 00:50:05,620 Donc, c'est l'idée derrière cela. 1011 00:50:05,620 --> 00:50:07,220 Cela fait-il sens à tout le monde? 1012 00:50:07,220 --> 00:50:10,950 Alors maintenant nœud n'est pas vraiment joue un participer à diviser ces tâches. 1013 00:50:10,950 --> 00:50:12,200 OK. 1014 00:50:12,200 --> 00:50:14,050 1015 00:50:14,050 --> 00:50:17,840 >> C'est donc presque pour des exemples. 1016 00:50:17,840 --> 00:50:23,370 Je voulais juste montrer une chose parce que beaucoup de ce a été jusqu'ici 1017 00:50:23,370 --> 00:50:27,350 pas totalement super-pratique dans certains cas. 1018 00:50:27,350 --> 00:50:30,970 Je peux imaginer rentrer à la maison après cette parler et quelque chose et dire comme, 1019 00:50:30,970 --> 00:50:35,710 bien que je sorte de suis sorti de cet entretien que Je peux faire un serveur de Fibonacci pour 1020 00:50:35,710 --> 00:50:37,360 mon projet final. 1021 00:50:37,360 --> 00:50:40,770 Alors, voici en quelque sorte d'un exemple plus qui, nous l'espérons être - 1022 00:50:40,770 --> 00:50:44,620 peut-être pas, mais peut-être - un peu plus sorte de rapport avec les projets définitifs et 1023 00:50:44,620 --> 00:50:46,440 penser à l'avenir pour des choses comme ça. 1024 00:50:46,440 --> 00:50:48,870 >> C'est donc chat.js. 1025 00:50:48,870 --> 00:50:52,290 Donc c'est un peu comme certains échantillon code côté serveur que vous pouvez utiliser pour 1026 00:50:52,290 --> 00:50:55,700 mettre en place un petit serveur de chat comme vous avez pu voir sur le 1027 00:50:55,700 --> 00:50:56,630 Facebook Chat ou autre. 1028 00:50:56,630 --> 00:50:59,990 Donc, je ne dis pas que c'est comme Facebook Discute, mais c'est un peu 1029 00:50:59,990 --> 00:51:06,230 comme un bon - peut-être pas bon, mais peut-être point de départ pour un chat - bon 1030 00:51:06,230 --> 00:51:08,560 serveur pour votre site web pour un projet final. 1031 00:51:08,560 --> 00:51:11,040 Alors regardons ce qu'il fait. 1032 00:51:11,040 --> 00:51:15,500 >> Nous allons donc faire cette chose spéciale au sommet, ce Var SIO 1033 00:51:15,500 --> 00:51:17,050 égaux nécessite Socket.IO. 1034 00:51:17,050 --> 00:51:20,280 Donc, c'est une autre chose que ce n'est pas fait venir livré avec 1035 00:51:20,280 --> 00:51:22,300 Noeud mais vous pouvez l'installer. 1036 00:51:22,300 --> 00:51:23,480 C'est un module Node. 1037 00:51:23,480 --> 00:51:25,670 Donc, c'est juste comme une extension à nœud. 1038 00:51:25,670 --> 00:51:29,220 >> SocketIO est effectivement très plutôt cool. 1039 00:51:29,220 --> 00:51:32,550 C'est une abstraction que, fondamentalement, ce il ne fait que dire qu'il vous permet de 1040 00:51:32,550 --> 00:51:35,770 avoir ce flux de communication entre une bande 1041 00:51:35,770 --> 00:51:39,430 navigateur et un serveur Web. 1042 00:51:39,430 --> 00:51:45,250 Donc, pour la plupart, à ce jour, nous avons eu ces très rapide une seconde ou deux 1043 00:51:45,250 --> 00:51:48,790 les communications entre une seconde bande le navigateur et le serveur Web. 1044 00:51:48,790 --> 00:51:53,310 Donc, c'est essentiellement aller à google.com, get le truc, le renvoyer, puis 1045 00:51:53,310 --> 00:51:53,770 nous aurons terminé. 1046 00:51:53,770 --> 00:51:56,560 Nous ne sommes jamais à parler jusqu'à ce que le types d'utilisateur dans quelque chose d'autre. 1047 00:51:56,560 --> 00:52:01,090 >> Mais ce Socket.IO et même genre de choses - et SocketIO est en fait un 1048 00:52:01,090 --> 00:52:03,940 des choses qui est construit en tant que WebSocket qui est une sorte de disponible 1049 00:52:03,940 --> 00:52:06,440 dans le cadre de HTML5 - 1050 00:52:06,440 --> 00:52:09,620 qui vous permet d'avoir ce la poursuite du dialogue. 1051 00:52:09,620 --> 00:52:13,990 Et ceci est très utile dans un serveur de chat genre de chose, car il est 1052 00:52:13,990 --> 00:52:17,390 un peu comme un dialogue continu dans certains égards, parce que si vous discutez 1053 00:52:17,390 --> 00:52:21,540 avec quelqu'un, vous pouvez maintenant, envoyez simplement un un message dans le tuyau, puis le 1054 00:52:21,540 --> 00:52:23,940 serveur peut envoyer un message en bas de la tuyau à l'autre personne que vous êtes 1055 00:52:23,940 --> 00:52:24,520 bavarder avec. 1056 00:52:24,520 --> 00:52:26,903 Et puis vous pouvez avoir cette échanger comme ça. 1057 00:52:26,903 --> 00:52:30,590 1058 00:52:30,590 --> 00:52:32,850 >> Donc, c'est le genre de ce que SocketIO est bon pour. 1059 00:52:32,850 --> 00:52:38,400 La raison pour laquelle SocketIO utilise WebSockets comme une chose, c'est que dans 1060 00:52:38,400 --> 00:52:43,980 Outre tout simplement vieux WebSockets, il fait aussi quelques astuces pour l'essentiel 1061 00:52:43,980 --> 00:52:45,610 rendre navigateur compatible. 1062 00:52:45,610 --> 00:52:50,040 Donc navigateurs comme Internet Explorer malheureusement, ne supporte pas les WebSockets 1063 00:52:50,040 --> 00:52:50,810 dès la sortie de la boîte. 1064 00:52:50,810 --> 00:52:55,290 Donc, il utilise un autre type de frais soignée choses avec Adobe Flash pour permettre 1065 00:52:55,290 --> 00:52:57,170 vous avez le soutien du navigateur croix. 1066 00:52:57,170 --> 00:52:58,800 Donc, c'est vraiment utile. 1067 00:52:58,800 --> 00:53:02,440 >> Et en fait, je sais que je suis une sorte de fonctionnant sur le temps ici, mais CS50 1068 00:53:02,440 --> 00:53:08,490 Discuter, avez-vous jamais vu quelque chose comme, je ne sais pas, ébauche est ainsi et ainsi 1069 00:53:08,490 --> 00:53:11,030 répondre à ce message ou quelque chose comme ça, cette fonctionnalité? 1070 00:53:11,030 --> 00:53:12,250 C'est SocketIO. 1071 00:53:12,250 --> 00:53:15,580 Alors, quand quelqu'un commence à taper dans le boîte discuter pour faire une réponse ou 1072 00:53:15,580 --> 00:53:20,040 quelque chose, votre navigateur ne ce qui est appelé dans SocketIO émet une sorte de 1073 00:53:20,040 --> 00:53:22,660 Si quelqu'un est dit répondre à ce message. 1074 00:53:22,660 --> 00:53:26,110 >> Ensuite, le serveur dit, OK, que dois-je faire? 1075 00:53:26,110 --> 00:53:29,270 Eh bien maintenant, je dois dire à ces autres gars qui sont sur CS50 Discutez recherche 1076 00:53:29,270 --> 00:53:31,170 à ce poste que quelqu'un a répondu. 1077 00:53:31,170 --> 00:53:34,190 Donc, c'est le genre de ce qui est SocketIO bon pour ce genre continue de 1078 00:53:34,190 --> 00:53:35,930 flux de dialogue. 1079 00:53:35,930 --> 00:53:37,250 OK. 1080 00:53:37,250 --> 00:53:40,060 >> Donc ce que j'ai ici - et nous sommes juste va ignorer le tableau de connexions 1081 00:53:40,060 --> 00:53:41,390 pour un peu - 1082 00:53:41,390 --> 00:53:43,080 ce que je fais c'est que je ne l'écoute l'autre. 1083 00:53:43,080 --> 00:53:46,880 Donc, c'est juste la façon Socket.IO est disant écoutons sur ce port. 1084 00:53:46,880 --> 00:53:50,060 Et puis je fais ce lors de la connexion. 1085 00:53:50,060 --> 00:53:53,360 Donc, c'est juste fondamentalement Socket OI façon de dire, lorsque nous recevons une 1086 00:53:53,360 --> 00:53:55,840 égard, je vous veux Pour exécuter ce code. 1087 00:53:55,840 --> 00:53:59,870 >> Et remarquez qu'au lieu d'avoir rec res et passés là j'ai Socket. 1088 00:53:59,870 --> 00:54:03,260 Et cette idée de Socket est fondamentalement ce chose que vous pouvez lire et écrire 1089 00:54:03,260 --> 00:54:05,750 de celle a l'utilisateur de messages peut-être. 1090 00:54:05,750 --> 00:54:10,700 Et les messages que vous souhaitez envoyer peut passer par ce Socket. 1091 00:54:10,700 --> 00:54:12,140 Cela fait-il sens? 1092 00:54:12,140 --> 00:54:14,490 C'est donc cette chose continue. 1093 00:54:14,490 --> 00:54:17,820 >> Donc ce que je fais est que j'appelle Socket.emit. 1094 00:54:17,820 --> 00:54:20,330 Et émettent prend assez beaucoup deux arguments. 1095 00:54:20,330 --> 00:54:24,100 Le premier argument est une chaîne juste représentant le type d' 1096 00:54:24,100 --> 00:54:25,270 chose que vous êtes d'émission. 1097 00:54:25,270 --> 00:54:28,120 Donc, pour ce cas, je n'ai utilisation cette chaîne un nouveau message. 1098 00:54:28,120 --> 00:54:32,670 Et c'est juste en disant essentiellement que le type de cette chose, ce que je suis 1099 00:54:32,670 --> 00:54:34,750 envoi, est un nouveau message. 1100 00:54:34,750 --> 00:54:38,460 Ainsi, vous pouvez écouter pour des types spécifiques comme un nouveau message ou quoi 1101 00:54:38,460 --> 00:54:39,960 en utilisant le point. 1102 00:54:39,960 --> 00:54:44,570 >> Donc, la connexion et l'utilisateur envoyés là-bas, si vous regardez où nous appelons point sur, 1103 00:54:44,570 --> 00:54:48,150 ce sont les autres chaînes qui représentent les types de messages d'utilisateur. 1104 00:54:48,150 --> 00:54:52,060 Il est donc, fondamentalement, vous pouvez avoir cette émettent l'un de ces types de messages, et 1105 00:54:52,060 --> 00:54:55,520 puis faire quelque chose en réponse à l'un de ces types de messages 1106 00:54:55,520 --> 00:54:57,640 >> Je suis donc émettre ce nouveau message. 1107 00:54:57,640 --> 00:55:00,540 Nous allons ignorer connections.push pour une seconde. 1108 00:55:00,540 --> 00:55:03,360 Mais alors je dis, l'utilisateur Socket.on envoyé. 1109 00:55:03,360 --> 00:55:07,540 Alors maintenant, il est un peu comme lorsque l' l'utilisateur envoie-moi un message, je veux 1110 00:55:07,540 --> 00:55:09,240 d'exécuter ce code. 1111 00:55:09,240 --> 00:55:12,080 Et remarquez que cette fonction anonyme est prise dans cette variable 1112 00:55:12,080 --> 00:55:16,300 appelé données qui est essentiellement vont d'avoir le message de l'utilisateur. 1113 00:55:16,300 --> 00:55:20,700 >> Le genre de Alors maintenant laisser de parler le tableau de connexions. 1114 00:55:20,700 --> 00:55:24,590 Donc, cela est conçu pour un client de chat où fondamentalement tout le monde est un peu en 1115 00:55:24,590 --> 00:55:25,950 la même salle de chat. 1116 00:55:25,950 --> 00:55:29,640 Donc, fondamentalement, ce que nous devons garder autour s'agit d'un tableau que, fondamentalement, 1117 00:55:29,640 --> 00:55:33,170 représente tous les gens qui bavardent dans certains égards, si cela fait sens. 1118 00:55:33,170 --> 00:55:33,340 Droite? 1119 00:55:33,340 --> 00:55:37,190 Parce que nous avons besoin de savoir qui sont ces gars sommes afin que nous puissions leur envoyer des messages 1120 00:55:37,190 --> 00:55:39,140 que d'autres personnes nous envoient. 1121 00:55:39,140 --> 00:55:44,440 >> Alors, que fait ce code est lorsque l'utilisateur envoie un message - c'est le type de 1122 00:55:44,440 --> 00:55:45,300 l'événement - 1123 00:55:45,300 --> 00:55:47,120 nous allons exécuter ce code. 1124 00:55:47,120 --> 00:55:51,240 Et ce que nous faisons, c'est que nous courons à travers ce tableau que nous avons appelé les connexions. 1125 00:55:51,240 --> 00:55:54,390 Et à peu près à chaque connexion sauf celui qui est le nôtre, c'est 1126 00:55:54,390 --> 00:55:59,520 ce que dit ce code, nous enverrons un nouveau un message à ce message attaché 1127 00:55:59,520 --> 00:56:01,210 information. 1128 00:56:01,210 --> 00:56:04,880 >> Donc, si vous remarquez ici, ce que j'ai fait quand l'utilisateur effectue en fait une nouvelle 1129 00:56:04,880 --> 00:56:08,560 connexion est j'ai ajouté à la Procédé JavaScript.push, c'est 1130 00:56:08,560 --> 00:56:12,100 fondamentalement juste dire comme ajouter que Socket comme une valeur en 1131 00:56:12,100 --> 00:56:13,900 notre connexions réseau. 1132 00:56:13,900 --> 00:56:20,560 Alors maintenant, quand ce code s'exécute, elle est envoyer des choses à ceux particulier 1133 00:56:20,560 --> 00:56:22,020 connexions. 1134 00:56:22,020 --> 00:56:26,980 Donc cela peut être un bon point de départ de réalisation d'un serveur de chat 1135 00:56:26,980 --> 00:56:28,250 ou quelque chose de semblable. 1136 00:56:28,250 --> 00:56:33,315 >> Et le genre de truc cool, c'est que la code que vous voyez ici pour comme sur et 1137 00:56:33,315 --> 00:56:36,390 émettent et des trucs comme ça, c'est la même sorte de code JavaScript que vous le feriez 1138 00:56:36,390 --> 00:56:39,260 écrire dans le navigateur d'interagir avec le serveur. 1139 00:56:39,260 --> 00:56:42,480 Voilà pourquoi SocketIO est une sorte de propre et utile dans ce sens. 1140 00:56:42,480 --> 00:56:45,680 1141 00:56:45,680 --> 00:56:49,250 >> Oh et encore une chose très vite. 1142 00:56:49,250 --> 00:56:55,970 Il y avait un projet final CS50 l'année dernière que, fondamentalement, mis en œuvre une conversation 1143 00:56:55,970 --> 00:56:57,840 serveur dans Node.js. 1144 00:56:57,840 --> 00:57:01,350 Je pense que c'est Harvardchats.org mais je ne suis pas - 1145 00:57:01,350 --> 00:57:02,940 OK. 1146 00:57:02,940 --> 00:57:06,190 Je ne suis pas sûr de ce que l'URL est, mais Je peux envoyer que sur la suite. 1147 00:57:06,190 --> 00:57:09,260 Mais c'est le genre de refroidir ce vous pouvez faire avec Node.js. 1148 00:57:09,260 --> 00:57:14,680 >> J'espère donc que, en général, vous les gars ont un bonne idée de ce Node.js est utile 1149 00:57:14,680 --> 00:57:17,870 et comment vous pourriez peut-être demander à votre projet final. 1150 00:57:17,870 --> 00:57:21,050 Je vais envoyer quelques-uns plus ressources avec cela. 1151 00:57:21,050 --> 00:57:23,170 Et je vous remercie d'être venus. 1152 00:57:23,170 --> 00:57:23,610 Merci. 1153 00:57:23,610 --> 00:57:27,168 >> [Applaudissements]