>> KEVIN SCHMID: Hallo zusammen.
Willkommen in der CS50-Seminar auf Node.js.
Mein Name ist Kevin.
Ich bin ein CS50 TF.
Und ich bin ein bisschen wie wirklich aufgeregt, zu diesem Seminar.
Ich denke, Node.js ist sehr cool.
Ich hoffe, dass dieses Seminar kann verwendet werden, als gut, ich denke, Sprungbrett für
einige Ihrer letzten Projekte, wenn Sie sind daran interessiert, mit
so etwas wie Node.js.
>> Wir werden eine Art beginnen das Seminar durch nur um ein wenig von der
Art der Hintergrund Skalierbarkeit Perspektiven von Node.js und dann
wir werden auf einige Code-Beispiele zu bewegen.
Und ich werde den Code auf einer Webseite haben, und man kann sich den Code anschauen.
Und nach dem Seminar, werde ich der Diskussion sortieren darüber, wie Sie einrichten können Node.js
auf Ihrem Computer.
>> OK.
Also lasst uns loslegen.
Also ich denke, ich will nur reden Web-Server, wirklich, zuerst.
Und um diese Diskussion zu beginnen, ich grundsätzlich ein Diagramm ist, das aus
das Lehrbuch für CS61 verwendet, die zeigt im Grunde die Interaktion
zwischen einem Client-Prozess, wie Ihre Web- Browser oder wie Ihr Ziel Client oder
so etwas, und einen Web-Server.
Also diese Art der sieht ähnlich aus wie die Bild, das Sie in der Vorlesung auf sah
Mittwoch, wo im Grunde haben wir einige Client-Prozess wie Google Chrome.
>> Und dann ist der erste Schritt der Client sendet eine Anfrage.
Damit so etwas wie gut wir sein zu besuchen, weiß ich nicht, CS50.net.
Also haben wir diesen Antrag zu erteilen.
Und hat jemand an den Namen erinnern das Protokoll, wie das angibt
Anfrage strukturiert sein sollte?
Yep.
>> ZIELGRUPPE: [unverständlich].
>> KEVIN SCHMID: Genau.
So ist es wie HTTP, oder?
Also im Grunde, wie die Spezifikation für diesem Antrag sollte eigentlich verlegt werden
aus, weil am Ende des Tages, Dieser Antrag ist wirklich nur wie ein
Zeichenfolge, die im Grunde sagt, ich möchte dies.
Und die Spezifikation dafür ist HTTP.
Also das ist wie ein Protokoll.
>> Also der Server dass Anfrage.
So können Sie Jungs haben ein Web-Server installiert in der CS50-Appliance.
Es ist Apache.
Und diese Woche, wenn Sie Problem zu umgehen stellte sieben, werden Sie tatsächlich arbeiten
mit dem Web-Server.
So empfängt der Server diesen Antrag, und dann muss es seine Art kratzen
Kopf und sagen wie gut, was kann ich damit zu tun?
>> Also auf das, was sie beschließt, zu tun, dann auf der Basis es haben kann, eine Art kontaktieren
der Ressource.
Und das könnte eine Ressource viele verschiedene Dinge.
Für einen, es könnte nur wie eine statische HTML-Datei.
Es könnte also sein, wie einige HTML, die wie für ist
Ihre persönliche Website.
Es könnte eine statische Datei wie ein Bild sein oder wie ein Film, den Sie haben.
Es könnte sogar müssen reden zu einer Art von Datenbank
wie eine MySQL-Datenbank.
So ist es nicht immer, zu kommunizieren mit einer Ressource, sondern in
In einigen Fällen könnte es.
>> Also dann, was es tun wird danach ist, es wird
schicken Sie die Antwort.
Und die Antwort dafür ist, auch von HTTP angegeben.
So kann der Client zu empfangen.
Es kann es zu zerreißen und verarbeiten.
Und dann eine Web-Seite erhalten Sie wie Google oder CS50.net oder
was auch immer Sie zu ging.
OK?
>> Das ist also die grundlegende Interaktion, die wir gehen mit zu tun.
Und wir sind ziemlich viel los zu sein Schwerpunkt auf diesem Teil der
Interaktion, der Server.
OK.
Kühl.
Wer Fragen haben so weit?
OK.
>> Also wie gesagt, erhält der Web-Server Diese HTTP-Anfrage und gibt dann diese
HTTP-Antwort.
Und wie wir darüber gesprochen, bevor die CS50 Gerät Webserver Apache.
Also, wenn Sie arbeiten Jungs auf P gesetzt sieben, Sie gehen, um mit der zu arbeiten sind
Apache Web-Server.
Sie müssen nie wirklich funktioniert direkt mit Apache zu viel.
Sie konfigurieren Art von Apache ein wenig wenn Sie die virtuellen Hosts oder geben
v die Gastgeber, und wir bekommen dass in einem wenig.
>> Aber im Grunde, der Apache-Webserver eingerichtet, um mit PHP arbeiten Art
der aus der Box.
Also, was wirklich passiert ist, wenn du gehst zu einem Ihrer Websites wie, sagen wir,
lokalen Host Strich index.php oder so etwas, Ihr Browser sendet, dass
Anfrage und dann Apache sitzt dort und findet heraus, um mit ihm zu tun.
Und die Aktion ausführen , dass Code in index.php und
dann schicken Sie es ab zurück.
Es gibt also, dass.
So Art sprachen wir darüber.
So ist es nur eine statische Datei dienen könnte oder Ausgabe laufen einige PHP-Code und dann
ist die Reaktion.
>> So dann eine häufig gestellte Frage, die kommen können Sie ist gut, wie wir wirklich tun
mit mit mehreren Benutzern zur gleichen Zeit?
So vorstellen, ob Sie einen Web-Schreiben Server, wenn Sie einen Web-Server hatte, dass
Sie versuchen, in etwas zu schreiben wie C oder so etwas,
im Grunde kann man darüber nachdenken, wie es könnte eine Art Code sein, dass
würde die Anfrage erhalten, aber dann es muss all diese Arbeit auf es zu tun.
Es kann zu haben, zum Beispiel, wenden die Datenbank oder so ähnlich.
Right?
Und dann wäre es diese Art tun der Verarbeitung und dann
die Antwort zurück gesendet.
Also das ist, wie die hohe Level-Übersicht.
>> Aber es ist nicht sofort klar, wie Sie tun können, so dass zwei Personen oder
sogar 1.000 Menschen konnten mit der Arbeit Ihrer Web-Server zur gleichen Zeit.
So ist die Lösung, die von Apache wird Threads oder Prozesse genannt.
So können Sie gehört haben, diese Begriffe vor.
Es ist OK, wenn Sie nicht haben, aber denken Sie nur über Threads oder Prozesse als Wege für
ein Betriebssystem oder ein Anwendungsprogramm oder so etwas wie das, oder ein Web-Server
zu Art ausführen mehrere Dinge auf einmal.
So können Sie den Begriff gehört haben, wie Fäden der Ausführung.
Also ist es eine Art, wie du bist Art von Multitasking.
>> Und wenn Sie auf das Feld der gesehen habe Ihre Laptop oder so etwas,
Multicore, was Sie tun können ist, können Sie laufen zwei verschiedene Threads auf verschiedenen
Teilen der CPU, so dass sie tatsächlich zur gleichen Zeit passieren.
Also das ist wirklich mächtig.
Und dies ist eine Art von Apache Lösung für dieses Problem.
>> So gibt es eine Art, wie alle Probleme mit diesem Ansatz aber?
Also ich denke, ich Art schrieb sie dort.
Aber beide Art von verwenden eine Menge Speicher.
Es ist sehr teuer zu erstellen ein Faden oder ein Prozess.
>> Und ein Teil der Argumentation ist, dass nur wie wenn Sie mit einer C-Programm sind
wie Ihr Haupt-und dann, dass Anrufe Eine weitere Funktion hat, daß
eine Art von Stack.
So auch Themen erfordern eine völlig separaten Stapel die
kann ziemlich groß sein.
Und wenn Sie sich vorstellen können, die Tonnen Benutzer auf Ihrer Website, Sie müssten
eine Menge von verschiedenen Threads.
Das ist eine Menge von Stacks zu zu verwalten und zu pflegen.
Es ist also große Speicherverbrauch.
>> Und dann auch, sagen wir, Sie haben nur eine CPU, oder sagen wir, Sie haben
mehr Threads als Sie haben diese Multicores.
Right?
Also sagen wir, Sie hatten 10 Threads und Sie hatten nur fünf CPUs.
Sie Art haben, dies zu tun, wo Sie wechseln zwischen dem aktuellen
eine, weil Sie läuft ist können nicht alle 10 auf einmal laufen.
Und das nennt sich ein Kontextwechsel.
Und dieser Begriff hat tatsächlich ein paar verschiedenen Kontexten, aber lasst uns einfach
halten sie als Schalt zwischen zwei Threads.
Das kann ziemlich teuer sein, weil im Grunde, was Sie tun müssen, ist, dass Sie
zu stoppen, was du tust, speichern Sie die Zustand dieser laufenden Thread, und
dann woanders wechseln.
>> So hat jeder irgendwie sehen die Motivation, warum Fäden und
Prozesse vielleicht ein wenig sperrig sein?
Und haben Sie eine Frage?
OK.
Kühl.
Wer irgendwelche Fragen?
OK.
>> Also, wenn wir einen Schritt zurück für eine zweite, es ist ein bisschen wie ein
Beobachtung, dass wir über zu machen eine Menge von Web-Anwendungen.
Und das ist wirklich, dass viele von ihnen tatsächlich tun das nicht viele nützliche
arbeiten innerhalb eines Threads.
So hat jemand begann am P gesetzt sieben überhaupt?
So wollen Sie vielleicht beschreiben wollen einige der Teile?
Haben Sie bei der Anmeldung gearbeitet oder so etwas?
>> ZIELGRUPPE: Nein
>> KEVIN SCHMID: OK.
Das macht nichts.
Entschuldigung.
Aber im Grunde, in der P-Reihe, sind Sie sein werden, machen eine Menge Art
Abfragen an eine Datenbank, einige bekommen Informationen aus dieser Datenbank.
Und was der Code tun werden, was das Apache-Prozess oder
dass Apache Thread tun werden während es zu Kontakt mit dem
Datenbank ist es eine Art sein wird da sitzen und es wird sein
warten auf die Datenbank zu antworten.
>> Nun, da dieser nicht wie groß ein klingen mag beschäftigen, da die Datenbank auf Ihrem
CS50 Gerät, oder?
Aber es ist eine Art von Netzwerk Latenz, denn jetzt gibt es die Web-
Server auf seinen eigenen Antrag zur Ausgabe die Datenbank die Kommunikation mit dem
Datenbank und dann bekommen, dass Informationen zurück.
So, jetzt ist es wie auch auf mich warten, ich bin gehen zu holen etwas aus der
Datenbank und dann gibt es eine Viele warten los.
Heißt das Sinn?
>> Und für manche Dinge ist es nicht so schlimm.
Wenn es nur um zum Beispiel Access Memory, das ist nicht wie
schreckliche I / O-Latenz.
Und wenn ich sage, was ich I / O-Latenz beziehe, ist wie jede Art von wie
Eingabe-Ausgabe.
Aber für den Zugriff auf eine Datei auf der Festplatte, wie wenn ich die statische HTML dienen wollte
-Datei, die auf meiner Web-Seite oder so etwas, ich Art müssen
Stopp für ein bisschen, lesen Sie die Datei in der von der Platte, und dann in
dass die Prozess ich warte.
Ich sage nicht, wertvolle Arbeit.
>> Dies gilt jedoch nicht alles, aber es ist häufig in Anwendungen wie P-Set
sieben und eine Vielzahl von Anwendungen dass Sie nicht
tatsächlich tun, viel zu denken.
Und wenn ich sage, denken, ich meine, wie Rechenarbeit.
So Rechenarbeit könnte etwas sein wie, sagen wir, wollten Sie
einen Web-Server, die nur berechnet die n-te Fibonacci-Zahl.
Das klingt nicht besonders klingen Spaß Web-Server.
Wie würde ich nicht erwarten, dass vor Ort zu sein der nächste Facebook, aber das ist etwas
Art von Rechenarbeit.
>> Und Sie können sich vorstellen, dass Austausch mit eine andere Art von interessanten
Rechenarbeit.
Angenommen, Sie waren etwas zu schreiben, dass die berechneten Grade der
Abstand zwischen zwei Personen oder so ähnlich.
Damit erfordert etwas Art der Berechnung, oder?
Und auch dann zu tun, dass Sie immer noch eine Menge Warte für vielleicht tun
Sie haben, um eine Datenbank zu schauen abfragen up wer Freunde mit, wer oder
so ähnlich.
So gibt es diese Art von Vorstellung der Rechenarbeit.
Heißt das Sinn?
Hat jemand Fragen?
>> Oh, und ich denke, ich habe es Chatserver weil Chat-Server sind so eine Art
ein weiteres gutes Beispiel dafür.
Ein Chat-Server nicht über zu viel Denken zu tun.
Es muss nur für die Menschen warten, um Nachrichten senden und dann, wenn
sie haben, schicken Sie sie.
OK?
>> Also einfach wieder rekapitulieren, Apache und ähnliche Web-Server wie die Gabel ein
Menge Threads und Prozesse, die können Art verschwenderisch sein.
Also ich denke, die Frage, die kommen können, aus, dass ist müssen wir haben
mehrere Threads und Prozesse?
Was ist, wenn wir nur eine?
>> Lassen Sie uns also ein Bild Art zu malen was diese aussehen würde.
So verwenden wir nur ein Thread.
OK?
Also einfach vorstellen, das mit einem Thread.
>> Nehmen wir an, wir waren nicht wirklich tun dass viele nützliche - und wenn ich sage
nützlich, ich meine Rechenarbeit -
in diesen mehrere Threads vor.
Lassen Sie uns also Art von Konsolidierung alles in einem Thread.
So was, wenn wir einen Thread, dass Art der geht nur um in der Schleife und
Kontrollen ständig etwas tat neue passieren.
So zum Beispiel, etwas Neues passiert könnte bedeuten, Ich habe etwas zurück von
die Datenbank, oder jemand geschickt mir eine neue HTTP-Anfrage.
Das sind also die Art von Veranstaltungen das passieren, oder?
>> Und dann, was ich tun kann, wenn diejenigen, die neu Dinge passieren, ist in diesem selben Thread
der Ausführung, diese einzelne Faden Ausführung, kann ich einige Code-Aufruf,
würde, dass bestimmte Sache zu behandeln.
So zum Beispiel, wenn ich etwas zurückgeben aus der Datenbank, laufe ich konnte meine
kleine Rechen Teil von ihr, dass bereitet eigentlich nur die Sache
Nachricht an den Benutzer zurück.
So funktioniert diese Art von Sinn?
>> Aber was sind wirklich die Folgen davon?
Right?
Weil wir geschrieben haben eine Menge Code, dass -
und ich werde einfach weiter springen in den Folien, wenn das ist OK.
Also, wenn Sie nichts dagegen haben, ich bin nur gehen, um einen Schritt zurück machen.
Also diese Art der Sache ist als Ereignis-Schleife.
OK?
Und es ist eine Art der Grund Idee hinter Node.js.
>> Also, was Node.js wirklich tut als Web- Server gibt es einen einzigen Thread
Das ist im Grunde geht um in einer Schleife wie ein, während eine Art von unter
die Haube von Node.js ist, die sich ständig Kontrolle, wir haben neue Dinge zu erhalten?
Und dann wird es laufen Handler dass Sie einrichten.
Aber eine gute Frage ist, wie können wir damit dies geschieht
mit bestehenden Dinge?
>> Also habe ich eine Reihe von C-Code, dass hier im Grunde sieht aus wie es die Eröffnung eines
Datei, oder?
Sie kam ich gerade aus mit einem Album.
Also musste ich ihr eine neue Datei zu öffnen.
So wie unsere C-Code für den Betrieb -
und ich denke, der Grund, warum ich wählte Dateien war denn dies ist Art von dem Ausmaß
der I / O-Arbeit, die wir in C gemacht habe ein Gefühl, dass es Eingang-Ausgang.
Diesen Code, so nennen wir das tut dies f geöffnet.
Und dann in der nächsten Zeile der Programm, können wir nun mit f zu arbeiten.
>> Also das wäre ein Beispiel für etwas zu sein das ist wie Synchron-oder
Sperrung, weil an diesem ersten Linie dort sind wir, bis wir warten
bekommen die Datei geöffnet.
So in der zweiten Zeile, wir wissen, dass wir mit f zu arbeiten, aber das bedeutet, dass
dass die zweite Linie nicht wirklich laufen kann bis die erste Zeile abgeschlossen ist.
Heißt das Sinn?
>> Also das wäre schlecht zu setzen in einem Ereignishandler.
Und der Grund dafür ist, dass diese Art von Wartezeiten, oder?
So würde das uns wieder zurück dasselbe ist.
Und jetzt würden wir nicht einmal die Nutzen der mehreren Threads oder
Prozesse weil wir ein Thread in Node.js.
Heißt das Sinn machen, alle?
>> ZIELGRUPPE: Warten.
Also, was ist der Ersatz?
>> KEVIN SCHMID: Oh, also ja.
So werde ich zu erreichen einwechseln.
OK.
So was, wenn wir etwas hatten dass sah aus wie das?
So was, wenn ich jetzt bearbeitet f ein wenig zu öffnen?
Also ich bin in der gleichen Durch zwei Argumente wie zuvor.
Ich liebe immer noch den neuen Song dass sie kam mit.
Aber ich vorbei eine dritte Sache, die wird diese Variable namens Code.
>> Aber was ist eigentlich Code in diesem Zusammenhang?
Ist es wie bei einer normalen C-Variable?
Es ist eine Funktion, oder?
Und das kann ein wenig komisch, weil sein Ich bin eigentlich wie jetzt vorbei ein
Funktion in einer anderen Funktion.
>> So ein paar Dinge, über die diese beachten.
Man, ich bin nicht wirklich fordern der Code-Funktion.
So können Sie nicht sehen, die mit Code paren links, rechts paren.
Ich bin nur auf der Durch im Code.
Und in C, was dies tatsächlich tun wird ein Zeiger geben, mich zu diesem tatsächlichen
Code ein, und dann könnte es laufen.
Aber nur darüber nachdenken, wie du bist Passieren der Code ausgeführt werden, wenn
die Datei geöffnet wird.
>> Jedoch bedeutet dies, dass nun die Rest meines Programms, das tun konnte,
andere Sachen, auch weiterhin andere tun Sachen, während wir, nicht wirklich warten, aber
nur im Hinterkopf haben, dass wenn dieser Datei geöffnet ist, führen Sie diese
Code an der Spitze.
Heißt das Sinn?
>> Und nun die Idee, die hinter Node.js ist, dass der Code in der do Sachen mit f
Teil sollte recht kurz und einfach sein und einfach und nicht wirklich sein
sehr rechenintensiv.
Er kann eine andere Datei zu öffnen, aber das sollte auch ziemlich schnell sein
denn es sollte einfach sagen, das andere tun f zu öffnen, und rufen Sie dann diese anderen Code.
>> Also, nur um ganz klar, die f öffnen das macht das neue Katy Perry Song
getan mp3, das wird ziemlich viel sofort zurück.
Und dann können wir nur weiterhin tun andere Sachen, weil alle, die jetzt f
offene Aufforderung nicht sagen, das ist im Grunde f zugrunde liegenden Open-Code öffnen Sie diese Datei
und wenn Sie fertig sind diese Öffnung Datei oder wenn Sie es zurück zu bekommen,
führen, dass Code.
Aber es bedeutet nicht, dass der Code tatsächlich ausgeführt.
Und Sie hatten eine Frage?
>> ZIELGRUPPE: Sie schien zu bedeuten, ein paar Zeiten, die rechnerisch hinzufügen
Code intensive Art brechen das [Unverständlich] basiertes System.
[Unverständlich]?
>> KEVIN SCHMID: Das ist eine große Frage.
So habe ich eigentlich ein Beispiel, wie Sie integrieren könnte rechnerisch
intensive Code in ein kleines bisschen.
Also, wenn wir auf die Code-Beispiele zu erhalten, Ich werde Sie sicher, dass ein zu ziehen.
Ist das OK?
Danke.
>> Was war Ihr Name?
>> ZIELGRUPPE: Aaron.
>> KEVIN SCHMID: Aaron bringt eine sehr guter Punkt, nämlich, dass, wenn ich
einige rechenintensiven Code in das mach was mit f Teil, den Rest
mein Programm kann nicht ausgeführt werden und kann nicht hören für neue Anforderungen oder etwas, bis alle
das Zeug ist beendet.
Also, wenn ich Knoten Schreiben von Code im Allgemeinen wenn wir etwas tun, wie werde ich
später vorschlagen, wenn wir auf die Code-Beispiele, muss ich sicher sein, dass
mein Code nicht binden Diese Ereignisschleife.
Heißt das Sinn?
OK.
Kühl.
>> So bietet Node.js diesem Rahmen Sie können diese ereignisgesteuert bauen
Server mit.
Diese Art von asynchronen So hat sie nicht-blockierende I / O-Bibliotheken, während
die Standard-C-Bibliotheken, die wir waren Arbeit mit, wie wenn Sie nur
verwenden sie in der gleichen Weise, die wir haben wurde mit f mit ihnen öffnet und
Sachen, die blockieren, weil Sie haben tatsächlich zu warten
die Datei zu öffnen.
>> Aber Node.js gibt Ihnen das und es im Grunde knüpft an die Google-V8
JavaScript-Engine, die der Grund ist, dass Chrome so schnell in die Verarbeitung
JavaScript weil es hat diese V8-Motor.
Also ich weiß, das klingt wie einer von denen, WWDC Entwicklerkonferenzen Sache
wo sie werfen nur ein paar der Brief Nummer Dinge für Prozessoren
und sagen, das ist so cool.
Aber es ist cool, dass sie es taten dies, weil JavaScript -
oder vielleicht, wenn Sie nicht kennen JavaScript weil wir noch nicht gehabt haben
die Vorträge auf sie -
aber JavaScript ist eine interpretierte Sprache.
>> Und das ist ein wichtiger Punkt, auch.
Daher ist es wichtig für unsere Web- Server, schnell zu sein, oder?
Und wenn wir gerade läuft JavaScript Code, der mit interpretiert wurde nur
alle alten Dolmetscher, es könnte langsam sein.
So Knoten profitiert von dieser super schnelle V8-Interpreter.
Und ich weiß nicht, ob sie es mit dem Namen weil der V8 Ohrfeige in der Stirn
Sache, aber OK.
>> Also habe ich einige Beispiele vorbereitet unter dieser URL.
Nach dem Seminar bin ich irgendwie zu gehen, darüber reden, wie man Knoten-Set erhalten
, aber für jetzt, ich will einfach irgendwie durch einige Code-Beispiele gehen.
Also, wenn Sie folgen möchten, können alle Quellcode ist dort zur Verfügung.
OK?
>> Also werde ich diese URL verlassen sich für ein wenig.
Und dann bin ich gerade dabei, wechseln in das Terminal.
Sind alle gut mit dieser URL?
So werde ich zum Umschalten zu meinem Terminal hier.
>> Also hier ist der Code, der Ich habe für heute.
Warum gehen wir nicht beginnen mit simpler.js-Datei?
Die andere Sache ist, dass all dies Code wird sich in geschrieben werden
JavaScript denen Sie oder möglicherweise nicht vertraut sind.
Ich denke, ein paar Dinge ist, dass viele JavaScript-Code ist die Art von
Syntax und Struktur sehr ähnlich ist C, so können Sie Art abholen, wie
Sie gehen zusammen.
Ich habe versucht, eine Menge von der Schreib Startcode für diese in einer Weise, dass es
ähnlich zu C, so dass es ein wenig mehr lesbar.
Aber wie wir Fortschritte, ich werde sein zeigt einige der zusätzlichen
Features von JavaScript, dass sind irgendwie cool.
>> Aber schauen wir uns an diesem Beispielprogramm.
Ich denke, alles ist dort ab zu schneiden.
Ich werde einfach zu beheben, dass die realen schnell, ob das OK ist oder nicht.
Ich weiß nicht, was dieser tun wird.
Ist das ein wenig besser?
Können Sie die var und Sachen zu sehen?
OK.
>> Also die erste Zeile ist wie der JavaScript- Version einer variablen
Erklärung.
Also nur zu markieren, was würde dies aussehen wie in C. Das ist also genau wie
mir sagen Index gleich drei oder so ähnlich.
Ich habe also nicht den Typ.
JavaScript hat zwar Typen, aber es ist sehr dynamisch in der Natur eingegeben, so
nicht bieten jede Art von Typ auf sie.
So hat es gerade var.
Das ist wie variabel.
OK?
>> Und ich rufe diese Variable HTTP.
Und auf meiner rechten Seite, ich habe die Ausdruck, möchte ich in HTTP setzen.
Und das sagt erfordern HTTP.
So ist diese Art von ähnlich umfassen.
Es ist ein wenig mehr wie mächtiger als sind in dem Sinne, die zählen
würde einfach kopieren und fügen Sie den Kopf Datei für die Funktionsprototypen oder
was auch immer mit den Typdefinitionen.
Aber verlangen ist eigentlich los um uns den Code.
>> So haben Sie es als denken können Import von etwas Code.
Also irgendwo in der Node.js-Modul System oder was auch immer, sie alle haben diese
HTTP-Server-Code, so bin ich nur Holen sie für meine eigenen
persönlichen Einsatz in diesem Programm.
OK?
>> So dann habe ich diese Funktion dass ich geschrieben habe.
Und merken, hatte ich nicht, um anzugeben der Rückgabetyp oder die Art der
Argumente wieder.
So Art von lose eingetippt diese Art von Sinn.
Zwei Argumente, die es in, die Anfrage und Antwort.
Also das ist eine Art, wie konzeptionell aus dem Bild, das wir hatten vertraut
auf dem Bildschirm vor, weil wir diesen Antrag zu bekommen, die wir
haben von dem Benutzer.
Und dann eine Antwort haben wir, dass wir können die Dinge zu schreiben.
>> Also die erste Zeile der dies tut res.writeHead 200 und dann dieses
Inhaltstyp Text Ebene.
Also lassen Sie uns dies Stück ein wenig auseinander.
Also lasst uns einfach auf res.write konzentrieren ein wenig.
So schreiben ist im Grunde, und Schreibkopf, sind nur Möglichkeiten, um Art schreiben
Dinge auf die Antwort.
OK?
So schreiben Kopf, wenn jemand erinnert sich aus dem HTTP-Vortrag, tun Sie Kerle
erinnern an die Kopfzeilen oben auf dem HTTP-Sache?
Also, warum ich nicht einfach Demo nicht Header, sehr kurz.
Wäre das hilfreich sein?
Oder sollen wir einfach irgendwie -
OK.
Sicher.
>> Also, wenn Ihr Browser geht auf google.com oder so etwas,
es gibt tatsächlich ein wenig mehr -
das ist wie ein Geheimnis -
es ist wie ein wenig mehr Informationen das kommt durch das Rohr als nur
der kleine Suche und alles.
So zeigen Ihnen diese, werde ich ein Programm namens Locken zu verwenden.
OK?
Also das ist etwas, dass Sie an laufen Mac OSX Befehlszeile oder in der
Gerät oder was auch immer.
Und so, wenn ich Locken HTTP google.com, Ich werde den HTML zu sehen.
Und das ist, in Fairness, nur die HTML, die Art sagt Ihnen,
Umleitung auf www, wenn Ihr Browser nicht automatisch verarbeiten die
Umleitung.
>> So ist das nur HTML, aber ich werde um diesen Bindestrich ich markieren Locken hinzuzufügen.
OK?
Und das wird sich zeigen mir die Header.
Das ist also auch Informationen, die kommt durch, wenn ich diese Antwort.
OK?
>> Also an der Spitze, das sehen Sie HTTP 301 permanent zu bewegen.
Und das ist wichtig, weil Art von dies bezieht sich auf den Statuscode.
Also das hier ist der 301-Statuscode, das ist im Grunde nur eine ganze Zahl
dass der Browser oder wer auch immer sagt, ist lesen, wenn Sie behaupten, dass
Sie sind ein Browser und Sie sehen, sind diese, im Grunde jetzt, wenn Sie schauen
und, dass Sie eine 301 sehen, wissen Sie, ich habe , etwas Besonderes zu tun, basierend auf
301, oder etwas Besonderes passiert basierend auf dem 301.
So sagt es dauerhaft verschoben.
>> Und dann, im Grunde haben wir eine Reihe von Schlüssel-Wert-Paaren.
Die Lage So bekommen wir ist www.google.com.
Und dann all diese Art von anderen Sachen, aber im Grunde, was die Lage ist
Sprichwort ist der neue Standort unter www.google.com.
So jetzt, wenn Sie google.com gehen, werden Sie Art finden Sie in der Browser-Art von blink
für eine zweite und dann leiten Sie gleich wieder auf www.google.com.
So können die Antworten enthalten diese Header.
>> Und ein paar Dinge, die darauf hinweisen.
Also lassen Sie uns sagen, wir waren tatsächlich erfolgreich beim Besuch einer Web-Seite.
Also lassen Sie mich zu gehen -
was ist eine gute Website?
Ich bin schlecht im Denken der guten Websites auf der Stelle.
>> ZIELGRUPPE: Wikipedia.
>> KEVIN SCHMID: OK.
Lassen Sie uns Wikipedia.
Also hier war ich bewegt.
Oh, Moment.
War ich?
Ja, das war ich.
OK.
Also habe ich zu tun, www.
Also werde ich tun, www.
Und wie Sie sehen können, hier ist die ganze HTML dass der Browser würde verarbeiten
für Wikipedia.
>> Aber wenn ich hier oben halten Scrollen, was ich an der Spitze sehen -
wow, es gibt eine Menge von HTML auf Wikipedia -
aber was ich hier an der Spitze zu sehen ist Diese Statuscode 200 im Gegensatz zu den
301, die ich bereits gesehen.
Und feststellen, dass es ein schönes hat freundliche OK daneben.
Also das ist wie der gute Status-Code.
>> Heißt das, dass 200 Nummer bekannt vor?
Ja, denn wenn ich simpler.js, Ich schrieb ein 200 dort.
Also das ist im Grunde sagen, sagen die Browser oder wer auch immer versucht, zu bekommen,
dies, dass sie erfolgreich waren.
Oder dass eine Art, wie wir waren zu erfolgreich.
>> Und es gibt diese Art der speziellen Syntax in Javascript für die Erklärung ein
Karte dieser Tasten wie Inhaltstyp und diese Werte wie Text-Ebene.
Also, wenn Sie bei der Antwort zu suchen, dass wir bekam von Wikipedia zurück, bevor, -
Ich werde versuchen, um zu blättern ein wenig schneller -
Sie diese Tasten wie Server und diese Werte Apache.
So haben Sie Schlüssel und Werte haben.
Und Sie können dies angeben Knoten, was zurück zu senden.
>> Also das ist eigentlich ganz, in einigen Weise, und in gewisser Weise ist es nicht
wirklich, aber es ist ein wenig niedriger Ebene als der PHP-Code, der Sie sein könnten
Schreiben für sieben P gesetzt, weil PHP und Apache Art kümmern sich einige
diese Dinge für Sie.
In PHP können Sie die Standardeinstellung überschreiben Verhalten, indem Sie Ihren eigenen Kopf.
Aber für die Zwecke dieses erhalten wir zu schreiben, unsere eigenen Header.
>> So hat diese Linie sinnvoll, alle, die Schreibkopfzeile?
OK.
Ehrfürchtig.
>> Also, was ich zu tun ist, ich am Ende die Antwort sagen hallo Welt.
OK.
Aber das ist nur eine Funktion Request-Handler genannt.
So, jetzt habe ich eigentlich zu tun Art von etwas mit dieser Funktion, oder?
>> So, hier, was ich zu tun ist, gibt es diese Linie, die var-Server Gleichen tut
HTTP.create Server, und dann habe ich Pass in den Request-Handler.
Also das ist eine Art der Knoten Weg zur Schaffung eines Servers.
Und feststellen, dass ich vorbei in der Request-Handler.
Also das sagt die createServer Funktion, die ich will, dass du mir einen machen
Server, und wenn das Server empfängt eine Antwort, ich brauche dich, dies zu rufen
Request-Handler-Funktion.
OK?
>> Damit Linie ziemlich endet sofort.
Also der var-Serverlinie richtig gemacht nachdem Sie, dass ziemlich viel zu tun.
Ich meine, es hat die Einrichtung einige interne Zustand zu wissen, dass Sie müssten
nennen das Request-Handler-Funktion, aber es geht nicht, dort zu sitzen und
Sagen hat den Benutzer gesendet mir ein Antrag noch?
Hat der Benutzer eine Anfrage schickte mich noch?
So ist es nicht zu blockieren.
OK?
>> Also, was tun, ist es im Grunde Jetzt speichert einen Zeiger zu diesem Code
Anfrage-Handler-Funktion, und dann wird, dass Code ausgeführt werden, wenn jemand
eine Anfrage.
Und dann tun wir server.listen.
>> Die 1337 ist ziemlich willkürlich.
Ich hatte keinen besonderen Grund für die Kommissionierung der Nummer ist.
Es war total zufällig.
Aber das nur gibt den Port.
So sind die meisten Web-Server werden Sie sehen, dass sie Port 80, denn das ist eine Art
wie von der Konvention.
Also, wenn ich so etwas wie, Ich weiß nicht, Wikipedia.org,
und ich legte Doppelpunkt 8 -
oh wow, die Sie nicht sehen können, dass.
Es tut mir leid.
Aber wenn ich Wikipedia -
Ich werde es hier schreiben nur so, dass es ist klar, an der Kamera.
Aber wenn ich dieses in einem Browser mit ein Doppelpunkt 80, der angibt, gehen Sie zu
Wikipedia.org am Port 80.
So ist es wie, wie die Vereinigten Staaten mehrere Anschlüsse wie, wo Sie versenden können
Dinge zu Art.
So ist es wie gehen Sie zu diesem besonderen legen auf diesem Server.
OK.
>> Also habe ich nur 1337 wählte.
Es gibt eine ganze Reihe von Zahlen dass Sie auswählen können.
Das war nicht ganz Besonderes.
>> Aber was ich jetzt tun ist werde ich Knoten laufen.
Lassen Sie mich tatsächlich geben, dass ein paar Zeilen nach unten, so dass man es sehen kann.
Ich werde Node tun, und ich bin werde simpler.js laufen.
Und wir erfahren, wie man sprechen Knoten in einem kleinen Bit gesetzt.
Aber jetzt ist es nur dem der Server läuft.
>> Also eine Sache, wir können versuchen, die möglicherweise nicht sein, dass wir können, spannend ist eigentlich
versuchen, es in Locken zugreifen.
So kann ich tun, Locken, und mein Maschine lokalen Host.
Sie sehen auch geschrieben wie dies manchmal.
Local Host 127.0.0.1 und sind so eine Art wie von Ihrem Computer zu Hause.
So ist es wie im Gespräch mit Ihrem eigenen Computer.
OK.
>> Und dann kann ich sagen, 1337.
Also, wenn ich dieses Codezeile sie sagt hallo Welt.
Und wenn ich wollte, dass die Sachen zu sehen, die hatte Inhaltstyp Text oder Klar
was auch immer, ich konnte sogar setzen dazu hier.
Und feststellen, dass es nicht sagen, OK.
Und ich habe Klartext.
Und dann gibt es diese Art von allen anderen Sachen, die Knoten werden in hinzufügen
für mich da.
Das ist nicht super wichtig.
>> Ich meine, es gibt eine Art von technischen Aspekte, die bei der Art sind
cool, darüber zu sprechen, aber nur um zu zeigen Sie, ich habe auch die Macht,
ändern Sie diese um.
So kann ich nur hinzufügen, ein Bündel von Sachen.
Und dann jetzt, wenn ich in meinem Ausgangs, wird es sein, dass.
Also diese Kopfzeilen bedeuten, bestimmte Dinge zu Browsern und solche Dinge.
>> Und Header kann grundsätzlich sagen, einen Browser wie man auf etwas reagiert.
Wenn Sie jemals von Cookies schon gehört, oder wenn Sie schon einmal geärgert haben
von einer Web-Seite Setzen von Cookies, oder Cookie-Block oder ausgeschaltet
so ähnlich.
Sie können tatsächlich eingestellt Cookies in diesen Header.
So erzählen sie, wie man einen Browser Verhalten in einigen Fällen.
OK.
>> Das war also simpler.js.
Hat jemand irgendwelche Fragen haben, an diesem Quellcode-Datei?
OK.
Kühl.
>> Lassen Sie uns also entfernen Sie das r aus, dass und schauen Sie sich simple.js.
Also das ist so ziemlich das gleiche Programm.
Ich habe es nur ein wenig anders denn ich wollte von Highlight zu sortieren
einige Features von JavaScript.
>> So fest, dass der Request-Handler Funktion völlig verschwunden.
Oh ja, haben Sie eine Frage haben?
>> ZIELGRUPPE: Ja, die Argumente die zu übergeben werden
Funktion, was sind sie?
>> KEVIN SCHMID: Das sind also JavaScript-Objekte.
In der Dokumentation Node.js, es im Grunde sagt, welche Methoden
auf ihnen zur Verfügung.
Wir haben gerade zufällig den Zugang zu diese Methode aufgerufen Schreibkopf und am Ende
und solche Sachen.
Aber es gibt eine ganze Reihe weitere Methoden.
>> Und zum Beispiel, wie eine von ihnen insbesondere auf rec, die Sie tun können
so etwas wie die rec.method wird Ihnen sagen, ob es ein HTTP-GET-oder
HTTP-Post-Anfragen und Sachen.
So gibt es alle Arten von verschiedenen Eigenschaften, aber sie sind beide
JavaScript-Objekte, und sie haben nur Funktionen mit ihnen verbunden, dass Sie
Dinge zu schreiben.
OK?
>> So bemerken, dass die Request-Handler ist völlig verschwunden.
Aber der Code, den ich in Anfrage hatte Handler ist immer noch da.
Ich habe immer noch dieses res.writeHead und ich habe immer noch dieses res.end.
Und was das ist ein Beispiel für in JavaScript ist diese Idee einer
anonyme Funktion.
und anonym ist wie ein passender Name für sie, weil sie buchstäblich nicht
haben einen Namen.
Es gibt keine Funktionsanforderung Handler drin.
>> Hat keinen Namen, aber es immer noch ist ein Argument nehmen.
So habe ich immer noch rec und res.
Und ich habe immer noch den Code.
Das ist völlig in Ordnung JavaScript-Code.
So kann ich eine Funktion, ohne zu erklären ausdrücklich die ihm einen Namen.
Es ist zunächst etwas verwirrend.
Es gibt einige Dinge, wie nützlich dass Sie tun können, mit
diese anonyme Funktionen.
Hat jemand irgendwelche Fragen hierzu haben, oder ist es OK, nur um, denn jetzt,
Art einfach akzeptieren, dass es wird das gleiche tun?
Yep?
>> ZIELGRUPPE: Sind Funktionen zuerst Klasse in JavaScript?
>> KEVIN SCHMID: Sie sind erste Klasse in JavaScript.
Und wissen, dass diese Konzepte Bestehen in einer anonymen Funktion wie
an die JavaScript-dies zutrifft, die Sie kann in Ihrem letzten Projekt schreiben
der Web-Browser zu.
So zum Beispiel, in der JavaScript-in Ihrem Browser, es ist auch etwas Veranstaltung
in dem Sinne, dass das, was Sie angetrieben werde haben, ist, wenn der Benutzer dies klickt
Taste, möchte ich Sie, diesen Code ausführen.
>> So ist es die gleiche Art von Ideen des Client-Seite, wenn ein Mausklick oder sie
Maus über einem gewissen Bild auf Ihrem Web-Seite, führen Sie diesen Code.
Das kann zu Server anwenden.
Also das ist eine Art, wie die spannende Grund, warum JavaScript ist eine wirklich
geeignet oder einige Leute denken, es ist ein geeignete Sprache für diese Art von
Veranstaltung Treiber-Server, weil Sie diese anonyme Funktionen.
Sie haben die ganze Idee der diese asynchronen Code.
OK.
Wer irgendwelche Fragen?
>> OK.
Das war also simple.js.
Also schauen wir uns an einem mehr oder ein paar mehr.
Also das ist sleep.js.
So ist jeder vertraut die C-Funktion Schlaf?
Von vielleicht einer der früheren Vorlesungen oder so etwas?
>> Also im Grunde kann man geben Ich denke, eine Anzahl der Sekunden, oder wenn Sie mit U sind
Schlaf eine Reihe von Millisekunden oder Nanosekunden.
Und im Grunde wird das Programm einfach aufhören Lauf für diesen Zeitraum.
Right?
Und dann wird es irgendwann aufwachen und dann wird es nur weiter laufen
das Programm.
>> Also diese Art von Server gibt der Eindruck des Schlafens.
So bemerken, dass wir die gleiche res.writeHead 200 mit dem Header
vor, aber dann sind wir Aufruf dieser Funktion aufgerufen Satz-Timeout.
Timeout-ist auch in Ihren Web-Browser Google Chrome
oder Safari oder was auch immer.
Und im Grunde, was es hier zu tun wird es nimmt in einer Funktion.
Unsere, wieder ist es ein anonyme Funktion.
Also das ist irgendwie cool, weil wir mit einer anonymen Funktion innerhalb einer
anonyme Funktion die kann ein wenig seltsam.
>> Aber es nimmt diese Funktion, das ist, im Grunde sagen - und die Art und Weise dieser
Arbeiten ist in 5000 Millisekunden, ich will Sie, dass die Funktion ausführen
nur endet die Antwort und schreibt hey.
Also das macht den Eindruck, wie schlafen, aber die Art, das eigentlich
funktioniert, ist, wir werden durchlaufen diese Linie sehr schnell.
Wir stehen noch etwas zu schreiben.
Und dann werden wir auch durchlaufen diese Linie sehr schnell.
So sind wir nicht eigentlich los bis fünf Sekunden warten.
Wir sind gerade dabei, laufen dieser Code sofort.
>> Und dann gibt es wieder diese kleine Ereignisschleife, das nun dieses Ding
Register, die im Grunde nur ständig gehen im Kreis herum
und schaut auf die Uhr in einem einzigen Gewinde und das Sagen hat 5 Sekunden
noch nicht bestanden?
Und dann, wenn sie sieht, dass die zweite Hand hat, wie fünf Sekunden oder bewegt
was auch immer, dann wacht er auf und sagt: oh, was muss ich tun?
Oh ich muss diesen Code ausführen.
Und dann, es wird laufen res.end hey.
>> Also noch einmal, wir warten hier noch nie.
So ist es nicht, dass dieser Code in der Diese Funktion wird auf fünf nehmen
Sekunden zu laufen.
Dieser Code wird ziemlich viel laufen sofort, zumindest relativ zu
die fünf Sekunden, die wir sprachen über früher vor.
>> Also, nur um dies in Aktion zu zeigen, Ich kann Node.sleep.js tun.
Und ich habe etwas durcheinander?
Möglicherweise.
Entschuldigung.
Mal sehen, was wir tun können, um dies zu beheben.
OK.
Also auf jeden Fall nutzen Node.js.
Ich bin nur ein Scherz.
OK.
Nur eine Sekunde.
OK.
Ich weiß, was es ist.
>> Also das Problem ist, dass in meinem anderen Registerkarte hier wurde ich laufen bereits auf Node
dass dieselbe Adresse, 1337.
So ist die Fehlermeldung, dass dies warf, wenn wir uns bei es wirklich eng, ist die Adresse in
verwenden, EADDRINUSE.
So war ich bereits 1337 hier.
Also, wenn ich herunter dieses weg, und dann habe ich jetzt versuchen, dies zu laufen, hoffentlich alles
wird gut.
OK.
So kann man nur eines haben Art hören auf einem Port auf einmal.
Eine andere Lösung wäre für mich gewesen nur bearbeiten, dass Programm und machen
es ist wie 1338 oder so so.
>> Aber jetzt schlafen läuft.
Lassen Sie uns also tatsächlich versuchen Sie es in die Browser diese Zeit, weil es ein
wenig aufregend zu sehen, in einem Terminal.
Also ich werde einfach zu gehen, dass 127-Adresse wieder 1337.
Und wenn Sie es sehen können -
Ich weiß nicht, wenn du kannst - aber mein Browser, die ein sehr, sehr lange
Zeit, oder wie 5 Sekunden laden.
>> Und dann nach, dass es endlich endete die Antwort.
Und Sie können nicht sehen, weil die Sache wird über einen kleinen umgezogen, aber wenn ich
dies ein wenig kleiner, Sie kann sehen, es sagt, hey.
Also habe ich die hey, aber nach fünf Sekunden.
Und es könnte ein wenig sauberer sein zu sehen, hier auf dem Terminal, also bin ich
gehen, um eine zu tun -
wir hier tun -
wir Locken dieser Adresse tun wieder mit dem 1337.
Und ich nur eine Art zu sitzen hier für fünf Sekunden.
Aber beachten Sie, dass der Server kann neue Antworten zu akzeptieren.
So druckt er hey.
>> Und um diese Demo, im Grunde, was Ich habe in diesem anderen Reiter zu tun -
so sagen wir ich das in einem anderen Register, Ich werde Locken und das gleiche zu tun
Sache wieder.
Und ich werde versuchen, diese zu kicken Jungs an der gleichen Zeit.
Also werde ich, dies zu tun, und ich bin gehen hier zu Rennen und ich bin
werde es wieder tun.
>> Und wir machen es so, dass Sie kann sowohl von ihnen zu sehen.
Dass man gedruckt hey, und dass ein gedruckt hey ganz am -
lassen Sie uns dieses Experiment wieder.
Eigentlich verwenden wir diese Trick, wenn es das ist OK.
>> Also ich werde eine Sache verwenden, die Schale erlaubt es mir, im Grunde laufen zwei Kopien
dieses Programms parallel.
Also, es wird das erste Programm ausführen und das zweite Programm parallel.
So jetzt, wenn ich drücken Sie die Eingabetaste, es geht auf Anfrage, dass ziemlich viel machen
augenblicklich gleichzeitig.
So geben wir diese ein Schuss.
>> So, jetzt heißt es bemerken zwei Prozesse.
Und wenn Sie neugierig sind, dass 27.000 Anzahl ist im Grunde die Prozess-ID.
Und dann bemerken, die sie gedruckt hey in der gleichen Zeit.
Es war nicht so, wir mussten warten fünf s für eine und danach
5 Sekunden später bekommen die zweite.
Also das ist eine Art, in gewisser Weise ist es Hinweise, nicht wirklich, aber es ist
intuitive Beweise dafür, dass es nicht nur wie fünf Sekunden warten und Sperr
der gesamte Faden.
OK cool.
>> Also fragte Aaron eine Frage zuvor, dass war, na was ist, wenn wir etwas tun -
Yep?
>> ZIELGRUPPE: Warten.
Wie ist das anders printf Puffer, wenn?
Ist es nicht automatisch das tun?
Warum müssen wir darüber Sorgen machen?
>> KEVIN SCHMID: Oh, könnten Sie sagen, dass man mehr Zeit?
>> ZIELGRUPPE: Mag nicht printf Puffer tun, die genau die gleiche Sache?
>> KEVIN SCHMID: Die printf Puffer?
>> ZIELGRUPPE: Ja.
OK.
War das nicht in einem der Tests waren sie reden, wie wenn Sie mit der rechten printf
etwas, und dann haben sie eine Pause Sekunden, und dann können Sie es Schleife zehn haben
mal, es wird 10 Sekunden warten und dann alles zusammen printf?
>> KEVIN SCHMID: Oh, OK.
>> ZIELGRUPPE: Ist es das Gleiche Sache, dann in diesem Fall?
>> KEVIN SCHMID: Also war die Frage, grundsätzlich in einer der ehemaligen Quiz
oder so etwas, es war eine Frage, die im Grunde, wenn Sie die Druck f 10 sagen
Dinge, zu einer Zeit, und dann schlief wie in der Prozess der Druck denjenigen,
am Ende aus irgendeinem Grund wäre es nur Dump die alle auf dem Bildschirm.
Also gibt es zwei verschiedene Arten von Konzepte hier.
>> Also ich denke, eine Sache ist, dass in diese Fall haben wir es mit zwei unterschiedlichen Umgang
Art von Menschen fragen die Server für Dinge zur gleichen Zeit.
Und der Grund, dass die Art von printf wartet, wie das und gibt sie alle aus
auf einmal ist im Zusammenhang mit wie printf Art -
so der Weg ist eigentlich printf implementiert ist es grundsätzlich
sprechen Sie mit dem Betriebssystem zu schreiben das Zeug an die Konsole.
So ist es nicht wollen, um all das zu tun Sachen sofort, wenn Sie sagen, printf
eine Schnur, denn das könnte teuer werden, wenn es um
tun, dass jedes Mal.
>> Also, wenn Sie das tun printf hey, Ihr Programm eigentlich nicht so gedruckt, dass
sofort an die Konsole.
Es könnte sagen, OK, ich schrieb es.
Und dann Art warten auf Sie zu geben es ein wenig mehr, bevor sie tatsächlich
schreibe es auf der Konsole.
>> Also der Grund, dass das der Fall war -
und es ist nicht verwandten Art in den Schlaf -
ist, dass der Schlaf war irgendwie nur dort injiziert, um zu zeigen das
Tatsache, dass es nicht zu schreiben es synchron.
Aber der Grund dafür ist einfach Leistung, so dass Sie nicht haben,
machen, dass viele Kontakte zu das Betriebssystem.
>> Aber hier, was wir wirklich versuchen, zu tun mit dieser Schlaf Sache ist nur Show
dass, wenn wir zwei Menschen besuchen Diese Website, es wird nicht zu setzen
sie in einer Linie, wo es geht zu sagen, Ich muss Ihnen zu helfen, und dann, wenn ich
Ihnen hilft, nachdem diese völlig fertig fünf Sekunden und ich werde
gehen Sie zum nächsten Person.
So Anfrage der ersten Person nicht binden, dass die Ereignisschleife
wenn das Sinn macht.
>> Aber hier ist tatsächlich ein Beispiel von etwas, das binden wird
bis der Ereignisschleife.
Also hier ist eine schreckliche Funktion berechnen die n-te Fibonacci.
Es ist buchstäblich die schlechtere Weise können Sie berechnen die n-te Fibonacci-Zahl.
Und das ist eigentlich nur, um zu bestätigen, wenn dies aus,
es gibt tatsächlich -
Ich meine, können Sie versuchen zu gehen finden - aber es ist wie ein sehr langwieriger Blog
schreiben, dass jemand geschrieben hat.
Es ist wie eine jener Reddit Dinge.
Aber jemand kritisiert Node.js und sie verwendet diese als Beispiel.
Also habe ich wollte nur zeigen Ihnen zwei verschiedenen Perspektiven, nur um
ein allgemeines Verständnis der Begriffe hinter diesen beiden Dingen.
>> Dies ist aber nur als eine schreckliche gewählt, schrecklich ineffizient rechen
intensiven Weg, um das zu berechnen n-te Fibonacci-Zahl.
Also nur so nebenbei, warum ist es ist schrecklich, wie in einer Art und Weise?
Yep?
>> ZIELGRUPPE: Sagen Sie beginnen mit 1.000.
1000 teilt sich in 999 und 998.
Jeder der diese teilt sich in zwei Dingen.
>> KEVIN SCHMID: Richtig.
>> ZIELGRUPPE: Alle nach unten.
>> KEVIN SCHMID: Genau.
Also nur für die Kamera zu wiederholen, wenn ich rufen fib auf wie 1000 oder etwas
so ist es natürlich nicht weniger als oder gleich eins ist, so werde ich
gehen Sie zu diesem Fall anders, und dann werde ich zu rufen fib 999 sowie 998 fib.
Und dann so ziemlich alle, dass Arbeit, die 999 macht fib ist
Art auf diesem Niveau.
Wenn Sie unten gehen, ist es noch mehr redundante als das, aber wenn Sie nur
denken Berechnung fib 998 bekommt uns ziemlich nah an 999 fib.
Also sollten wir wirklich ein wenig mehr sein klug, wie wir irgendwie wiederverwenden
diese, aber wir werden nicht wiederverwenden diese Sachen überhaupt.
So können Sie sich vorstellen, dieses gigantische, riesigen Baum, der einfach nur schrecklich ist.
>> Aber trotzdem, OK.
Das war also fib.
Es dauert nur eine Weile zu laufen.
Yep?
>> ZIELGRUPPE: [unverständlich].
>> KEVIN SCHMID: Oh, könnten Sie die Frage wiederholen?
>> ZIELGRUPPE: [unverständlich].
>> KEVIN SCHMID: Ach so ist dies nur Code das wird sich auf die Art sein
Server-Seite.
Also das ist nicht zu finden im Browser oder nichts.
Es ist im Grunde das, was wir haben, ist, dass, wenn der Benutzer hier ziemlich viel macht
ihren Antrag wieder, wenn wir eine Art eine Anfrage, wir gehen zu rufen
diese Funktion auf der Server-Seite.
Und dann werden wir das Ergebnis zurück Aufruf von dieser Funktion.
Und dann haben wir einfach ausdrucken werde es dem Benutzer.
So kann der Anwender nicht wirklich umgehen mit dieser Funktion zu viel.
>> War das die Frage?
Heißt das Sinn?
OK.
Kühl.
>> Also noch einmal, wir machen diese ganze res.writeHead Sache, wo wir drucken
der Kopfzeile.
Und dann habe ich am Ende die Antwort, indem Sie die magische Zahl 45 ist fib.
Also lasst uns diesen Server laufen gerade.
So werde ich zu einem Knoten fib.js. tun
So, jetzt meine fib Server läuft.
>> Und dann hier, ich werde , eins von diesen zu tun.
OK?
Also ich werde einfach sagen, Locke.
Also, es wird eine Weile dauern, aber hoffentlich wird es bald zu beenden und
es wird darauf hin, dass der 45. ausdrucken Fibonacci-Zahl.
>> ZIELGRUPPE: [unverständlich].
>> KEVIN SCHMID: Es sollte ziemlich bald zu erledigen.
So sollte es fünf vor sechs Sekunden dauern.
Ich weiß nicht, das ist nur V8 wird super schnell, aber in jedem Fall ist dies ein
sehr kurze Beispiel und absichtlich unelegant einer nicht-trivialen
Berechnung.
So nach einer Weile, erhält es diese.
>> Aber jetzt, was ist, wenn ich das gleiche Art von Experiment vor, wo ich
zwei Anträge zur gleichen Zeit?
So, hier bin ich zu einer Locke los die Adresse, und ich werde
eine andere Locken zu tun.
Und denken Sie daran, wenn wir tat dies für die Schlaf-Server, als wir es im Grunde
nach fünf Sekunden, sie sind ziemlich viel kamen beide hinten rechts
Etwa zur gleichen Zeit.
So war es nicht besonders gefesselt.
>> Aber versuchen wir es jetzt.
OK, so haben wir unsere beiden Prozessen.
Denken Sie daran, das sind die Prozess-IDs.
Das wird ein wenig unbeholfen, während wir abgewürgt.
Also lassen Sie uns einfach hier bleiben und warten.
>> Also einer von ihnen zu kommen, sollte zurück nach wie -
OK, so kam zurück.
Aber warum dann nicht die zweite man nur noch zurückkommen?
Yep?
>> ZIELGRUPPE: Der Server kann nichts tun während es die Berechnung, dass große Nummer.
>> KEVIN SCHMID: Richtig.
Also die Antwort war nur, dass der Server wirklich nichts zu tun, während
es ist die Berechnung, dass die Fibonacci-Zahl.
So jetzt habe ich gerade meine zwei Dinge zurück.
Aber ich denke, nur über den Code denken ein wenig mehr, wie es funktioniert
und alles.
>> Also diese Funktion hier ist der Code, Ich habe diesen Server sagte zu laufen, wenn es
erhält eine neue eingehende Anfrage.
So ist es nur geht, um durch diese laufen gesamte Code, und es wird gehen
auf die Ereignisschleife zurück und dann weiter Überprüfung auf neue Ereignisse.
Also im Grunde das, was wir haben, passiert ist der Server
Hören für neue Dinge.
Die erste Person, fragt nach, was 45 ist.
Wir führen diesen Code, um es zu berechnen.
Dieser Code dauert etwa fünf bis sechs Sekunden zu laufen.
Dann gehen wir zurück in die Ereignisschleife und überprüfen Sie für neue Anforderungen.
>> Also das ist ein Beispiel, wie, wenn Sie haben Dinge, die so genannte Rechen sind
gebunden ist, oder verwenden Sie eine Menge Rechen, nicht die Macht, aber wie sind
rechenintensive -
Ich denke, eine Sache, darüber zu sagen ist dass diese Funktion vollständig zu tun,
zum größten Teil, recht nützliche Arbeit Recht.
Die ganze Zeit, dass die Rückruf Funktion ausgeführt wurde, es war ziemlich
viel die meiste Zeit die Ausgaben nur Computing, die n-te Fibonacci-Zahl.
>> Aber wir hatten nur ein Thread zu behandeln.
In der Apache-Modell, wenn zwei Menschen den Antrag zu bekommen fib 45, wir
würden zwei verschiedene Themen haben.
Und dann Aufgabe des Betriebssystems gewesen wäre, oder der Benutzer-Ebene
Code, der die Fäden verwaltet, haben würde gewesen, dass die Scheibe auf die
CPU, oder auch wenn Sie mehrere CPUs hatte, verteilen sie über den CPUs
so, dass sie beide waren Finish etwa zur gleichen Zeit.
>> Also nur um zu zeigen, wie wir von sortieren - und dies ist nicht eine perfekte Gesamt
Lösung, aber eine Art, wie wir können, machen einen wieder hierher kommen und tun,
ein bisschen besser.
Also, was ich hier habe, ist ein Programm namens Fib C. Und das im Grunde verwendet
ein weiterer von Node-Module genannt Das Kind Vorgehensbaustein.
Also habe ich aufgenommen, dass an der Spitze Art der wie ich ein Pfund zu tun sind
Kind process.h oder so etwas.
Jetzt habe ich Zugang zu diesem CP variable die hat alle meine Funktionalität.
>> So, jetzt, was ich in dieser Antwort tun Handler ist Ich bin mit diesem Programm
Slash Dot fib 45.
Also, was ich getan habe - und ich werde einfach aus diesem Programm für einen Schritt
wenig -
wird Ich habe ein C-Programm geschrieben, dass Grundsätzlich berechnet der
n-te Fibonacci-Zahl.
So, hier ist nur ein Programm, das ich geschrieben habe in C, die dies berechnet.
Ich kann es zu kompilieren, und ich laufen kann es in der Befehlszeile.
Und es wird zur Berechnung der 45. Fibonacci-Zahl.
>> So merkt es dauert nur ziemlich viel, wie lange.
Ich könnte wahrscheinlich Strich 03 verwendet haben optimieren oder so etwas,
aber ich tat wie normale Compilereinstellungen.
Und er druckt es aus.
>> Aber jetzt, was soll ich tun Art?
Oh sorry, falsche Datei.
Also habe ich die gleichen Sachen zu tun der Header wie zuvor.
Dann mache ich dieses cp.exec.
Also, was ist zu tun ist, es ist gehen, um dieses Programm auszuführen.
Aber das funktioniert so, dass es wird nicht zu warten
das Programm zu beenden.
Er sagt im Grunde nur dieses Programm ausführen.
Also im Grunde geben diese in die Eingabeaufforderung Art.
>> Und dann, wenn Sie mit getan es, führen Sie diese Funktion.
So, jetzt haben wir eine Art, an diese ganze Sache wieder von
wie wir nicht warten.
Hat diese Art von Sinn?
Yep?
>> ZIELGRUPPE: [unverständlich]?
>> KEVIN SCHMID: Also das wird tatsächlich öffnen, ein neues Verfahren zu tun.
Also das ist eigentlich, in gewisser Weise, Böse, Böse nicht super, aber es ist
wichtig zu sagen, dass diese Art von geht zurück auf, auf der einen Seite, die Apache
Modell, wo wir tun Threads und Prozesse für jede Anforderung oder
Prozesse für jede Anforderung.
Also das ist eine Art, analog zu dem, was Apache tut.
In einigen Fällen wird es nur mit einem neuen Gewinde, die ein wenig mehr Licht
Gewicht als ein Prozess, aber Apache konnte Gabelung am Ende einen neuen Prozess
welche Art von dem, was wir hier tun, ist implizit, indem Sie Punkt Strich fib 45.
>> Und dann in diesem Fall, wir Art entstehen die gleichen Kosten von Prozessen.
Also das ist nur eine Sache, die Sie tun können.
Aber gerade diese Art von Lauf zeigen.
Und diese Diskussion ist einfach richtig angestrebt präsentiert diese Art von Programmen als
Weg, um verschiedene Perspektiven zu zeigen wie sie Server so zu entwerfen.
Also das läuft, und dann, wenn ich jetzt tun diese wieder, bekam ich zwei Prozess-IDs.
>> Lassen Sie uns einfach darüber zu sprechen Dinge, darauf hinzuweisen.
So fest, dass sie schrittweise.
Das ist cool.
Denn es war vor 27.122.
Aber jetzt Ankündigung, kamen sie zurück ungefähr zur gleichen Zeit.
>> Und jetzt, eine gute Frage, über fragen warum war das der Fall ist, deren Aufgabe
war es nun, diese Dinge irgendwie machen Art fair mit jedem
anderen, diese beiden Instanzen dot Strich fib 45, die ich lief
oder die Node ran?
Wer irgendwie macht es fair, dass sie beide bekommen Art von Laufzeit ausgeglichen?
>> ZIELGRUPPE: [unverständlich].
>> KEVIN SCHMID: Ja.
Also im Grunde, wenn ich Punkt Strich fib 45 oder so, jetzt ist es
Art bis zum Betriebssystem Griff der Laufzeit dieser Programme.
Und jetzt kann es ihnen planen auf verschiedenen CPUs oder es
können sie planen.
Es kann, dass man in Scheiben schneiden die Zeit CPU bekommt oder dass sie es bekommen
auf einer CPU laufen.
Also das ist die Idee dahinter.
Heißt das Sinn machen, alle?
So, jetzt Node ist nicht wirklich spielen eine Teil bei der Aufteilung dieser Aufgaben.
OK.
>> Also das ist es fast für Beispiele.
Ich wollte nur noch eins zeigen weil eine Menge von dieser war bisher
nicht total super praktisch in einigen Fällen.
Ich kann mir vorstellen, nachdem diese nach Hause zu kommen zu sprechen und etwas zu sagen, und wie,
auch ich irgendwie bekam aus diesem Gespräch, das Ich kann eine Fibonacci-Server für machen
mein letztes Projekt.
Also hier ist einfach irgendwie noch ein Beispiel die hoffentlich sein -
vielleicht auch nicht, aber vielleicht - ein wenig mehr Art relevant für Abschlussarbeiten und
Vorausdenken für solche Dinge.
>> Also das ist chat.js.
Also das ist eine Art einige Beispiel mag Server-seitigen Code, den Sie verwenden könnten
sich mit einem kleinen Chat-Server wie Sie können auf die gesehen haben
Facebook Chat oder was auch immer.
Also ich sage nicht, das ist wie Facebook Chat, aber das ist eine Art
wie eine gute - vielleicht nicht gut, aber vielleicht gut - Ausgangspunkt für ein Gespräch
Server für Ihre Website für eine endgültige Projekt.
Also schauen wir uns an, was es tut.
>> Also sind wir immer diese besondere Sache an der Spitze, hat diese VaR SIO
gleich Socket.IO erfordern.
Also das ist eine andere Sache, es funktioniert nicht tatsächlich kommen mit gebündelten
Knoten, aber Sie können es zu installieren.
Es ist ein Node-Modul.
So ist es nur, wie einige Erweiterung Knoten.
>> SocketIO ist eigentlich wirklich irgendwie cool.
Es ist eine Abstraktion, die im Grunde, was es tut, ist es erlaubt Ihnen,
haben diesen Strom der Kommunikation zwischen einem Web
Browser und Web-Server.
Also zum größten Teil so weit, wir hatten diese sehr schnell eine Sekunde oder zwei
zweite Kommunikation zwischen einem Web Browser und Web-Server.
Also ist es im Grunde zu google.com, get gehen das Zeug, schicken Sie es zurück und dann
wir fertig sind.
Wir werden nie wieder zu sprechen, bis die Benutzertypen in etwas anderes.
>> Aber was Socket.IO und ähnliche Art von Dinge - und ist eigentlich ein SocketIO
der Dinge, die auf so gebaut wird WebSocket das ist eine Art der verfügbaren
als Teil der HTML5 -
, mit dem Sie dies Fortsetzung des Dialogs.
Und das ist sehr nützlich in einem Chat-Server Art der Sache, denn es ist
wie eine Art von Fortsetzung des Dialogs in einige Möglichkeiten, denn wenn Sie chatten
mit jemandem, können Sie jetzt einfach senden Nachricht auf der Leitung, und dann die
Server kann eine Nachricht senden die unten Rohr auf die andere Person, die Sie sind
Chat mit.
Und dann können Sie dies haben Austausch so.
>> Also das ist irgendwie was SocketIO gut ist.
Der Grund, dass SocketIO verwendet WebSockets wie eine Sache ist, dass in
Neben einfach nur alte WebSockets, es tut auch ein paar Tricks, um im Grunde
machen es Browser kompatibel.
So Browsern wie Internet Explorer leider nicht WebSockets unterstützen
direkt aus der Box.
So verwendet sie eine andere Art von kühlen ordentlich Dinge mit Adobe Flash, damit
Sie Cross-Browser-Unterstützung haben.
Also das ist wirklich nützlich.
>> Und tatsächlich, ich weiß, ich bin eine Art die auf Zeit hier, aber CS50
Besprechen Sie, haben Sie jemals etwas gesehen wie, weiß ich nicht, so und so ist leer
Antworten zu diesem Beitrag oder etwas so, dass die Funktion?
Das ist SocketIO.
Also, wenn jemand beginnt der Eingabe in die diskutieren Feld, um eine Antwort zu machen oder
etwas, was nicht Ihrem Browser in SocketIO genannt strahlt eine Art von
Fall, dass jemand sagt, ist Antworten zu diesem Beitrag.
>> Dann sagt der Server, OK, was muss ich tun?
Nun, jetzt habe ich die anderen Jungs sagen die auf CS50 sind Diskutieren suchen
auf diesem Posten ist, dass jemand antwortete.
Also das ist irgendwie was ist SocketIO gut für die, diese Art von Weiterbildung
Strom des Dialogs.
OK.
>> Also, was ich hier habe - und wir gerade sind gehen, um die Verbindungen Array ignorieren
für ein wenig -
was ich tue, ist, dass ich eine andere zu hören.
Also das ist nur die Art und Weise ist Socket.IO sagen wir auf diesem Port zu hören.
Und dann werde ich dies tun auf der Verbindung.
Also das ist im Grunde nur die Socket-IO- Art zu sagen, wenn wir erhalten eine
Verbindung, ich will dich um diesen Code ausführen.
>> Und feststellen, dass anstatt rec res und dort übergeben habe ich Sockel.
Und dieser Sockel Idee ist im Grunde diese Sache, die Sie schreiben und lesen
aus, dass den Benutzer- Nachrichten möglich.
Und die Nachrichten, die Sie senden möchten kann durch diesen Sockel zu gehen.
Heißt das Sinn?
So ist es der anhaltende Sache.
>> Also, was ich zu tun ist, ich nenne Socket.emit.
Und emittieren dauert ziemlich viel zwei Argumente.
Das erste Argument ist ein String nur der den Typ des
was Sie emittierenden sind.
Also für diesen Fall habe ich den Einsatz Diese Saite neuen Nachricht.
Und das ist im Grunde nur sagen, dass der Typ dieses Ding, was ich bin
Senden, eine neue Nachricht.
So können Sie für bestimmte Arten hören kann wie neue Nachricht oder was auch immer
mithilfe Punkt auf.
>> Also schickte Anschluss-und Benutzer es, wenn Sie schauen, wo wir auf Punkt nennen,
das sind die anderen Saiten, die darstellen, Arten von Benutzernachrichten.
So ist es im Grunde kann man diese abstrahlen eine dieser Nachrichtentypen und
dann etwas zu tun, als Reaktion auf eine dieser Nachrichtentypen
>> Also ich bin emittierende diese neue Nachricht.
Wir werden connections.push ignorieren für eine Sekunde.
Aber dann sage ich, Socket.on Benutzer gesendet werden.
So, jetzt ist es irgendwie gerne, wenn die Benutzer sendet mir eine Nachricht, ich will
Sie diesen Code ausführen.
Und feststellen, dass die anonyme Funktion nimmt in dieser Variablen
Daten, die genannt wird, im Grunde geht die Botschaft des Benutzers haben.
>> So, jetzt lassen die Art der Diskussion über die Verbindungen Array.
Also das ist für einen Chat-Client entwickelt, wo im Grunde jeder ist irgendwie in
das gleiche Chat-Raum.
Also im Grunde das, was wir brauchen, um um einige Array, das im Grunde
stellt alle Leute im Chat in einige Möglichkeiten, wenn das Sinn macht.
Right?
Da müssen wir, die diese Jungs wissen, so können wir ihnen die Nachrichten zu senden
dass andere Menschen an uns senden.
>> Also, was dieser Code tut, ist, wenn der Benutzer sendet eine Nachricht - das ist die Art von
die Veranstaltung -
wir werden diesen Code ausführen.
Und was wir tun, ist, dass wir durch diese laufen Array, das haben wir Verbindungen genannt.
Und so ziemlich für jede Verbindung außer der, die unsere ist, das ist
was dieser Code sagt, senden wir ein neues Nachricht mit dem angefügten Nachricht
Informationen.
>> Also, wenn Sie hier bemerken, was ich tat, als der Benutzer tatsächlich macht eine neue
Verbindung, die ich mit der Mehr JavaScript.push Verfahren ist dies
im Grunde nur sagen, wie hinzufügen Sockel, dass als Wert in
unsere Verbindungen Array.
So, jetzt, wenn dieser Code ausgeführt wird, wird es Dinge schicken, um diesen besonderen
Verbindungen.
So kann dies ein guter Ausgangspunkt sein für die Herstellung einer Chat-Server
oder etwas ähnliches.
>> Und das irgendwie cool ist, dass die Code, den Sie hier sehen, wie für ein-und
emittieren und so was ist der gleiche Art von JavaScript-Code, die Sie
schreiben im Browser zu interagieren mit dem Server.
Also, warum ist eine Art SocketIO ordentlich und sinnvoll auf diese Weise.
>> Oh, und nur noch eine Sache ganz schnell.
Es war ein Abschlussprojekt CS50 letzten Jahr dass im Grunde ein Chat implementiert
Server in Node.js.
Ich denke, es ist Harvardchats.org aber ich bin nicht -
OK.
Ich bin mir nicht sicher, was die URL, aber Das kann ich aus später zu senden.
Aber es ist irgendwie cool, was Sie Node.js. tun können
>> So hoffe ich, in der Regel haben euch ein guten Sinn für das, was ist sinnvoll, Node.js
und wie könnte man vielleicht anwenden um Ihre endgültige Projekt.
Ich werde aussenden etwas mehr Mittel zusammen mit diesem.
Und ich danke Ihnen für Ihr Kommen.
Danke.
>> [Applaus]