>> Εντάξει.
Έτσι, η δραματική στιγμή ήταν, τι είναι Node.js όπως το γνωρίζουμε σήμερα;
Τίποτα; Ναι;
>> Ήταν σαν ένα πλαίσιο γραπτώς JavaScript
εφαρμογές σε γενικές γραμμές -
>> ΕΝΤΑΞΕΙ, το οποίο λειτουργεί.
>> - Το ξέρω, όπως κοινές χρήσεις όπως -
ή κάτι που μπορούμε να κάνουμε είναι σαν -
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
>> OK καλό.
Ναι, έτσι είναι ένα πλαίσιο.
Είναι μια μηχανή με την οποία μπορείτε μπορεί να εκτελέσει κώδικα JavaScript
τοποθεσία του διακομιστή.
Αυτό μπορεί να σημαίνει η απλούστερο των πραγμάτων
όπως γράφει μια γραμμή εντολών σενάριο δεν σε Python ή Bash
ή Ruby και PHP, αλλά μόνο στην ίδια JavaScript
και την εκτέλεση του έργου σε ένα αναβοσβήνει γραμμή εντολών.
Ή μπορείτε να εκτελέσετε πραγματικά εντός ενός web server.
Και στην πραγματικότητα, μέσα Node.js ίδια,
αυτό το πλαίσιο είναι ένα σωρό των βιβλιοθηκών μεταξύ των οποίων είναι
στον εξυπηρετητή HTTP ενσωματωμένο.
Έτσι, μπορείτε πραγματικά να γράψετε ένα διακομιστή, όπως θα δούμε
ακριβώς σε μια στιγμή, super εύκολα με ακριβώς την κατανόηση ένα κομμάτι
του HTTP και TCP και τα λιμάνια.
Και μπορείτε να γεννούν μια ακρόαση web server Apache, χωρίς,
χωρίς IIS της Microsoft.
Χωρίς καμία άλλη εγκατεστημένο λογισμικό,
μπορείτε να αναπαράγονται μόνο αυτό και να ακούσετε περισσότερα οποιαδήποτε θύρα
σχετικά με το σύστημα που σας επιτρέπεται να.
Έτσι υπόθεση και σημεία, επιτρέψτε μου να πάω και να ανοίξει
μέχρι αυτό το παράδειγμα, ο διακομιστής-0.js.
Έτσι, παρατηρούμε ότι η κορυφή του αυτό το αρχείο, ένα μάτσο
αδιάφορων σχόλια, και στη συνέχεια υπάρχει ένα ζευγάρι
αντιπροσωπευτικών γραμμές κώδικα ότι θα δούμε recurringly.
Έτσι, var HTTP παίρνει απαιτούν "HTTP".
Έτσι, ενσωματωμένη σε Node.js » υποδομής είναι ένα σωρό
στοιχείων, τα οποία είναι πραγματικά ακριβώς βιβλιοθήκες και τα πάντα είναι είδος
του χώρου του ονόματος με το μοναδικό αναγνωριστικό
όπως αυτό είναι "HTTP".
Έτσι ώστε, όπως σε πολλά γλώσσες όπως η Java και C + +
και C, μόνο όταν εισάγουν ή να συμπεριλάβετε
ή στον κόμβο μιλούν απαιτούν μια μονάδα κάνει κομμάτια της.
Και όλη η μνήμη απαιτεί να πάρετε φορτωθεί
στη μνήμη RAM και ως εκ τούτου χρησιμοποιείται.
Έτσι, μπορείτε να φορτώσετε το είδος αυτό βιβλιοθήκες ή ενότητες σχετικά με τη ζήτηση.
Αυτό σημαίνει να προχωρήσει και να απαιτήσει
για το πρόγραμμα η βιβλιοθήκη HTTP,
και αναφέρονται στην εν λόγω βιβλιοθήκη τρόπο μιας μεταβλητής που ονομάζεται ΗΤΤΡ.
Αλλά αυτό το σύμβολο αριστερά θα μπορούσε να έχουν κληθεί τίποτα, foo,
μπαρ, baz, δεν έχει σημασία.
Έτσι, σε αντίθεση με C + + και Java και C, όπου όταν απαιτείται
ή να εισαγάγετε μια βιβλιοθήκη, αυτό ακριβώς το είδος
της γίνεται σε παγκόσμιο επίπεδο προσιτές,
Node.js ενότητες είναι πιο σφιχτά namespace.
, Έτσι ώστε το - ότι η λειτουργικότητα είναι προσβάσιμη μόνο αυτή τη στιγμή
μέσω αυτής της μεταβλητής όνομα.
Δεν μπορείτε απλά να ξεκινήσετε μεθόδους χαρακτηρισμού που υπάρχουν
σε αυτό το δικαίωμα ένας τρόπος που είναι μάλλον καλό,
γιατί τότε namespace σας δεν παίρνει σχεδόν τόσο γεμάτα
όπως και σε πολλές γλώσσες.
Εντάξει, έτσι και τώρα, όπως το κοινό Προτείνω, τη δημιουργία ενός διακομιστή HTTP
όπως ο Jonathan [υποτίθεται ορθογραφία] ήταν δυνατό είναι κυριολεκτικά
τόσο απλό όσο καλώντας το δημιουργία server μέθοδο μέσα
της μονάδας HTTP.
Έτσι, αυτό είναι η επιστροφή η αναφορά
σε κάποιο είδος του web server.
Ήρθε σε Apache, δεν ανάγκην ως μεγάλο βάρος.
Αυτό και μόνο είναι λίγο πιο απλό.
Και τώρα, έχω απλά να απλά κάνουμε κάποια πράγματα.
Έτσι, η πρώτη, επιτρέψτε μου να μετακινηθείτε στο κάτω μέρος εδώ
και να παραλείψετε το χειριστή Μέθοδος για μια στιγμή.
Και παρατηρήσετε αυτήν τη γραμμή κώδικα,
server.on που είναι σημαίνει ουσιαστικά διακομιστή -
ακούσετε όπως στον κώδικα jQuery,
ακούσουν για μια εκδήλωση που ονομάζεται αίτημα
και να λάβει μόνο μια εικασία τι πρέπει να κάνω
όταν ένα γεγονός αίτημα πυρκαγιές στο διακομιστή.
Ναι;
>> Καλέστε το χειριστή λειτουργίας.
Έτσι, κυριολεκτικά να εκτελέσει το κώδικα που αναφέρεται είναι
από αυτή τη μεταβλητή και πραγματικότητα όχι μια μεταβλητή σε σύμβολο εδώ,
τι είναι αυτό το σύμβολο αναφέρεστε;
Λοιπόν, αυτό το όνομα λειτουργεί εδώ
και του χειριστή προφανώς παίρνει δύο επιχειρήματα.
Γιατί δύο; Λοιπόν, αν απλά διαβάστε την τεκμηρίωση δεν
για τη συγκεκριμένη μονάδα, μπορείτε θα πει ότι ο χειριστής
πως θα υπάρξει προσφυγή θα είναι περάσει τουλάχιστον δύο επιχειρήματα,
μια αναφορά στο αίτημα,
και στο εσωτερικό της αίτησης που κυριολεκτικά σημαίνει το αίτημα HTTP.
Έτσι, όλοι όσοι κεφαλίδες HTTP ότι μπορεί να υπενθυμίσει
από την έναρξη της εξάμηνο ή κάποια προηγούμενη κατηγορία
ή εμπειρία, όπως η πάρει γραμμή και τη γραμμή υποδοχής
και User-Agent γραμμή, όλα αυτά είναι έγκλειστα και πιο μέσα
του αιτήματος αυτού αντικειμένου.
Και η απάντηση είναι αντικείμενο ταξινομημένο για εξερχόμενες δεδομένων.
Έτσι, έχετε μια αναφορά σε ένα αντικείμενο που πρόκειται να επιτρέψει σε σας
να στείλετε τις πληροφορίες πίσω στο το πρόγραμμα περιήγησης καλώντας μεθόδους
σε αυτό το τελευταίο επιχείρημα ονομάζεται Res για την απάντηση.
Αλλά αυτό θα μπορούσε να ονομαστεί foo ή μπαρ, αυτό είναι μόνο συμβάσεις.
Έτσι τώρα, τι μπορώ να κάνω;
Λοιπόν, φαίνεται ότι στο εσωτερικό αυτού του σούπερ απλό web server
ότι είμαι εφαρμογής, είμαι πρόκειται να κάνετε τα εξής.
Πάω να γράψω ένα HTTP header με κωδικό κατάστασης 200,
200 έννοια Εντάξει, όλα είναι καλά.
Και στη συνέχεια, Πάω να περάσει σε φαινομενικά.
Τι είναι ο τύπος δεδομένων της Το δεύτερο επιχείρημα προς τα δεξιά το κεφάλι;
>> Είναι ένα αντικείμενο;
>> Είναι ένα αντικείμενο με πόσα κουμπιά και τις αξίες;
Μόνο ένα από το καθένα, δεξιά, μια βασική αξία του ζεύγους.
Έτσι, «ο τύπος περιεχομένου».
Και ο μόνος λόγος Είμαι αυτό αναφέροντας εδώ είναι
γιατί το ενωτικό θα μπορούσε να είναι συγχέονται για αρνητικό πρόσημο
ή κάτι τέτοιο.
Έχω, λοιπόν, να παραθέσω εδώ, τσουρουφλίζω ή διπλά εισαγωγικά.
Αλλά και πάλι κοινό παράδειγμα
στον κώδικα JavaScript είναι συχνά μονά εισαγωγικά αυτές τις μέρες,
κόλον και τότε η τιμή.
Έτσι, αυτό είναι μόνο η λεγόμενο τύπο νου.
Αυτή είναι μια κεφαλίδα HTTP που κυριολεκτικά θα
να είναι το περιεχόμενο τύπου ενωτικό του παχέος εντέρου απλό κείμενο slash που πρόκειται
να σταλεί από το διακομιστή για το πρόγραμμα περιήγησης
έτσι ώστε το πρόγραμμα περιήγησης γνωρίζει είτε για να τρέξει αυτό το κείμενο ως Raw
ή HTML ή ως εικόνα ή μια ταινία
ή ένα αρχείο flash ή τίποτ 'άλλο.
Τώρα, πού μπορώ πραγματικά θέλουν να στείλετε στο σώμα της σελίδας;
Λοιπόν, απλά με την ανάγνωση η τεκμηρίωση
για το αντικείμενο απόκρισης εσωτερικό αυτής της βιβλιοθήκης.
Βλέπω ότι υπάρχει ένας σωστός μεθόδου και ότι παίρνει ένα string,
ίσως και άλλα πράγματα, αλλά ελάχιστα ένα string.
Και η σειρά είναι ό, τι είναι φτύσει στο πρόγραμμα περιήγησης.
Στην περίπτωση αυτή, super του απλό, hello world του,
αλλά θα μπορούσε να είναι Opne βραχίονα, html, κλείσιμο παρένθεσης,
κεφάλι ανοιχτό βραχίονα, κοντά υποστήριγμα και ούτω καθεξής,
αυτό θα μπορούσε να είναι Raw html.
Αλλά είμαστε κρατώντας το παράδειγμα απλά με φτύνουν
από την απλούστερη των τύπων μυαλού η οποία είναι αναμφισβήτητα text / plain.
Και τότε ακριβώς Response.end σημαίνει να κλείσετε τη σύνδεση
και να στείλετε ό, τι έχω είδος ρυθμισμένο στο εσωτερικό
αυτού του αντικειμένου πίσω στο πρόγραμμα περιήγησης.
Τελείωσα. Εντάξει.
Έτσι, το τελευταίο πράγμα Κάνω εδώ κάτω
και αυτό είναι κάπως αυθαίρετη και προορίζεται να είναι δροσερό,
είναι λέω ο διακομιστής τελικά να ακούσετε
σε ένα ορισμένο TCP με προεπιλεγμένη θύρα.
Ανάκληση από την αρχή της κατηγορίας ότι οι υπηρεσίες -
ή που συνήθως μοναδικά αναγνώρισή με αριθμούς,
Μ.Χ. είναι το διαδίκτυο, 443 HTTP βάση ιστοσελίδες, 22 είναι SSH, 21 είναι FTP
και 1337 είναι απλώς αυθαίρετη αλλά είναι υψηλότερη από το 1024
πράγμα που σημαίνει στις περισσότερες συστήματα, μπορώ να το χρησιμοποιήσετε
χωρίς να χρειάζεται super τα προνόμια των χρηστών.
Έτσι είναι μόνο βολικό.
Αλλά 8080 είναι στο off - μια κοινή ένα, 8088, πραγματικά κάτι μεγάλο
σε χιλιάδες ως κοινό αλλά αυτό είναι απλά πιο ελίτ.
Εντάξει, έτσι τι συμβαίνει όταν τρέχουν στην πραγματικότητα αυτό;
Λοιπόν, εγώ δεν απλά επισκεφτείτε η σελίδα σε ένα πρόγραμμα περιήγησης.
Το αρχείο αυτό ονομάζεται server-0.js.
Επειδή και πάλι, Apache είναι τώρα από την εικόνα
για το δεύτερο ήμισυ του μαθήματος.
Αν θέλω να web διακομιστή, πρέπει να γράψω
και στη συνέχεια να εκτελέσετε αυτό το web server.
Αλλά φαίνεται ότι η JavaScript τόσο από την πλευρά του πελάτη
και η πλευρά του διακομιστή είναι μια ερμηνευμένη γλώσσα.
Έτσι, το μόνο που χρειάζεται είναι διερμηνέα.
Έτσι Ειναι για - εάν επιμείνει να τρέξει κόμβο και στη συνέχεια server-0.js,
I μπορεί ή δεν μπορεί να δει κάποια έξοδος, ανάλογα
σε ποια βιβλιοθήκες που έχω περιλαμβάνονται, τίποτα δεν φαίνεται να συμβαίνει.
Αλλά επιτρέψτε μου να πάω σε ένα browser και άσε με να φύγω
στην ίδια διεύθυνση IP των πελατών CS50 μου.
Αλλά αυτό θα μπορούσε απλώς καθώς είναι το Mac μου
ή τον υπολογιστή μου και στη συνέχεια πατήστε enter.
Αυτό φαίνεται πραγματικά σαν Apache.
Αυτό είναι σαν τον κατάλογο Προσθήκη κοιτάξαμε
κατά το πρώτο εξάμηνο.
Λοιπόν, τι έκανα λάθος;
Ναι.
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Ακριβώς, έτσι δεν είναι;
Έτσι, Apache ακούει ακόμη σχετικά με την προεπιλεγμένη θύρα 80.
Ακόμα κι αν μπορούσε να αλλάξει αυτό, Θα μπορούσα να το απενεργοποιήσετε όλοι μαζί
αλλά είναι ακόμα σε λειτουργία.
Αλλά αυτά τα παιδιά μπορούν να συνυπάρχουν βεβαίως.
Εγώ απλά πρέπει να βάλετε του παχέος εντέρου 1337 και, στη συνέχεια, ίσως
ή ίσως δεν είναι κάθετος στο το τέλος για να αποκτήσετε πρόσβαση σε αυτή τη θύρα
ότι αυτός ο διακομιστής τρέχει σε.
Και τώρα βλέπω ότι Γεια σας, ο κόσμος έχει επιστρέψει.
Και μπορώ να χτυπήσω reload ως όσες φορές θέλω,
είναι ακόμα προσφέροντας μια σελίδα.
Πράγματι, αν ανοίξει του Chrome επιθεωρητή, πηγαίνετε στο δίκτυο
και στη συνέχεια να φορτώσετε ολόκληρη τη σελίδα,
παρατηρήσετε ότι πράγματι αυτό ήταν το αίτημα που εστάλη.
Αν κοιτάζω το Raw πηγή,
παρατηρήσετε το πρόγραμμα περιήγησής μου στέλνει όλα αυτά τα πράγματα.
Και στη συνέχεια η απάντηση από ο διακομιστής ήταν εξαιρετικά απλή.
Υπάρχει το 200.
Αν δεν είναι πολύ χαμηλή στην οθόνη,
υπάρχει ο τύπος περιεχομένου.
Και τότε Node.js είδος αυτόματα
για μένα προστεθεί η ημερομηνία και όλα τα άλλα πράγματα
ότι οι browsers τυπικά περιμένουν.
Έτσι, ας δούμε ένα μικρό έλεγχο λογική.
Επιτρέψτε μου να πάω πίσω στον κώδικα σε server-0.js και επιτρέψτε μου -
κάθε φορά που πάω σε ο χειριστής,
επιτρέψτε μου να πω console.log.
(«Είχαμε έναν επισκέπτη!»).
Δεν χρειάζεται να μεταγλωττίσετε ξανά ή κάτι τέτοιο,
είναι μια ερμηνευμένη γλώσσα.
Έτσι τώρα, επιτρέψτε μου να πάω πίσω στο η σελίδα, επανατοποθετήστε μία, δύο,
τρεις φορές και να πάει πίσω στο παράθυρό μου.
Και τώρα βλέπω αυτό.
Καλά αυτό είναι παράξενο, Βλέπω έξι γραμμές.
Ενδιαφέρουσες web trivia, γιατί έκανε Έχω πάρει έξι αίτημα όχι τρεις;
Ναι;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Ναι. Έτσι, όπως ίσως γνωρίζετε το λίγο ηλίθιο εικονίδιο στην κορυφή
του γραμμή περιήγησης ότι πολλά
των δικτυακών τόπων που χρησιμοποιούνται δύναμη είναι η κορυφή του Χάρβαρντ,
θα μπορούσε να είναι ένα λογότυπο της εταιρείας ή κάτι τέτοιο.
Έτσι, αυτές τις μέρες browsers ταξινόμησης
από αυθάδεια κάνει μια συμπληρωματική αίτηση HTTP
σχεδόν σε κάθε ιστοσελίδα που που επισκέπτεστε τον έλεγχο, αν υπάρχει
από προεπιλογή ένα αρχείο ονομάζεται favicon.ico
στον ίδιο κατάλογο το αρχείο που ζητήσατε.
Και αν ναι, θέτει το εικονίδιο εκεί.
Έτσι, όλοι βλέπουμε είναι ακριβώς αυτό.
Και στην πραγματικότητα, ας δούμε αν μπορούμε να δείτε αυτό όχι τύπου
ακριβώς, «Είχαμε έναν επισκέπτη».
Επιτρέψτε μου να πάω μπροστά και εξόδου.
Και μόνο που ξέρω αυτό από κοιτάζοντας την τεκμηρίωση.
Υπάρχει ένα ακίνητο στο εσωτερικό της το αντικείμενο της αίτησης που ονομάζεται URL
η οποία συμβαίνει να είναι το μονοπάτι
ότι ζητήθηκε στην πραγματική διεύθυνση URL.
Έτσι, εάν κάνετε επανεκκίνηση του διακομιστή απλά επανεκτιμήσαμε κόμβο
σε server-0.js και τώρα το κάνετε αυτό ένα, δύο,
τρεις και να πάει πίσω εδώ.
Εκεί είναι.
Slash είναι αυτό - το ανθρώπινο ζήτησε
σε favicon.ico είναι τι το πρόγραμμα περιήγησης είναι
αυθάδεια ζητούν.
Αλλά το θέμα δεν είναι τόσα πολλά πράγματα favicon
αλλά πώς λειτουργεί ο διακομιστής.
Ναι;
>> Γιατί τα οποία έχουν να είναι κάποιο αίτημα;
>> Γιατί σημαίνει ότι έχουν να - από τη φύση του πώς λειτουργεί HTTP.
Έτσι, HTTP μπορεί να ζητήσει μόνο ένα αρχείο κάθε φορά.
Τα προγράμματα περιήγησης μπορεί να είναι έξυπνο αυτές τις μέρες
και να κρατήσει το TCP ανοικτή τη σύνδεση.
Αν πήρε CS143 ή, γενικότερα, εξοικειωμένοι με τη δικτύωση,
έτσι μπορείτε να πάρετε τα κέρδη αποδοτικότητας
διατηρώντας το δίκτυο πρίζα ανοικτής
στη λήψη πολλαπλών HTTP αιτήσεις σειριακά πάνω
αλλά είναι ένα αρχείο ανά αίτηση.
Έτσι, αν επισκεφτείτε κάτι σαν -
Εννοώ μπορούμε να πάμε πιο οποιαδήποτε ιστοσελίδα.
Αν πάτε σε - ας σηκώσει επιθεωρητής του Chrome εδώ.
Μπορεί να πάρει να γεμίσει το μεγαλύτερο της σελίδας.
Πηγαίνετε στην καρτέλα δικτύου και πηγαίνετε στο www.cnn.com.
Και όταν επισκέπτεστε cnn.com, η ιστοσελίδα της -
Ο φυλλομετρητής σας και όχι atrociously κάνει - ακόμα μετράει.
OK. Τουλάχιστον 289 HTTP αιτήματα ξανά και ξανά.
Και αυτός είναι ο λόγος κατά την επίσκεψή σας ιδιαίτερα φουσκωμένη ιστοσελίδες,
από όπου και αν αργεί να φορτώσει , διότι όλα
των περιουσιακών στοιχείων που φορτώνετε.
Έτσι, μοιάζει με 298.
Μπορεί να υπάρχουν κάποια Ajax συμβαίνει σε αυτό το σημείο ή κάποια
των περιουσιακών στοιχείων είναι μόνο χαμηλά.
Έτσι, κάθε μία από αυτές είναι μεμονωμένο αίτημα πηγαίνει πίσω
και πίσω, εμπρός και πίσω.
Και γι 'αυτό νωρίτερα, ακόμη και αν και το είδος της μίλησε
γι 'αυτό κάπως ευφάνταστο όπου μπορείτε να βάλετε την ετικέτα script,
απολύτως κάνει μια διαφορά όταν έχετε -
θα αρχίσετε να έχετε μια πολύ της κυκλοφορίας και πολλά
να ζητήσει τα αρχεία.
Και κάθε ένα από αυτό αντιπροσωπεύει ίσως μια εικόνα, ένα αρχείο πολυμέσων,
ένα αρχείο JavaScript, Αρχείο CSS ή τα παρόμοια.
Έτσι, είμαστε ήδη μέχρι περίπου 4 megabytes μόνο
να δούμε τα σημερινά νέα.
Καλή ερώτηση.
Εντάξει.
Έτσι, τι είναι μερικά από τα upsides όμως;
Δεξιά, ξέρουμε πώς να κάνουν ιστοσελίδες που έχουν ήδη με την PHP.
Και πολλοί από εσάς ήρθε στην η τάξη γνωρίζοντας Django
και Python ή Ruby με ράγες.
Έτσι, γιατί χρειαζόμαστε ένα ακόμη γλώσσας και των υποδομών;
Τι είναι ιδιαίτερα Node.js καλό στο αν ξέρεις;
[Παύση]
Κάποια πράγμα;
Όχι; Ναι;
>> Μετεγκατάσταση μηνύματα.
>> Έτσι, αποστολής μηνυμάτων.
Έτσι, αυτό είναι αλήθεια και είναι αλήθεια για ένα πιο τεχνικό λόγο
και ότι Node.js και πραγματικά JavaScript είναι ιδιαίτερα
κατάλληλο για να ασύγχρονη κώδικα,
αν με το οποίο μπορείτε να δημιουργήσετε η ψευδαίσθηση
να κάνει πολλαπλές πράγματα ταυτόχρονα.
Έτσι, ακόμα κι αν είστε πραγματικά συμβαίνει σειριακά,
Πράγματι, στις περισσότερες περιπτώσεις, JavaScript τόσο πλευρά του πελάτη
και την πλευρά του διακομιστή είναι μονό σπείρωμα.
Ποιο εάν παίρνετε 161 ή ακόμη και 61 σημαίνει ότι -
αυτού του προγράμματος γνωρίζουν,
ο διερμηνέας μπορεί κυριολεκτικά κάνουμε μόνο ένα πράγμα ταυτόχρονα.
Αλλά αυτό δεν είναι μεγάλη για κάτι σαν web server
όπου μπορείτε να έχετε δεκάδες ή εκατοντάδες ή ίσως και χιλιάδες
των χρηστών όλοι προσπαθούν να έχουν πρόσβαση ιστοσελίδα σας
κατά την ίδια στιγμή.
Και όμως, που υποδηλώνουν ότι ο χειρισμός τους ένα
μετά την άλλη μετά την άλλα ειδικά αν κάποια
της εν λόγω αίτησης, όπως είδαμε στο CNN μπορεί να απαιτήσει εξυπηρετούν
μέχρι 300 αρχεία, πριν να ακόμη και να πάρετε στο επόμενο χρήστη
ο οποίος θέλει να δει το λέει ειδήσεις.
Node.js είναι καταλληλότερο για περιβάλλοντα όπως αυτό.
Διότι αυτό που συμβαίνει είναι κάθε αργή διαδικασία λειτουργίας
όπως την ανάγνωση ενός αρχείου από το δίσκο ή αναζήτηση σε μια βάση δεδομένων ή να μιλάμε
σε κάποιο άλλο διακομιστή δικτύου,
που τείνει να έχει λανθάνουσα κατάσταση, σωστά;
Αν είχε λάβει 61 ή 161 ιδιαίτερα όλα αυτού του είδους
των περιφερειακών υπηρεσιών τείνουν να είναι πολύ πιο αργή
ό, τι κάνει τίποτα μέσα από η ίδια μνήμη RAM και το ίδιο CPU
ότι δηλαδή σε αυτή την περίπτωση, η server είναι πράγματι εκτελείται.
Αλλά τι είναι καλό για Node.js είναι ότι μπορείτε να -
και JavaScript γενικότερα είναι ότι μπορείτε να κάνετε κάτι
και στη συνέχεια να πω, "Χμμ, αυτό πρόκειται
να με πάρει μερικά χιλιοστά του δευτερολέπτου ή ακόμη και σε λίγα δευτερόλεπτα.
Επιτρέψτε μου είδος πιρούνι ότι μακριά, " αλλά δεν είναι μια πραγματική διαδικασία.
Και στη συνέχεια, όταν θα έχει τελειώσει κάνει ότι η αργή διαδικασία λειτουργίας
όπως αρπάζοντας σειρές από μια βάση δεδομένων ή διαβάζοντας ένα αρχείο. html
από το δίσκο, θα να πάρει πίσω σε μένα και όχι
από ό, τι μου χρειάζεται να περιμένουμε για αυτό.
Έτσι, για να γίνει αυτό πιο σαφές.
Αυτό είναι μέσα μου καθιστώντας αυτό το πιο οικείο.
Εντάξει, έτσι αυτό είναι το Shake Shack στην πλατεία.
Αυτό είναι το είδος της μια κοινό παράδειγμα
για την εξήγηση Asynchronicity.
Αυτό είναι πραγματικά ένα καλό παράδειγμα, επειδή Shake Shack
και Tasty Burger είναι εξαιρετικά επιβραδύνει για αυτό που κάνουν.
Αλλά το θέμα είναι ότι είναι πραγματικά καλός σε λήψη παραγγελιών
και λαμβάνοντας τα χρήματά σας μετά το οποίο μπορείτε να περιμένετε για το φαγητό σας.
Έτσι, αυτό είναι πραγματικά ένα καλύτερο σχεδιασμός από την εναλλακτική λύση.
Διότι ας υποθέσουμε ότι τα πόδια σας σε ένα κατάστημα όπως αυτό και να έχεις
προς τα εμπρός της γραμμής και να σας την παραγγελία σας και θέλετε
με burger, όσο καλύτερα μπορώ πείτε, χρειάζονται τουλάχιστον πέντε
ή περισσότερο λεπτό προς πραγματικά να πάρει ένα burger.
Έτσι, θα ήταν το είδος από ένα κακό επιχειρηματικό μοντέλο
εάν, ενώ είστε σε αναμονή για σας burger, Alice [υποτίθεται ορθογραφία]
και ο Bob [υποτίθεται ορθογραφία] και Charlie [υποτίθεται ορθογραφία]
και όλοι οι άλλοι είναι ουρά πίσω σας
και είστε κυριολεκτικά κλείδωμα η γραμμή αναμονής για το φαγητό σας.
Έτσι, προφανώς, στο Shake Shack
και άλλα fast food θέσεις δεν το κάνουμε αυτό,
κάνουν κάτι τέτοιο.
Θα σας δώσω ένα κουδούνι.
Και το είδος της σας στείλει στο δρόμο σας.
Και θα σας καλέσουμε από κάνει αυτό το μικρό πράγμα που δονείται
ή flash για να πάρει την προσοχή σας.
Έτσι, αυτό είναι κυριολεκτικά ό, τι;
Κάτι σαν Node.js κάνει.
Αν Node.js ή JavaScript γενικότερα χρησιμοποιείται
και ο προγραμματιστής Είναι αρκετά έξυπνος
να συνειδητοποιήσουμε, "Ξέρεις τι;
Ό, τι πρέπει να κάνουμε το σωστό εδώ θα μπορούσε να πάρει κάποιο αριθμό
χιλιοστά του δευτερολέπτου ή δευτερόλεπτα.
Ξέρεις τι;
Επιτρέψτε μου να πάω μπροστά και όχι αποκαλούν συγχρονισμένα -
"Που είναι το κλείδωμα τύπος όλοι οι άλλοι στη σειρά, "-
επιτρέψτε μου να προχωρήσει και είδος βήμα κατά μέρος
και απλά καλέστε πίσω τον εαυτό μου
όταν η μεγάλη διάρκεια λειτουργία έχει ολοκληρωθεί. "
Και καλέσουμε φυσικά υπαινίσσεται σε αυτήν την περίπτωση
σε μια λειτουργία επανάκλησης, ένα αναφορά σε ένα τσοκ κώδικα
ότι θα πάρει εκτελεστεί όταν burger σας είναι έτοιμο,
σαν αυτό το πράγμα να έχει κάποια το είδος της λειτουργικότητας ενσωματωμένη
ότι ξεκινά δόνησης ή βούισμα όταν ήρθε η ώρα για σας
να καλείται να επιστρέψει στην το μέτωπο της γραμμής.
Έτσι, αυτό που κάνει αυτό σημαίνει σε πραγματικούς όρους;
Λοιπόν, θα πρέπει να το έργο μας πάνω.
Έτσι, επιτρέψτε μου να προχωρήσει και να κάνουμε αυτό πρώτα.
Στο διακομιστή 1.js, επιτρέψτε μου να πρώτα την απλούστευση του κώδικα
έτσι μπορούμε να πάρουμε μέτρα για το μωρό προς ένα πιο συναρπαστικό πρόβλημα.
Αυτό είναι ακριβώς το ίδιο πρόγραμμα που έγραψα πριν.
Αλλά τι έχει αλλάξει;
Υπάρχει το είδος της μια μικρή συντακτική διαφορά
μεταξύ αυτού και έκδοση 0 πριν από λίγο.
Τι πηδά έξω σε σας αν θυμάστε;
Ναι Cynthia [υποτίθεται ορθογραφία];
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Ναι. Έτσι τώρα, έχουμε μια γραμμή της λειτουργίας να περάσει μέσα
Έχουμε πάρει απαλλαγούμε από το είδος
του μάταια το όνομά του συνάρτηση handler.
Άχρηστο μόνο από το γεγονός ότι πριν από ακόμη και καλώντας σε ένα μέρος,
Πραγματικά, δεν χρειάζεται να χάνετε χρόνο δίνοντάς του ένα όνομα
και καθιστώντας πιο δύσκολο να διαβάστε την κορυφή προς τα κάτω κώδικα.
Έτσι, ας δηλώσει inline είναι μια ανώνυμη συνάρτηση.
Και κάνω δύο άλλα πράγματα.
Κάνω την καλύτερη χρήση συμβολισμός.
Έτσι, όπως και σε jQuery, πολλά κόμβου μέθοδοι μπορούν να δεμένους.
Έτσι ώστε μόλις τελειώσετε την κλήση κάτι, δεν έχετε
να περιμένει σε μια νέα γραμμή και να καλέσει κάποια άλλη μέθοδο,
μπορείτε απλά αλυσίδας μαζί.
Και έτσι με αυτό τον τρόπο, μπορούμε να πραγματικά σφίξτε αυτό επάνω.
Έτσι, αυτό είναι κυριολεκτικά web server σε πέντε γραμμές
του συνολικού κώδικα σε αντίθεση με το -
σε αντίθεση με ό, τι κανονικά θα πρέπει να κάνετε για να κανονίσω κάτι.
Αν πάω στον κεντρικό υπολογιστή 2 τώρα, ας το κάνουμε.
Στο διακομιστή 2 - στην πραγματικότητα, ας επανέλθω σε αυτόν το διακομιστή 2.
Ας τώρα να ανοίξει async-0.js και αντιμετώπιση αυτού του προβλήματος στο χέρι.
Έτσι, η πρώτη, ας πάμε μπροστά και ανοιχτό
up async-0.js στο πρόγραμμα περιήγησης.
Έτσι ασύγχρονη-0, επιτρέψτε μου να πάω επιστρέψετε στο πρόγραμμα περιήγησης.
Hit reload.
Και τώρα, αυτό είναι το είδος μήνυμα λάθους.
Πράγματι, βλέπω 500 σε επιθεωρητή του Chrome.
Αλλά επιτρέψτε μου να με μεγαλύτερη ακρίβεια ζητήσει hello.txt.
OK. Έτσι, αυτό φαίνεται να λειτουργεί.
Έτσι ασύγχρονη-0.js δεν φαίνεται να εξυπηρετήσει μέχρι κάτι για slash.
Δεν έχει καμία υποστήριξη προεπιλεγμένο αρχείο.
Αλλά αν ρητά ζητήσει hello.txt,
που φαίνεται να υποστηρίζει.
Γιατί συμβαίνει αυτό;
Λοιπόν, τι έχω πάει εδώ
και να γίνει εφαρμογή ένα σούπερ απλό web server
που δείχνει πού Asynchronicity μπορεί να είναι χρήσιμη.
Και αυτό υλοποιείται ως ακολούθως.
Πρώτον, είμαι χρησιμοποιώντας το Μονάδας HTTP και πάλι,
αλλά και FS που πιθανώς σημαίνει;
Σε γενικές γραμμές στην CS, το σύστημα αρχείων.
OK σύστημα αρχείων.
Ως εκ τούτου εμπρός FS, το σύστημα αρχείων.
Εντάξει, έτσι τι κάνει αυτό να μου δώσει;
Λειτουργίες που σχετίζονται με αρχεία, όπως το να περάσει,
το άνοιγμα αρχείων, γράφοντας καταλόγους, καταλόγους ανάγνωσης
και όλα αυτού του είδους τα πράγματα.
Έτσι, σήμερα παρατηρούμε ότι, αυτού του κώδικα είναι η ίδια όπως και πριν,
δημιουργήσετε το διακομιστή, περνώντας σε μια ανώνυμη συνάρτηση.
Αυτό είναι το είδος της αυθαίρετης.
Αυτό δεν είναι μια πολύ ασφαλή web server.
Στην πραγματικότητα, θα μπορούσαν να έχουν πρόσβαση πιο οποιοδήποτε αρχείο στο σκληρό δίσκο μου
ή στο διακομιστή σκληρό το αυτοκίνητο από την εκτέλεση αυτού του κώδικα
επειδή είμαι ακριβώς τυφλά υποθέτοντας ότι θα πάω
να αρπάξει ανεξάρτητα από το χρήστη ζητηθεί στο URL.
Και Πάω να πρόθεμα με τελεία
έτσι ώστε να είμαι οριακά είναι ασφαλής
λέγοντας ανεξαρτήτως αρχείο μπορούν αίτηση πρέπει τουλάχιστον ξεκίνημα
στον τρέχοντα κατάλογο.
Φυσικά υπάρχει μια απειλή εδώ.
Γιατί αν αντί περιλαμβάνουν τι;
Στην πορεία τους, μπορούν είδος της επιλύσετε αυτό πάρα πολύ.
Τελεία, τελεία, σωστά;
Έτσι, εάν ο χρήστης απλά βάλτε τελεία, τελεία στη διεύθυνση URL, στη θεωρία,
θα μπορούσαν να αρχίσουν να πάρει μου - και να πω αρχείο κωδικού πρόσβασης.
Έτσι, αυτό δεν εννοείται να ασφαλίζεται,
είναι γραφτό να είναι απλή.
Τόσο εδώ, έχω μια μεταβλητή που είναι η συνένωση των dot
το οποίο είναι παρόν κατάλογο και το URL της αίτησης
το οποίο είδαμε πριν είναι όπως κάθετο ή / hello.txt.
Έτσι τώρα, παίρνει λίγο πιο ενδιαφέρουσα.
Πρώτον, παρατηρήστε το κάτω μέρος.
Ακούω για το ίδιο λιμάνι όπως και πριν.
Έτσι, το πραγματικό ενδιαφέρον εργασίας είναι μέσα από εδώ.
Κάθε φορά που μια αίτηση έρχεται σε από τη φύση
του κώδικα αυτού, τι κάνω;
Παίρνω το αρχείο μέθοδος ανάγνωσης αρχείων συστήματος,
περνώντας στη διαδρομή ότι θέλω να διαβάσω.
Και τώρα, αυτό είναι αυτό που είναι ενδιαφέρον εδώ,
αυτό είναι με την εφαρμογή ασύγχρονη μέθοδο.
Δεν μπορείτε να πάρετε μια επιστροφή αξίας από το αρχείο ανάγνωσης.
Στην ανακοίνωση πραγματικότητα, δεν υπάρχει έκφρασης δεν αριστερά
στα αριστερά του αρχείου ανάγνωσης.
Δεν επιστρέφει μια τιμή.
Αντίθετα, καλεί μια επανάκλησης λειτουργεί όταν είναι έτοιμο
για να σας δώσει πίσω μια απάντηση.
Έτσι και πάλι να είναι σαφής, λαμβάνοντας υπόψη ότι χτες,
σε πολλές προγραμματισμό γλώσσες, αν θέλετε
να διαβάσει ένα δικογραφία Στο σημείο PHP,
Αρχείο υπογράμμισης πάρει υπογραμμίζουν το περιεχόμενο,
έχετε μια έκφραση αριστερό σε όλες της αξίας μετά -
πριν από το ίσον, αυτό σημαίνει ότι είστε ανάθεση
σε αυτή τη μεταβλητή η επιστροφή αξία αυτής της λειτουργίας.
Μπορείτε να το κάνετε αυτό σε Node.js, αλλά έχετε συνήθως
να καλέσει ρητά σύγχρονη εκδόσεις των λειτουργιών αρέσει,
Νομίζω ότι διαβάσετε sync αρχείο ή να συγχρονίσετε ανάγνωση του αρχείου.
Ξέχασα πώς το όνομά του.
Και αυτό θα δώσει Είσαι τιμή επιστροφής.
Αλλά αν αυτό το αρχείο είναι σε κάποια απομακρυσμένο σύστημα αρχείων
ή ο δίσκος είναι απλά φυσικά αργή, θα μπορούσε να πάρει 10 χιλιοστά του δευτερολέπτου
2 δευτερόλεπτα για αυτό το αρχείο πραγματικά να έρθει πίσω.
Εν τω μεταξύ, καμία άλλη web Οι επισκέπτες που εξυπηρετούνται
με websit σας.
Είσαι κλείδωμα.
Αυτό είναι ό, τι λέγεται κλείδωμα IO, εισόδου / εξόδου.
Έτσι, εδώ, αυτό είναι πολύ πιο έξυπνη.
Διότι αυτό Node.js πρόκειται
να κάνει κατά την ερμηνεία είναι η ακόλουθη,
πρόκειται να καλέσετε η μέθοδος ανάγνωσης του αρχείου,
προσπαθήστε να το ένα επάνω στο αρχείο που πήρε μια διαδρομή που καθορίζεται από την τιμή P.
Και στη συνέχεια, αν και όταν είναι έτοιμο για να σας δώσει πίσω τα περιεχόμενα
του αρχείου Ρ, θα καλέσει μια λειτουργία του οποίου η υπογραφή είναι
κατά συνθήκη παρακάτω.
Δύο επιχειρήματα, η πρώτη από τις το οποίο είναι ίσως ένα αντικείμενο λάθους,
κεφάλαιο Ε, είναι ένα αντικείμενο ονομάζεται Σφάλμα ή Null
αν δεν υπάρχει τέτοιο σφάλμα.
Και το δεύτερο επιχείρημα - να λάβει μια εικασία - πρόκειται να είναι αυτό;
Λέγεται δεδομένα, αλλά προφανώς ποια είναι τα δεδομένα πιο συγκεκριμένα;
>> Περιεχόμενα;
>> Το περιεχόμενο των hello.txt στο παράδειγμα που τράβηξα
επάνω στη μηχανή αναζήτησης μου πριν από ένα λεπτό.
Έτσι, με άλλα λόγια για να διαβάσει το αρχείο και πολλά Node.js λειτουργίες
όπως και σε δεν επιστρέφουν τιμές.
Καλούν οπισθοκλήσεων και να περάσει
σε αυτές τις οπισθοκλήσεων τι θα Έχουν παραδοσιακά η
επιστρέφει τιμή.
Η ανάποδα αυτής της προσέγγισης είναι
ότι μπορείτε να καλέσετε διαβάστε το αρχείο ένα Τ0.
Η δύναμη λειτουργία επανάκλησης δεν μπορεί να ονομάζεται ένα τσιμπούρι αργότερα
έτσι ώστε να μιλήσει σε Τ, το θα μπορούσε να ονομάζεται T1000,
χίλια τσιμπούρια αργότερα.
Αλλά το σημείο είναι ότι η υπόλοιπο κώδικα σε αυτό το αρχείο,
τυχόν θα αμέσως να εκτελεστεί, ενώ Node.js
και ενώ το σύστημα αρχείων στοιχεία για το πώς να διαβάσετε
το αρχείο και να πάρει είναι πίσω σε σας.
Έτσι, μπορείτε να δημιουργήσετε αυτό -
τόσο αποτελεσματικά η ψευδαίσθηση
παραλληλισμού, ενώ θα αφήσουμε βραδύτερη διαδικασίες λειτουργίας δεν είναι
μπλοκάρουν τα σημαντικά πράγματα, το μέρος που την εξυπηρέτηση των χρηστών.
Έτσι, πώς θα χειριστεί αυτό;
Αυτό είναι ένα πολύ κοινό Node.js παράδειγμα.
Και υπάρχει τρόπος απλά να απλοποιήσει αυτό είναι ότι θα δούμε πριν μαζί.
Θέλω πρώτα ελεγχθεί εάν Σφάλμα δεν είναι null.
Έτσι, αν δεν είναι ψευδής Στη συνέχεια υπήρξε ένα λάθος.
Δεν ξέρω τι είναι αυτό, ίσως το αρχείο δεν υπάρχει.
Δεν είχα δικαιώματα.
Η διαδρομή είναι λάθος.
Οποιοσδήποτε αριθμός πράγματα θα μπορούσε να πάει στραβά.
Προς το παρόν, είμαι πρόκειται να αυθαίρετα να επιστρέψει το 500
το οποίο είναι εσωτερικό σφάλμα διακομιστή.
Κάτι πήγε στραβά.
Δε με νοιάζει να εντοπιστεί.
Έτσι, ας πω ο χρήστης έχει σπάσει.
Και στη συνέχεια, Πάω να κάνει res.end,
και αυτό είναι στενογραφίας σημειογραφία.
Υπενθυμίζουμε ότι το τελευταίο φορά που έκανα res.write
και στη συνέχεια έκανα res.end.
Εάν θέλετε μόνο να στείλετε μια γραμμή παραγωγής,
μπορείτε να τα κάνετε όλα με τη μία μόνο με res.end με ένα επιχείρημα,
και ότι πρόκειται να στείλει ανεξάρτητα από το μήνυμα λάθους είναι
εσωτερικό αυτού του αντικειμένου στο πρόγραμμα περιήγησης.
Ήταν αρκετά ηλεκτρικό τόξο Υπενθυμίζουμε πριν από λίγο.
Δεν έχω ιδέα τι είναι αυτό σήμαινε την πρώτη ματιά.
Αλλά όταν ζητείται αρχείο που δεν υπάρχει -
Ωχ, πρέπει να εκτελέσετε ο server και πάλι.
Όταν ζήτησα ένα αρχείο που δεν υπήρχαν, EISDIR,
έτσι κάτι για να είναι κατάλογος,
αν το κάνω κάποια τυχαία σειρά εκεί,
προφανώς αυτό σημαίνει ότι η το αρχείο δεν υπάρχει ακόμα.
Και αυτό γιατί τον κωδικό μου απλά λέει να γράψει
από ό, τι το Raw Μήνυμα λάθους είναι,
φιλικό οπότε δεν είναι πολύ χρήστη αλλά τουλάχιστον είμαι το χειρισμό.
Αλλιώς, αν δεν ήταν μια error τι κάνω;
Το ίδιο πράγμα όπως και πριν σούβλα από 200 OK, ένα απλό -
text / plain τύπου μυαλό και στη συνέχεια να φτύσει τα δεδομένα.
Και γι 'αυτό παίρνω το περιεχόμενα του hello.txt που μόλις
να επιβεβαιώσει αν κοίταξα σε hello.txt,
Είναι κυριολεκτικά Γεια σας, τον κόσμο.
Και αν αλλάξει αυτό γειά σου, τον κόσμο, να αποθηκεύσετε το αρχείο,
επανάληψη του διακομιστή, επαναλάβετε τη φόρτωση της σελίδας.
Τώρα, έχω αυτήν την έκδοση.
Έτσι, έχω πραγματικά ακριβώς επαναυλοποιηθεί ένα web server
όπως υπήρχαν για πολλά χρόνια, αλλά χρησιμοποιώντας node.js.
Αλλά μπορούμε να το κάνουμε αυτό ακόμα πιο καθαρά.
Επιτρέψτε μου να ανοίξει async-1.js.
Τώρα, παρατηρούμε είμαι προσθέτοντας άλλη μονάδα αυτή τη φορά,
προφανώς η μονάδα διαδρομής.
Τώρα, αυτό είναι ένα καλό ευκαιρία να εξετάσουμε
σε ό, τι η τεκμηρίωση μοιάζει.
Node.js είναι τεκμηρίωση.
Όπως PHP Νομίζω ότι είναι πραγματικά πολύ καλή
και ευθεία προς τα εμπρός.
Αν πάω να Node.js και Google και την αναζήτηση για Node.js διαδρομή,
αυτό που θα δείτε συνήθως είναι μια άμεση σύνδεση με μια διεύθυνση URL
ότι έβαλα εδώ πριν από λίγο.
Έτσι / api είναι η επίσημη θέση για να πάει για την τεκμηρίωση.
Και τι θα δούμε στην κορυφή
επίσημα έγγραφα του κόμβου είναι όλα από τις μεθόδους και τις
ή ιδιότητες στο εσωτερικό του η συγκεκριμένη ενότητα,
μία εκ των οποίων ονομάζεται ενταχθούν.
Και ενταχθούν είναι η λειτουργία βοηθού ότι πρόκειται να μου επιτρέψετε
μην ασχοληθείτε με όλα τα πλεονεκτήματα.
Και αυτό έχει το πρόσθετο μπόνους, όπως θα δείτε
από τις αποβάθρες είναι επίσης ομαλοποιεί την προκύπτουσα διαδρομή.
Έτσι, εάν ο χρήστης ή έχετε κουκκίδες ή κουκίδες dot ή οποιοσδήποτε συνδυασμός
αυτά τα είδη των σχετικών μονοπάτια, μεταξύ των upsides
της εντάχθηκαν μεθόδου είναι ότι πρόκειται να καθαρίσει όλα αυτά μέχρι
και να σας δώσει μια κανονική διαδρομή χωρίς οποιαδήποτε
αυτών των στιγμών ή κουκίδες dot.
Έτσι, αυτό είναι ένα καλό πράγμα γενικά για την ασφάλεια τουλάχιστον
αν τον έλεγχο της επιστρέφει τιμή η οποία δεν είμαι
σε αυτή τη συγκεκριμένη απλή περίπτωση.
Αλλά εγώ δεν θέλουν να το χρησιμοποιήσουν.
Έτσι, μπορώ τώρα να δημιουργήσετε τη διαδρομή α λίγο περισσότερο προγραμματισμό
με path.join αντί Πρώτες της συνένωσης.
Έτσι, αυτό είναι λίγο καθαρότερα από ό, τι πριν.
Και σήμερα παρατηρούμε ότι είμαι ένας λίγο πιο έξυπνο και όχι
ό, τι ακριβώς τυφλά προσπαθήσει να διαβάσει το αρχείο,
Πάω να πραγματικά καλέστε fs.stat.
Έτσι, αν είστε εξοικειωμένοι
με χαμηλό επίπεδο C λειτουργίες και C, ακόμα και PHP.
Πολλές βιβλιοθήκες έχουν επιστρέφει stat αυτή η λειτουργία
ουσιαστικά στατιστικές σε ένα αρχείο, το μέγεθος του αρχείου,
τα δικαιώματα, το όνομα και τέτοια πράγματα,
και επίσης έμμεσα, αν το αρχείο υπάρχει ή όχι,
και αν είναι ένα αρχείο ή κατάλογο
ή συμβολική σύνδεση ή κάτι άλλο.
Έτσι, σήμερα παρατηρούμε ότι, είμαι καλώντας fs.stat.
Και στη συνέχεια, προφανώς, σύμφωνα για την τεκμηρίωση,
Θα πρέπει να πάρετε πίσω στο αντικείμενο Σφάλμα
ή Null ακολούθησε με αντικείμενο τα στατιστικά.
Αλλά ας ελέγξει αυτό, node.js.fs.
Εδώ είναι το αρχείο τεκμηρίωση του συστήματος.
Επιτρέψτε μου να κοιτάξουμε για τα στατιστικά.
Υπάρχουν πολλά περισσότερα των λειτουργιών εδώ.
Ωχ, ότι stat συγχρονισμού, fs.stat.
Έτσι, εδώ, είναι ασύγχρονη Στατιστικά (2).
Αυτό είναι που σημαίνει ότι αν έχετε θυμούνται από τις κύριες σελίδες,
κεφάλαιο 2 της κύριας σελίδας,
αυτό σημαίνει ότι αυτό είναι κυριολεκτικά απλά μια εφαρμογή κόμβο
του χαμηλού επιπέδου stat λειτουργία του συστήματος.
Έτσι, η επιστροφή κλήσης παίρνει δύο επιχειρήματα, λάθος και stat
όπου stat είναι fs.stats αντιρρήσεις.
Ας δούμε λοιπόν τι είναι αυτό το αντικείμενο υποτίθεται για να μοιάσει.
Ας κάνουμε κλικ στην υπερ-σύνδεση και βλέπω ότι.
Το αντικείμενο περιέχει στατιστικά προφανώς κάποια μέθοδος βοηθός,
είναι αρχείο, είναι κατάλογος, είναι ένα σωρό άλλα πράγματα.
Είναι το "είναι" το αρχείο που με νοιάζει περίπου στη συγκεκριμένη περίπτωση.
Έτσι, εδώ θα πάω.
Αν υπήρχε κάποιο σφάλμα, τότε επιτρέψτε μου να διασώσει αυτή τη φορά
και να αναλάβει.
Αν υπάρχει ένα λάθος, ήταν πιθανώς ένα αρχείο 404 δεν βρέθηκε.
Θα μπορούσε να είναι κάτι άλλο
αλλά είμαι είναι λίγο τεμπέλης εδώ μόνο για να επικεντρωθεί
σχετικά με τις πιο ενδιαφέρουσες λεπτομέρειες.
Αλλά για το χρήστη σκοπούς, το αρχείο δεν βρεθεί,
αν υπήρχε κάποιο σφάλμα δηλώνοντας το αρχείο.
Σε αντίθετη περίπτωση, επιτρέψτε μου να ελέγξει εάν η το αρχείο είναι πράγματι ένα πραγματικό αρχείο.
Έτσι, αν δεν είναι αρχείο, υπάρχει.
Υπάρχει κάτι εκεί, αλλά είναι πιθανώς ένας κατάλογος
ή ίσως ένας συμβολικός δεσμός
ή κάτι άλλο που είναι funky στο σύστημα αρχείων.
Είτε έτσι είτε αλλιώς, ο χρήστης Δεν πρέπει να το δούμε.
Έτσι τώρα, είμαι απλώς πρόκειται να φτύνουν
έξω συμβατικά μη εξουσιοδοτημένη 403.
Αλλά και πάλι απλά μια σύμβαση,
Θα μπορούσε να χρησιμοποιήσει κάτι άλλο στη θεωρία.
Και στη συνέχεια, τέλος, επιτρέψτε μου να προσπαθήσει να διαβάσει το αρχείο.
Έτσι, επιτρέψτε μου να μετακινηθείτε προς τα κάτω.
Και σήμερα παρατηρούμε ότι αυτό είναι όπου ο κώδικας μπορεί να πάρει λίγο ακατάστατο,
παρατηρήσετε ότι είμαι καλώντας fs.readFile πέρασμα
στον ίδιο δρόμο, το ίδιο επανάκλησης όπως την τελευταία φορά,
έτσι ώστε η προηγούμενη έκδοση.
Και τότε, αν είχα βρει -
αν δεν το βρείτε, Θα φτύσει 500.
Και αν δεν το βρει, τι γραμμή θα πάμε να δούμε εδώ;
Εμείς πάμε να δούμε τα fs γραφτεί κεφαλίδα 200 κατά πάσα πιθανότητα
και res.end αποστολή τα πραγματικά δεδομένα.
Αλλά παρατηρήσετε αυτό.
Και αυτό δεν είναι εκδηλωτικός το σενάριο χειρότερης περίπτωσης.
Αλλά έχω αυτή την κλήση stat εδώ από ό, τι έχω κάποια πράγματα.
Στη συνέχεια, έχω ένα άλλο ασύγχρονη κλήση εδώ,
τόσο πιο εσοχή.
Έτσι, ακριβώς το είδος της προεκτείνουν αν μπορούσε από εδώ.
Τι πρόβλημα τείνει να προκύψει με η γλώσσα, όπως JavaScript
σε αυτό το περιβάλλον, όπου δεν έχετε τιμές επιστροφής
αλλά μάλλον έχετε αυτές οπισθοκλήσεων.
Και φυσικά, αυτό είναι μόνο μια υφολογική πράγμα το γεγονός
ότι έχω κρατήσει εσοχή.
Αλλά το κάνουν αυτό για το λογικό επόμενο βήμα.
Ας υποθέσουμε ότι υπήρχαν μία ή δύο ή τρεις άλλες λειτουργίες
ότι έπρεπε να εκτελέσει ότι ήταν από τη φύση ασύγχρονη,
και ως εκ τούτου ακριβώς το είδος του κρατήσει εσοχή για να τους χειριστεί,
να τα χειριστεί, να τους χειριστεί.
Μπορείτε να πάρετε το είδος της επανάκλησης κόλαση όπως αποκαλούν
όπου κωδικό σας αρχίζει να πάρει πολύ μεγάλη
και ειλικρινά πολύ δύσκολο να διαβαστεί.
Όπως είναι, μπορώ να είδος βίας πω ότι αυτό είναι το είδος της μια ροή
που έχει αυτό το είδος
από στυλιστικά γωνία πράγμα που συμβαίνει εδώ.
Έτσι, αυτό δεν είναι ιδανικό, διότι Αυτό μπορεί πολύ γρήγορα να γίνει
δυσκίνητο, παρότι δύο ασύγχρονη δεν ζητά
μια τέτοια μεγάλη υπόθεση.
Έτσι, θα μπορούσαμε να αποφύγουμε αυτό, σωστά;
Μπορεί να έχετε είδαμε ότι I misclicked πριν από λίγο.
Στην τεκμηρίωση, ξέρετε, φαίνεται σαν να υπάρχει statSync.
Και statSync δεν λαμβάνει επανάκλησης ως επιχείρημα.
Παίρνει ακριβώς το δρόμο, διότι κάνει προφανώς αυτό;
Επιστρέφει ένα στιγμιότυπο των fs.stats.
Έτσι, αυτό μπορεί να σας πρώτο ένστικτο, σωστά;
Ειδικά αν λειτουργιών επανάκλησης
και Asynchronicity είναι μια μικρή νέα σε σας, ειλικρινά,
η πιο απλή προσέγγιση είναι μάλλον Απλά αποφύγετε το πρόβλημα όλων
μαζί, πάμε πίσω για να ταξινομήσετε του προγραμματισμού στυλ CS101
όπου μπορείτε να καλέσετε τη λειτουργία ή μέθοδος, επιστρέφει την τιμή,
καλέσετε τη λειτουργία, επιστρέφει η τιμή,
λειτουργία, επιστρέφει την τιμή.
Και θα μπορούσα να χρησιμοποιήσω ως εκ τούτου, fs.statSync
η οποία είναι κυριολεκτικά η ίδια αλλά είναι μια σύγχρονη εκδοχή
που σημαίνει ότι επιστρέφει η τιμή.
Δεν έχει περάσει μια αξία σε επανάκλησης.
Αλλά γιατί θα ήταν αυτό πιθανότατα να είναι μια αναντίστοιχο λύση να καταφύγουν
στις σύγχρονες λειτουργίες;
Ναι;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Ακριβώς, αυτό παίρνει πολύ χρόνο.
Είστε ακριβώς επιβράδυνση πάντα προς τα κάτω.
Επειδή σαν Shake Shack ή Tasty Burger, αν ξεφορτώθηκε
αυτών buzzers και κάνατε, ο πελάτης σταθεί στο μπροστινό
της γραμμής μέχρι το φαγητό σας είναι έτοιμο ακόμη και πριν από τη λήψη της παραγγελίας
του προσώπου πίσω που προφανώς
μέσω της πώλησης επιβραδύνει.
Οι άνθρωποι αρχίζουν να εξέρχονται, Σας είδος επιστήσει πακέτων.
Μπορείτε να κάνετε οποιοδήποτε αριθμό αναλογίες εδώ.
Αλλά με λίγα λόγια, είναι μάλλον δεν είναι καλό πράγμα
για επαγγελματικούς λόγους ή για το διακομιστή.
Έτσι κώδικα ασύγχρονης είναι συνήθως καλά τουλάχιστον
στην περίπτωση αυτή, αλλά σίγουρα αρχίζει να προκαλέσει κάποια αγωνία.
Και στην πραγματικότητα, τολμώ να πω, όταν πρώτα να γράψω αυτό το υλικό,
αυτό θα πάρει λίγο λίγο να συνηθίσει.
Έτσι, ας αρχίσουμε να εξοπλίσει σας με κάποιες βιβλιοθήκες
και τεχνικές για να κάνουν αυτό είναι λίγο πιο εύκολο.
Έτσι, ένα από τα πιο κοινά βιβλιοθήκες είναι δημοφιλείς βιβλιοθήκες
Αυτές τις μέρες, αυτό ένα ονομάζεται async.js.
Και όπως και πολλά Node.js βιβλιοθήκες ή ενότητες,
όλα αυτά είναι open source.
Σχεδόν όλοι ζουν και να πάρει αποθετήρια hub το οποίο είναι το είδος
του να γίνει ο de facto μέρος για να αποθηκεύσετε αυτά τα πράγματα.
Και τότε υπάρχει ένα σύνολο της υποδομής
για την εγκατάσταση αυτά τα πράγματα ονομάζεται NPM, Κόμβος Package Manager
το οποίο αν είστε εξοικειωμένοι με EvanTube είναι το είδος
σαν app ή app πάρει.
Εάν είστε εξοικειωμένοι με το Red Hat και Fedora
όπως στη συσκευή, Είναι σαν yum.
Αλλά είναι ένας κόμβος - είναι ένα διαχειριστή πακέτων μόνο
για το συγκεκριμένο περιβάλλον.
Έτσι, μπορούμε να κατεβάσετε και να εγκαταστήσετε πράγματα, όπως τη βιβλιοθήκη async
καθώς επίσης και ένα άλλο που ονομάζεται υπογραμμίζουν τη βιβλιοθήκη ή τη μονάδα.
Αλλά αυτές όσο fs, HTTP, τη διαδρομή,
αυτά είναι όλα έρχονται ενσωματωμένη σε κόμβο.
Έτσι, αν πάμε στα docs API, θα δείτε ότι στην πραγματικότητα χτίστηκε
σε κόμβο μπορείτε να πάρετε δωρεάν ένα σωρό modules.
Αλλά πολλά ωραία άτομα με το Διαδίκτυο έχουν κάνει δεκάδες
αν όχι εκατοντάδες άλλες βιβλιοθήκες
για να κάνουμε τα πράγματα καλύτερα ή αλλιώς.
Έτσι, ας ρίξουμε μια ματιά στο πώς λειτουργεί αυτή η βιβλιοθήκη.
Έτσι, το μεγαλύτερο μέρος αυτού του κώδικα είναι πανομοιότυπο προς το παρόν.
Έχω μια διαδρομή που είναι δημιουργούνται επάνω στην κορυφή.
Και τώρα είμαι καλώντας async.series.
Έτσι, η βιβλιοθήκη ασύγχρονη, είναι απλά μια βιβλιοθήκη που σας επιτρέπει
να περάσει ή να αυξήσει τυπικά λειτουργίες για να ονομάζεται ένα
μετά το άλλο ακριβώς το είδος της αποφύγετε αυτό το ζήτημα εσοχή,
και πραγματικά μόνο η ψυχική άγχος που θα προκύψουν πάντα
τουλάχιστον κατά την πρώτη βουτήξει σε αυτό για τη δική σας
με τον προγραμματισμό ασύγχρονα.
Όπως και στην άκρη, αν έχετε πάρει 161 και έχετε ασχοληθεί με κλειδαριές
και να αυξήσει τις συνθήκες και όλα της, κώδικα ασύγχρονης
και ένα περιβάλλον, όπως Node.js είναι στην πραγματικότητα πολύ,
πολύ απλούστερη αναμφισβήτητα
από ό, τι στην πραγματικότητα το γράψιμο πολυνηματική κώδικα.
Οποτεδήποτε έχετε πολυνηματική κώδικα,
έχετε συνθήκες raise.
Θα πρέπει να ανησυχείτε για δύο νήματα που περιέχουν
για τους ίδιους πόρους δίσκο ή τη μνήμη.
Η ομορφιά της JavaScript
σε Node.js είναι ότι υπάρχει κυριολεκτικά μόνο ένα νήμα,
πράγμα που σημαίνει ότι το πρόγραμμα περιήγησης
ή ο διακομιστής μπορεί μόνο να κάνει ένα πράγμα ταυτόχρονα.
Είναι ακριβώς στο χέρι σας, ο προγραμματιστής
να κρατήσει ένα νοητικό μοντέλο για πώς είδος ουρά τα πράγματα
και να καταλάβω πώς να διατάξει τον κωδικό σας.
Αλλά ποτέ δεν έχετε να ανησυχείτε για να αυξήσει τις συνθήκες
σε αρκετά τον ίδιο τρόπο σε τουλάχιστον με πρώτες κώδικα όπως αυτό.
Έτσι, είναι λίγο δύσκολο να grack εδώ.
Αλλά - Επιτρέψτε μου λοιπόν να ανοίξει οι docs για μια στιγμή.
Η βιβλιοθήκη που async.js παρομοίως είναι πολύ googleable,
ζει στο GitHub repot όπως πολλά από αυτά.
Μην νομίζετε ότι είναι ατελής, δεν είναι.
Επιτρέψτε μου να μετακινηθείτε προς τα κάτω στο Read Me εδώ.
Έτσι, η βιβλιοθήκη async παρέχει ένα σωρό
μεθόδων στο εσωτερικό του.
Για παράδειγμα, υπάρχει μια μέθοδο που ονομάζεται η κάθε μία,
το οποίο αν κάνετε κλικ σε αυτό ακριβώς για να δείτε docs για μια στιγμή,
αυτό είναι μια λειτουργία ή μέθοδος που σας επιτρέπει να κάνετε κάτι
σαν τέσσερις κάθε αλλά παράλληλα.
Είναι όλοι πρόκειται να συμβεί ενδεχομένως παράλληλα.
Και η μέθοδος είναι το καθένα μόνο πρόκειται να επιστρέψει σε σας, όταν όλα
από τις επαναλήψεις έχουν ολοκληρωθεί.
Έτσι, ίσως να συμβεί το ένα μετά το άλλο.
Στην ιδανική περίπτωση, θα συμβεί ουσιαστικά παράλληλα.
Αλλά η μέθοδος δεν σας καλέσουμε.
Δεν buzz σας βομβητής έως ότου όλα
από τα στοιχεία που έχετε επαναλαμβάνεται πάνω έχουν ολοκληρωθεί.
Έτσι, είναι απλά ένα ωραίο τρόπο
αποφυγή χρησιμοποιώντας ένα απλό τέσσερις βρόχο
αλλά στην πραγματικότητα κάνει κάτι ασύγχρονα.
Αλλά τώρα πιο άμεσα που σχετίζονται με αυτό το παράδειγμα,
παρατηρήσετε ότι υπάρχει αυτή η Μέθοδος σειρά.
Και επιτρέψτε μου να σηκώσει ένα απλό κλασσικό παράδειγμα.
Έτσι, η ασύγχρονη βιβλιοθήκες, σειρά μέθοδος παίρνει το όπως υπονοείται
οι αγκύλες στη σειρά.
Ποια είναι τα δεδομένα τύπους των στοιχείων
σε αυτήν την σειρά που βασίζεται σε ένα απλό παράδειγμα;
Αυτή είναι μια σειρά από λειτουργίες.
Έτσι, σε C, θα καλέσετε μπορεί να λειτουργεί με δείκτες.
Στο JavaScript, υπάρχουν περισσότερα σωστά αναφοράς για τις λειτουργίες
ή ανώνυμα λειτουργίες.
Και αυτό σημαίνει απλά, συστοιχίες
Φυσικά παραγγέλλονται από το μηδέν πάνω.
Έτσι, έχουν διατηρηθεί διάταξη με την οποία είναι καλό
για μια σειρά, σειρά αιτία Φυσικά μέσα να κάνουμε κάτι
προκειμένου να μην παράλληλα.
Έτσι, αυτό σημαίνει απλά ότι αυτό λειτουργία θα πάρει εκτελεστεί,
τότε αυτό το ένα, τότε αυτό ένα, αυτό το ένα, τότε αυτό το ένα,
Ωστόσο, πολλοί είναι εκεί
έως ότου τελικά το προαιρετικό επανάκλησης ονομάζεται.
Έτσι, παρατηρούμε το παράδειγμα εδώ.
Και ακόμα κι αν αυτό βιβλιοθήκη είναι ένας τύπος,
Είναι εκπρόσωπος της πολύ κοινό παράδειγμα JavaScript
του χρησιμοποιώντας και πάλι οπισθοκλήσεων.
Έτσι, παρατηρήστε τι κάνετε εδώ.
Στην πρώτη λειτουργία είναι πέρασε μέσω αυτού του πίνακα,
θα ορίζεται ένα ανώνυμο Λειτουργία μόνο με τη λειτουργία.
Αλλά προσέξτε ότι προφανώς σύμφωνα με αυτή την τεκμηρίωση,
ότι η ανώνυμη λειτουργία θα πρέπει να να λάβει ένα επιχείρημα επανάκλησης.
Αυτό πρόκειται να είναι ένας δείκτης ή μια αναφορά σε μια συνάρτηση
ότι θα πρέπει να καλέσετε όταν σας κώδικας είναι έτοιμος να επιστρέψει μια τιμή.
Έτσι και πάλι, σε αντίθεση με μόλις το τυπικά διαδικαστικό προγραμματισμό
Όπου και αν χρησιμοποιείται για την αμέσως επιστρέφουν τιμές
ότι μια διαφορά σε σχέση με χρησιμοποιώντας μια βιβλιοθήκη όπως αυτή
ασύγχρονη προγραμματισμού περισσότερα γενικά, είναι όταν είστε έτοιμοι
να επιστρέψει μια τιμή από μια βάση δεδομένων, από ένα αρχείο,
από αριθμητική έκφρασης, είναι στο χέρι σας
για να καλέσετε τη λειτουργία επανάκλησης.
Και το ωραίο σχετικά με αυτήν τη βιβλιοθήκη
αν διαβάσουμε τα docs πιο προσεκτικά είναι ότι,
αν και μόνο αν το σύνολο των η περιοχή που ονομάζεται οπισθοκλήσεων
χωρίς αντικείμενο λάθους, θα πετύχει το όλο θέμα;
Έτσι με άλλα λόγια, εάν υπάρχουν 2,
εάν υπάρχουν 10 Ανώνυμος λειτουργίες
σε αυτήν την σειρά, ως εκ τούτου σε αυτή τη σειρά,
μόνο αν όλοι τους πετύχει,
θα είναι η τελική προαιρετική επανάκλησης να θεωρηθεί επιτυχημένη;
Αν κάποιος από αυτούς αποτυγχάνει, σε κάθε λειτουργία
αφού δεν θα ακόμη και να εκτελεστεί.
Έτσι, είναι ένας ωραίος τρόπος ταξινόμησης έχουν μια αλυσίδα μαργαρίτα
ότι ματαιώνει πρόωρα αν κάτι πάει στραβά.
Έτσι, για να δείτε αυτό το πλαίσιο, είναι εδώ είναι το πώς μπορούμε να ξανά-εφαρμογή
ότι προηγούμενο πρόγραμμα.
Παίρνω το δρόμο όπως και πριν, έτσι αυτό είναι το εύκολο μέρος.
Μπορώ να αντιγράψω επικολλήσετε αυτόν τον κώδικα σκελετό
από τα έγγραφα που υπάρχουν async.series ανοιχτή παρένθεση,
ανοίξει αγκύλη.
Και σήμερα παρατηρούμε ότι έχω ένα λειτουργία σε αυτό αρχή
του δευτερολέπτου, θα δούμε πού πάμε από αυτό.
Και σήμερα παρατηρούμε, είναι μια λίγο περίπλοκη στην αρχή
αλλά επικεντρώνονται μόνο σε να ευθυγραμμιστεί με τη γραμμή.
Fs.stat σημαίνει να πάρει τα στατιστικά στοιχεία ή τι δεν της συγκεκριμένης διαδρομής.
Καλέστε αυτή επανάκλησης όταν είναι έτοιμο.
Αυτός ο κώδικας είναι η ίδια όπως πριν.
Αν υπάρχει κάποιο σφάλμα, υπάρχει μια διαφορά τώρα.
Και πάλι, το πολύ κοινό παράδειγμα σε Node.js προγραμματισμού είναι
αν κάτι πάει στραβά και επανάκλησης πρέπει να γνωρίζει
ότι κατά συνθήκη, η πρώτη επιχείρημα επανάκλησης πρόκειται
να υπάρχει, αν όλα είναι καλά ή ένα αναφορά σε ένα αντικείμενο λάθους,
κεφάλαιο E. Είναι σαν ένα λάθος τάξη που υπάρχουν σε παγκόσμιο επίπεδο
αλλά περισσότερα για αυτό κάποια άλλη φορά.
Έτσι, με τον τρόπο αυτό, αν υπάρχει μια σφάλμα, ποια είναι η επίπτωση;
Λοιπόν με βάση αυτά που είπε η σειρά κάνει,
είναι αν κάτι πάει λάθος, έχουμε ακριβώς το είδος του θέλουν
να ματαιώσετε τη σειρά ανώνυμων κλήσεων λειτουργίας.
Έτσι, αρκεί για μένα να μόλις επιστρέψει επανάκλησης πέρασμα
στο αντικείμενο λάθους.
Γιατί αν stat έδωσε μου πίσω ένα σφάλμα,
Θα μπορούσε να δημιουργήσει μια νέα Σφάλμα αντικείμενο της δικής μου,
αλλά εγώ δεν ενδιαφέρονται πραγματικά για,
Απλά θέλω να περάσει ανεξάρτητα από το σφάλμα είναι ότι πράγματι συμβεί
έτσι μπορώ να το περάσει σε αυτό το επανάκλησης.
Και ακριβώς για να είναι σαφής, η επιστροφή δεν είναι απολύτως αναγκαίο.
I ουσιαστικά θέλω να κάνω αυτό αλλά ήθελα τώρα μπορώ να "επιστρέψει?
/ / Έτσι ώστε να μη κωδικού εκτελεί ".
Έτσι και πάλι ένα άλλο κοινό σύμβαση σε JavaScript,
ακόμα κι αν δεν είστε να επιστρέψει μια τιμή per se,
θέλετε να περάσετε την τιμή στη λειτουργία επανάκλησης
αλλά στη συνέχεια θέλετε για να σταματήσει η εκτέλεση της
της συνάρτησης είστε σε, το τετριμμένο τρόπο
για να γίνει αυτό είναι απλά να καλέσει να επιστρέψει εδώ.
Αλλά δεν υπάρχει τίποτα λάθος,
εμείς κάνουμε μόνο επανάκλησης επιστροφή λάθος, ακόμη και αν πρόκειται
να επιστρέψει σε απροσδιόριστη αξία.
Εντάξει, αυτό δεν να επιστρέψει μια τιμή πιο πιθανό.
Μόνο που με νοιάζει είναι ένα επιβίβαση περαιτέρω εκτέλεση.
Έτσι, conflation μου από αυτά δύο γραμμές είναι μόνο ένα στιλίστα
στο συνεδριακό μόνο για να έχουν τον αριθμό της γραμμής
Κωδικός Μόλις έγραψα από 2 σε 1.
Λοιπόν, τι άλλο;
Αν δεν υπάρχει ένα λάθος -
στην πραγματικότητα να είναι σαφής Θα μπορούσε επίσης να αποφευχθούν
ότι με τον τρόπο if else.
Αλλά και πάλι, ένας άλλος κοινό παράδειγμα είναι η επιταγή
για τα λάθη σας επάνω στην κορυφή και στη συνέχεια μόλις επιστρέψει αντί να συνεχίσει
με εσοχή κωδικό σας με elses και elses και elses.
Έτσι, αν δεν είναι αρχείο, τώρα, ξέρετε,
Θέλω να το χειριστώ λίγο ειδικά.
Έτσι, εδώ όπως και σε Java ή C + + ή σε μερικές άλλες γλώσσες,
εδώ είναι πώς μπορεί μια υπόσταση αντίρρηση να πληκτρολογήσετε πέρασμα σφάλματος
σε ένα προκαθορισμένο μήνυμα όχι ένα αρχείο
και αυτό είναι μόνο κάπως αυθαίρετη.
Αλλά είμαι σηματοδότησης ένα λάθος δικό μου.
Και τι κάνει αυτό το τελευταίο γραμμή προφανώς σημαίνει;
Όλα είναι καλά.
Αν περάσετε σε null για το παράμετρος σφάλματος, αυτό σημαίνει ότι μόνο
κατά συνθήκη όλα είναι καλά.
Έτσι, αυτό σημαίνει ότι ό, τι λογικά θα συμβεί;
Αν null διέρχεται στο επανάκλησης
που σημαίνει ότι αυτή η ανώνυμη λειτουργία έχει καταφέρει
να το πω έτσι.
Λοιπόν, τι θα πρέπει η σειρά μέθοδος προηγείται και τώρα δεν βασίζονται
στη λεκτική ορισμό μου νωρίτερα;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Μετακίνηση στο επόμενο, έτσι;
Αν είχε επιστρέψει μια μη μηδενική αξία, θα εγκαταλείψετε μόνο
και όχι περισσότερο ανώνυμο συνάρτηση θα καλεστεί.
Αλλά επειδή δεν έχει, τότε αυτό θα πάρει ονομάζεται το επόμενο.
Έτσι, η λογική εδώ είναι λίγο πολύ η ίδια όπως και πριν
και θα δούμε πώς να καθαρίσετε αυτό επάνω περαιτέρω σε μια στιγμή.
Αντιλαμβάνομαι ότι αυτό είναι το είδος της πολύ
να απορροφήσει όλα τα λεκτικά και οπτικά.
Αλλά τώρα παρατηρήσετε, το δεύτερο ανώνυμη συνάρτηση που θέλω
να εκτελέσει σε σειρά είναι να προσπαθήσει να διαβάσει το αρχείο.
Καλέστε αυτή επανάκλησης όταν είστε έτοιμοι.
Αν υπάρχει κάποιο λάθος, απλά σήμα αυτό μέσω της επανάκλησης
έτσι ώστε η υπόλοιπη αυτά τα πράγματα ματαιώνεται.
Αλλιώς null επιστροφής.
Αλλά γιατί είμαι διέρχεται σε δύο επιχειρήματα;
Λοιπόν, αυτή τη φορά, αν διάβασα το αρχείο και να πάρετε πίσω
ως μια μεταβλητή που ονομάζεται δεδομένων,
Δεν θέλω μόνο να δηλώσουν όλα είναι καλά με την επιστροφή null
για το πρώτο επιχείρημα.
Θέλω να επιστρέψω το πραγματικό δεδομένων, όπως το δεύτερο επιχείρημα.
Διότι, αν διάβασα περαιτέρω στην τεκμηρίωση,
παρατηρήσετε αυτό το τελευταίο κομμάτι του κώδικα αγκύλη σημαίνει ότι είναι η
τέλος της σειράς.
Υπήρχαν μόνο δύο ανώνυμες λειτουργίες σε αυτή τη σειρά.
Αν υπήρχε ένα λάθος εδώ, στη συνέχεια, Ξέρω ότι ένας από τους συνδέσμους
σε αυτήν την αλυσίδα έτσι να μιλήσει απέτυχε.
Έτσι με άλλα λόγια, αυτό το σφάλμα πρόκειται να είναι ένα αντικείμενο Σφάλμα
ότι είναι άκυρη, εφόσον κάθε από αυτά τα παιδιά απέτυχε.
Και αν αυτή είναι η περίπτωση, είμαι απλά πρόκειται να διασώσει και να πάω
να πω 400 που σημαίνει αίτηση αποτύχει,
αυτό είναι πολύ γενικό μήνυμα λάθους.
Και στη συνέχεια, Πάω να εκτυπώσετε το μήνυμα λάθους.
Έτσι, δεν είμαι ενοχλεί να είναι σούπερ πρωκτικό αυτή τη φορά,
Είμαι δεν πρόκειται να γίνει διάκριση μεταξύ 500 και 404 και 403,
Είμαι ακριβώς το είδος του τυφλά κύμα το χέρι μου
και να πω κάτι πήγε στραβά.
Αλλά αν τίποτα δεν πήγε στραβά,
Πάω να το στείλω res.end πέρασμα αυτών των δεδομένων.
Τώρα αυτό είναι λίγο αινιγματικό.
Αλλά και πάλι, αν διάβασα την τεκμηρίωση,
το δεύτερο επιχείρημα για να αυτή η τελική, οριστική επανάκλησης,
ο τύπος που εκτελούνται μόνο Μόλις η σειρά γίνεται
εκτέλεσης ή ένα τμήμα εκεί της, αυτό πρόκειται να είναι ένας πίνακας
όλων των δεύτερων επιχειρήματα
που είχαν περάσει στο επανάκλησης.
Τώρα, αποδεικνύεται ότι η μόνο σύνδεση σε αυτή τη σειρά
ότι στην πραγματικότητα να επιστρέψει στο δεύτερο επιχείρημα είναι αυτό εδώ.
Έτσι, Πάω να ταξινομήσετε της σε ένα άλμα της πίστης απλά να χρησιμοποιήσετε υποθέσουμε
για τη στιγμή που τελευταία είναι μια μέθοδος
που σας δίνει την τελευταία στοιχεία ενός πίνακα.
Επειδή αυτή η συστοιχία ότι είναι να περάσει
για μένα έχει δύο Δείκτη Μάζας, μηδέν και ένα.
Είναι απλά το μηδέν δεν έχει καμία αξία επειδή αυτός ο τύπος επιστρέφει -
δεν κατάφερε να περάσει σε μια δεύτερη επιχείρημα, αλλά αυτός ο τύπος κάνει.
Έτσι προκύπτει βραχίονα το μηδέν δεν είναι τίποτα,
Αποτελέσματα σταδιοδρομία σε περιέχει ό, τι,
αν έχετε ακολουθήσει μαζί μέχρι αυτό το σημείο;
Το αρχείο, το γεια σου, κόσμος περιεχόμενο κατά πάσα πιθανότητα,
έτσι αυτό είναι το πώς πραγματικά το εκτυπώσετε.
Και επιτρέψτε μου να τελειώσω μια λεπτομέρεια εδώ.
Αν το κάνω αυτό το είδος των παλαιών το σχολείο, αν θέλω να πάρω
στα τελευταία στοιχεία, αν μπορούσα κάνω αποτελέσματα [results.length-1],
αυτό είναι το είδος της παλιό τρόπο σχολείο
της πρόσβασης των τελευταίων στοιχείων σε - ή μηδενικό πίνακα δείκτη.
Αλλά, όπως στην πλευρά, υπενθυμίζουν ότι είχα αυτή τη βιβλιοθήκη
εδώ υπογράμμισης των οποίων από σύμβαση λέγεται απλώς
κυριολεκτικά ένα χαρακτήρα υπογράμμισης χαρακτήρα που δεν είναι ειδική,
φαίνεται ακριβώς όπως δροσερό σύμβολο του δολαρίου κάνει για jQuery.
Αυτό είναι μόνο ένα βοηθό μέθοδο υπογραμμίζουν dot τελευταία
ότι κάνει ακριβώς το ίδιο πράγμα.
Και αν έχετε χρησιμοποιήσει ποτέ πριν υπογραμμίζουν JS τόσο
για την πλευρά του client κωδικοποίηση
και την πλευρά του διακομιστή είναι μια θαυμάσια χρήσιμο βιβλιοθήκη
ότι, όπως πολλοί άνθρωποι που περιγράφονται αρέσει jQuery περιέχει όλα
από τις μεθόδους, οι άνθρωποι επιθυμούσαν ήρθε με την ίδια JavaScript.
OK.
>> Έτσι, όπως αρκετά για μένα και Έβλεπα στη σειρά,
έχετε σαν επανάκλησης ως επιχείρημα;
Ναι >>.
>> Όπως και όταν πραγματικά όπως push ότι σε,
και σαν αυτό που κάνει σημαίνει ότι όταν έχετε μόνο
όπως επανάκλησης και στη συνέχεια να κάνουμε, όπως -
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
>> Εντάξει, καλή ερώτηση.
Έτσι, επιτρέψτε μου να σηκώσει το async κεντρική σελίδα εδώ
ή η τεκμηρίωση σχετικά με GetHub.
Έτσι αυτή είναι η κανονική δομή.
Αν είστε κλήση χρησιμοποιώντας αυτό συγκεκριμένη σειρά μέθοδο,
υπάρχουν δύο μεγάλα τμήματα σε αυτό.
Ένα είναι μια συστοιχία ανώνυμες λειτουργίες
και τα δύο είναι μια τελική επανάκλησης λειτουργία που είναι πραγματικά
εκτελείται στην πολύ τέλος της σειράς.
Τώρα, αν κάνετε ζουμ σε μια λίγο πιο κοντά στην πρώτη
από αυτά τα μεγάλα πράγματα, ο σειρά από ανώνυμες λειτουργίες
με απαίτηση της παρούσας τεκμηρίωση τύπος έχει
να είναι ένα ανώνυμο λειτουργία που λαμβάνει
σε ένα επιχείρημα που ονομάζεται επανάκλησης ή foo ή bar, δεν έχει σημασία
αλλά αυτός είναι το καλώντας επανάκλησης.
Και αυτό είναι το είδος του βομβητή σας ότι Shake Shack χέρια σας.
Αυτό είναι το μέσο με το οποίο μπορείτε να επιστρέψετε μια τιμή
στον πελάτη, γιατί μπορεί όχι μόνο δεν επιστρέφουν στην κυριολεξία.
Θα πρέπει να το κάνετε τρόπος αυτής της επανάκλησης.
Διότι, αν μέσα σ 'αυτό λειτουργία είναι κάποια αργή λειτουργία
κώδικα, όπως βάση δεδομένων ερωτήματος, διαβάστε το αρχείο από το σύστημα αρχείων,
δεν θέλετε να περιμένετε εκεί και να μπλοκάρει όλους τους άλλους,
που θέλετε να καλέσετε τον επανάκλησης.
Έτσι, αυτό είναι κυριολεκτικά το όνομα του επιχειρήματος.
Αλλά ήθελα σε C, θα έχουν δείκτες συναρτήσεων.
Στην Java που έχετε μέθοδοι σύστημα αναφοράς
και το ίδιο εδώ στις JavaScript.
Αυτή είναι μια μεταβλητή, αλλά τύπου του λειτουργία.
Έτσι απλά γράφοντας το όνομα του αν ένα επανάκλησης ή foo
ή στο μπαρ, στη συνέχεια, ανοίξτε παρένθεση και κοντά παρένθεση,
είστε εκτέλεσης που για τη λειτουργία αυτή.
Και περνώντας μια τιμή null που null σημαίνει σφάλμα και ένα
το οποίο σημαίνει ότι αυτή είναι η δεδομένα που θέλω να περάσει μέσα
Και τότε το κομμάτι να είναι σαφής, αυτό είναι ένα άλλο επανάκλησης.
Και αυτό δεν λέγεται επανάκλησης,
απλά εννοιολογικά είναι μια Λειτουργία μέθοδο επανάκλησης
επειδή αυτό ονομάζεται εξ ορισμού
της βιβλιοθήκης αυτού του συντάκτη, όταν ολόκληρη η σειρά έχει ολοκληρωθεί
ή υποσύνολο αυτού, εάν ένα έχει συμβεί σφάλμα νωρίτερα.
Έτσι, το όνομα του λειτουργία επανάκλησης, καλώντας τη λειτουργία επανάκλησης,
το όνομα της λειτουργίας επανάκλησης, καλώντας τη λειτουργία επανάκλησης,
διαφορετικά επανάκλησης λειτουργούν όλοι μαζί.
>> Έχουμε τώρα σαν καθορίσει επανάκλησης;
>> Όχι, γιατί αυτός ο τύπος θα περάσει σε σειρά σας
ανώνυμων λειτουργίες,
ένα δείκτη με τον κωδικό θέλει να εκτελέσει.
Ακριβώς, εντάξει.
Έτσι, παρακαλούμε να πούμε ότι η Κωδικός παίρνει λίγο πιο απλό.
Έτσι, μπορεί.
Και αν είστε σαν κι εμένα, να λάβει άνεση σε τουλάχιστον γνωρίζουν,
παίρνει λίγο χρόνο για να να το συνηθίσω.
Αλλά μπορούμε να καθαρίσετε αυτό επάνω λίγο,
να μην ρίξει πάρα πολύ στο να σας αλλά εδώ είναι μια άλλη παραλλαγή
και της άλλης μεθόδου
στην ίδια βιβλιοθήκη που ονομάζεται καταρράκτη.
Η άνω πλευρά του οποίου είναι σε αντίθεση με σειρά όπου κάθε
αυτών των ανώνυμων λειτουργίες εκτελούνται κατ 'ουσίαν
ανεξάρτητα από κάθε μία από τις άλλες.
Καταρράκτης, όπως το όνομα προτείνει επιτρέπει στα ανώτατα λειτουργίες
με το είδος της περάσει στις τιμές στην κατώτερη λειτουργία,
είδος του σαν ένα από τρεχούμενο νερό.
Έτσι, η άνω πλευρά αυτού είναι ότι μπορώ να είδος
από χρησιμοποιήσετε αυτό προς όφελός μου.
Σε async.waterfall, παρατηρήσετε τα ακόλουθα.
Μπορώ να πάρω τηλέφωνο fs.stat περνώντας στη διαδρομή
ότι θέλω να πάρω στατιστικές σχετικά.
Και τότε να θυμάστε πριν είχε μια ανώνυμη συνάρτηση
ότι είχε δύο επιχειρήματα σφάλουν,
Αποτελεσματα και στη συνέχεια θα ονομάζεται λειτουργία επανάκλησης με το χέρι;
Με άλλα λόγια είναι ακριβώς για να είναι σαφές, υπενθυμίζουν ότι νωρίτερα
στην ασύγχρονη 2, έκανα όλα από αυτό το δυσάρεστο έργο.
Κάλεσα fs.stat πέρασε P,
δηλωθεί το δικό μου ανώνυμα λειτουργία.
Στη συνέχεια ελέγχεται αν το σφάλμα είναι null, τότε δεν το έκανα αυτό,
αλλιώς το έκανα αυτό, το σύνολο του ομορφιά ακόλουθες συμβάσεις
όπως και σε Node.js είναι ότι επανάκλησης Οι λειτουργίες σε γενικές γραμμές σήμαινε
να λάβει τουλάχιστον ένα επιχείρημα, ένα αντικείμενο Σφάλμα ακολουθείται από το μηδέν
ή περισσότερο χρήσιμα αξίες.
Έτσι παρατηρήσετε το παράδειγμα εδώ,
αυτή η λειτουργία επανάκλησης είμαι δηλώνοντας ακολουθεί ακριβώς το
παράδειγμα ότι αυτός ο τύπος του βιβλιοθήκη async κάνει.
Ποια είναι να το πω αυτό, γιατί είμαι Έχω την εφαρμογή της δικής μου επανάκλησης
μέθοδο όταν ο συγγραφέας αυτής της βιβλιοθήκη είναι κυριολεκτικά δίνοντας μου
σε μια πιατέλα για να το πω έτσι, ένα επανάκλησης λειτουργία που μπορώ να χρησιμοποιήσω;
Έτσι, μπορώ να περνούν ακριβώς το αναφορά μου είχε δώσει
έτσι ώστε αμέσως, αρκετές γραμμές μου
κώδικα να γίνει μία γραμμή κώδικα.
Τώρα, πού πάμε με αυτό;
Η επόμενη λειτουργία που Θέλω να εκτελέσει,
το επόμενο ανώνυμο λειτουργία αυτού του πίνακα
των λειτουργιών κάνει τα ακόλουθα.
Ανακοίνωση πρώτο stat είναι το πρώτο επιχείρημα.
Έτσι, κάτι που έχει ήδη αλλάξει.
Τώρα, αυτός ο τύπος που έγραψε τη βιβλιοθήκη -
και λέω τύπος γιατί είναι ένας τύπος.
Αυτός ο τύπος που έγραψε ότι αυτή η βιβλιοθήκη είναι εγγυήσεις τεκμηρίωση
ότι, εάν αυτή η λειτουργία εδώ περνάει πίσω μου ένα αντικείμενο Σφάλμα
ή null ακολουθείται από κώμα χωρίζονται λίστα των άλλων αξιών,
θα βεβαιωθείτε ότι οι άλλες τιμές είναι handed
σε αυτή την ανώνυμη συνάρτηση σε σειρά από αριστερά προς τα δεξιά.
Και ό, τι χρησιμοποιείται για να είναι μόνο ένα λειτουργία επανάκλησης και μόνο απλά
γίνεται το τελευταίο τέτοιο επιχείρημα.
Τώρα, δεν ξέρω ποιος είμαι εστιάζοντας σε μόλις ξέρετε.
Αλλά τώρα, ποια είναι η βγάλουμε εδώ;
Έτσι, γνωρίζουμε από η τεκμηρίωση
ή η προηγούμενη μερικά παραδείγματα
fs.stat ότι αναμένει τελικά επανάκλησης με δύο επιχειρήματα,
το αντικείμενο της σφάλμα το οποίο αποτελεί Σφάλμα αντικείμενο ή null ακολουθείται
με αναφορά στα στατιστικά αντιρρήσεις.
Έτσι, αν το σκέφτομαι αυτό, Αντικείμενο Σφάλμα στατιστικά κώμα αντιρρήσεις,
που ταιριάζει στο πρότυπο της βιβλιοθήκης του προσώπου αυτού.
Έτσι, απλά μπορώ να πω, επειδή Εγώ δεν το δεύτερο επιχείρημα
αυτό είναι - αυτό συμβαίνει να περάσει από fs.stat
στο επανάκλησης είναι err, στατιστικά εξ ορισμού αυτής της βιβλιοθήκης,
Μπορώ να βάλω το δεύτερο Όνομα επιχείρημα εδώ
ή ό, τι μπορώ να το μετονομάσετε
αν θέλω ακολουθείται από την επανάκλησης εδώ.
Έτσι, μπορώ να περάσει ένα αξία από εδώ και εδώ.
Τώρα, όλο αυτό τον κωδικό αν ομολογουμένως κάπως αινιγματικά είναι
τουλάχιστον για αντιγραφή επικόλληση το μεγαλύτερο μέρος από πριν.
Η μόνη διαφορά είναι η προκήρυξη εδώ είμαι δηλώνοντας ένα σφάλμα
αντιρρήσεις και τώρα θέλω για να πάρει λίγο περίπλοκη.
Εγώ πραγματικά θέλουν να ξέρουν τι το σφάλμα ήταν, έτσι Πάω
για να χωρέσει μέσα του αυτό το αντικείμενο α ιδιότητα που ονομάζεται αυθαίρετα κώδικα
έτσι ώστε να ξέρω ότι αυτό δεν είναι ένα αρχείο
ότι θα πρέπει να είναι εξουσιοδοτημένη, είναι ένα HTTP 403.
Επιτρέψτε μου να θυμόμαστε ότι πριν από Έχω περάσει το αντικείμενο Σφάλμα
στο επανάκλησης.
Και στη συνέχεια, τέλος, προσπαθώ να διαβάσω το αρχείο, οπότε σε αυτή την περίπτωση,
ο καταρράκτης, έχω σπάσει ο κώδικας από τα δύο μεγάλα βήματα
σε τρία μικρότερα βήματα.
Ανακοίνωση για την ομορφιά εδώ,
Μπορώ να καλέσω fs.readFile περνώντας στη διαδρομή.
Και τότε το δύσκολο μέρος διανοητικά, είναι απλά να περάσει
σε επανάκλησης του άντρα.
Το πράγμα που με έχει παράδοση, είμαι πρόκειται να περάσει fs.readFile.
Επειδή είμαστε όλοι προσκολλημένο με τις ίδιες συμβάσεις,
πρώτο επιχείρημα επανάκλησης είναι ένα αντικείμενο σφάλματος ή null ακολουθείται
από κώμα ή χωρισμένα κατάλογο των χρήσιμων πράγματα.
Λοιπόν, τι σημαίνει τώρα και αν αυτό μου διαβάστε την τεκμηρίωση θα ξέρω
αυτό, η τελευταία επανάκλησης, αυτός ο τύπος εδώ έξω
από τις αγκύλες πρόκειται να περάσει στο αντικείμενο λάθους
ή null που θα πρέπει να ελέγξετε για όπως πάντα με αυτόν τον κώδικα εδώ.
Και στη συνέχεια με τον ορισμό αυτής της μεθόδου
στην τεκμηρίωση του άντρα, η τελευταία τιμή που επιστρέφεται
από την τελευταία μέθοδο ανώνυμα σειρά μου -
σειρά μου ανώνυμων λειτουργίες.
Έτσι, ό, τι δεν διαβάζει επιστροφή αρχείο
και είμαι χρησιμοποιώντας μια επιστροφή χαλαρά τώρα.
Θέλω να πω τι δεν διαβάζει πάσα αρχείο ως επιχειρήματα
με τη μέθοδο επανάκλησης χέρια του;
Δύο επιχειρήματα, είναι η πρώτη ένα αντικείμενο σφάλματος ή μηδενική,
αυτό είναι σχεδόν πάντα πρόκειται να είναι η απάντηση.
Και το δεύτερο πράγμα που θα να είναι αυτό για το αρχείο ανάγνωσης;
Τα περιεχόμενα του αρχείου, δεδομένων, όπως το ονομάσαμε νωρίτερα.
Έτσι, απλά δηλώνοντας err, ως αποτέλεσμα,
και ελέγξτε για αυτό το σφάλμα είναι είδος βαρετό τώρα.
Αλλιώς, κάνω res.end περνώντας σε αυτό το αποτέλεσμα.
Αυτό αναμφίβολα θα δεν συγχρονίζεται τέλεια
μέχρι που πραγματικά γράφουν οι ίδιοι.
Αλλά για τώρα, να λάβει μακριά τουλάχιστον το γεγονός
ότι υπάρχει προφανώς αυτό κοινό παράδειγμα, σύμφωνα με την οποία αν
και τους συντάκτες των βιβλιοθηκών όλο το είδος των stick
με την παρούσα σύμβαση μεθόδων επανάκλησης.
Και το πρώτο επιχείρημα είναι ένα αντικείμενο σφάλματος ή null.
Και η δεύτερη και τρίτη
και το τέταρτο αντικείμενα είναι τα πράγματα νοιαζόμαστε για και εμείς είδος
της ακολουθούν τους κανόνες και τεκμηρίωση.
Ξεκινήσαμε με τον κωδικό που ειλικρινά είναι πολύ άσχημο.
Και παρόλο που η πλέον πρόσφατη παράδειγμα είναι ειλικρινά είδος σκληρού
για να τυλίξουν το μυαλό σας γύρω, είναι τουλάχιστον οπτικά,
μοιάζει να είναι πολύ αυστηρότεροι.
Και τη στιγμή που θα πάρει άνετα με αυτό, είναι τόσο πολύ πιο εύκολο
και είναι πολύ λιγότερο επιρρεπείς σε σφάλματα από αυτό το προηγούμενο παράδειγμα.
Έτσι, επιτρέψτε μου να αποδείξει ένα τελευταίο πράγμα εδώ.
Αυτή είναι η έκδοση των τριών.
Και - Όχι, ας αφήσουμε αυτό μόνο.
Επιτρέψτε μου να πάω σε μια-δυο άλλα πράγματα, όπως το τελευταίο teasers.
Εντάξει, έτσι ώστε στον εξυπηρετητή 2.
OK. Πρώτον, οποιεσδήποτε ερωτήσεις, Ξέρω ότι αυτό είναι ένα πολύ
αλλά θα ήθελε περισσότερα οδηγίες, έτσι;
Δεν είπατε καλό διδασκαλίας είναι απαραίτητα.
Ναι;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Σωστό, είστε ουσιαστικά επιεικής με το λειτουργικό σύστημα
να καταλάβω πώς να κάνει ταχυδακτυλουργίες όλες αυτές τις μπάλες ταυτόχρονα,
ανάγνωση από ένα αρχείο, ανάγνωση από μια βάση δεδομένων.
Και είναι αυτό το διακομιστή JavaScript η ίδια που είναι ενιαία σπείρωμα.
Και στην ουσία και στην πραγματικότητα,
υπάρχει μία εικόνα Εγώ δεν κάνω εμετό,
και δεν είναι κατ 'ανάγκην όλα αυτά διαφωτιστικό
αλλά ίσως θα σας δώσουμε Είσαι ένα νοητικό μοντέλο.
JavaScript ίδιο και ο κόμβος
ειδικότερα, έχει αυτό το λεγόμενη βρόχο εκδήλωση.
Σύμφωνα με την οποία, μπορείτε να σκεφτείτε των Node.js, το πρόγραμμα,
Είναι κυριολεκτικά σαν ένα άπειρο βρόχο.
Είναι απλά ένα άγριο βρόχο, περιμένοντας και περιμένει και περιμένει,
ψάχνει για εργασίες για να ολοκληρωθεί.
Και το έργο θα μπορούσε να, πηγαίνετε φέρω κάτι από μια βάση δεδομένων
ή εδώ είναι μια τιμή από το βάση δεδομένων ή να πάτε να πάρετε αυτό το αρχείο
από το δίσκο ή εδώ είναι ένα να ζητήσει από τον χρήστη.
Κάθε είδος της εκδήλωσης, όπως ακριβώς η εκδήλωση browsers οδηγείται,
έτσι ώστε ο διακομιστής side event οδηγείται.
Και κανένα από αυτά τα πράγματα αποτελούν γεγονότα.
Ετσι, κάποιος στο Node.js, απλά έγραψε ένα άπειρο βρόχο,
ένα μεγάλο άγριο βρόχο, περιμένοντας για πράγματα για να συμβεί αυτό.
Και καθώς τα πράγματα δεν συμβεί αυτό, καταλήγει σε μια ουρά, έτσι δεν είναι;
Βεβαίως, μια βάση δεδομένων μπορεί να επιστρέψει μια τιμή.
Και ένα σύστημα αρχείων, το λειτουργικό σύστημα μπορεί να επιστρέψει μια τιμή
περίπου στο ίδιο χρονικό διάστημα αλλά εκεί κατά πάσα πιθανότητα θα
να είναι κάποια παραγγελία σε αυτούς.
Και Node.js πρόκειται να έχουν ουσιαστικά μια ουρά
σαν ένα μεγάλο πίνακα ή ένα φορέα, κάποια δομή δεδομένων
ότι προσκρουστήρες όλα από αυτά τα πράγματα.
Επειδή μπορεί κυριολεκτικά μόνο χειριστεί ένας από αυτούς σε μια στιγμή.
Έτσι, όταν εσείς, ο κύριος του έργου,
γραπτώς ασύγχρονη JavaScript κώδικα χρησιμοποιώντας ασύγχρονη
λειτουργία, είστε επιτρέπει αυτό λεγόμενη βρόχο εκδήλωση για να πάει
στην επόμενη τσιμπούρι, σωστά;
Έτσι, εφ 'όσον μπορείτε αμέσως επιστρέψει, όπως όλα
από αυτές τις μεθόδους ασύγχρονης μου αρέσει το αρχείο ανάγνωσης και stat,
επιστρέφουν αμέσως επειδή η επανάκληση τελικά
παίρνει πίσω.
Μόλις επιστρέψετε,
αυτό σημαίνει ότι κάποιος άλλος δεν μπορεί να σκάσει από το απόθεμα εδώ
ή ότι μπορεί να σκάσει μακριά μπροστά από την ουρά εδώ.
Και έτσι, δεν υπάρχει στο Πράγματι, η σειριοποίησης
από ό, τι συμβαίνει,
ακόμη και αν όλα αυτά τα πράγματα μπορεί να συμβαίνουν ταυτόχρονα
σε μια πολυνηματική σύστημα.
Αλλά η ίδια και Node.js ο διακομιστής έτρεχαν
ως ένα νήμα.
Και η κάτω πλευρά του που είναι t δεν πρέπει απαραίτητα να max
από τον υπολογιστή σας ικανότητα είναι τόσο ιδιαίτερα
αν έχετε ένα 16 πυρήνα ή ακόμη και ένα 2 πυρήνα του υπολογιστή
και είστε απλά τρέχει ένα παράδειγμα του κόμβου.
Αλλά αν έχετε και πάλι λαμβάνονται κάτι σαν 161,
μπορείτε να αποφύγετε ένα τεράστιο εφιάλτη των πονοκεφάλων, όταν πρόκειται
να συναγωνιστεί τους όρους και κλειδαριές και σηματοφόρος
και γράφοντας πραγματικά το πολυνηματική κώδικα,
έτσι upsides και μειονεκτήματα.
OK. Έτσι, πίσω από τον κωδικό εδώ, επιτρέψτε μου να προτείνω να ξεκινήσετε
να απλοποιήσει τα πράγματα λίγο.
Είδαμε ένα διακομιστή λίγο Πριν το οποίο έμοιαζε με αυτό.
Έτσι, αυτό είναι αναμφισβήτητα αρκετά απλή.
Αλλά ακριβώς όπως και στον κόσμο της PHP, υπάρχουν πλαίσια
όπως Laravel και υπάρχει πράγματα όπως Rails και Django,
ίδιο πράγμα στον κόσμο Node.js.
Και εμείς θα δαπανήσουν περισσότερα χρόνο σε αυτό την Τετάρτη
και στο επόμενο έργο.
Αλλά αν πάω σε ένα 2 εξυπηρετητή καταλόγου,
παρατηρήσετε ένα ζευγάρι παραδείγματα εδώ.
Έτσι, αυτό είναι - εκεί θα να είναι ένα ισοδύναμο παράδειγμα
αλλά αυτό είναι με τη χρήση ενός πλαισίου με την ονομασία express.js,
το οποίο είναι δωρεάν open source λογισμικό όπως Rails και Django,
όπως Laravel, αυτό είναι ακριβώς τελικά θα
να είναι παραγνωρισμένη σήμερα «Αιτία που έχουμε γράψει
όπως απλά παραδείγματα.
Αλλά μας εμπιστεύονται.
Αυτό θα είναι πολύ γρήγορα γίνει φίλος σας
επειδή θα γλιτώσεις Είστε πολύ κώδικα TDS.
Και ένα κοινό πρότυπο για την μια express.js εφαρμογή είναι
να έχουν μια app.js ή server.js αρχείο το οποίο περιέχει τη λογική
του προγράμματός σας ή σε τουλάχιστον το σημείο εισόδου.
Μπορείτε να έχετε πολλαπλά αρχεία.
Ένας κόμβος ενότητα υποκατάλογο η οποία έχει τις βιβλιοθήκες
ότι έχετε κατεβάσει όπως async
και να εκφραστεί σε άλλες.
Και τότε package.json, package.json μοιάζει με αυτό,
και μπορείτε να το δημιουργήσετε με μη αυτόματο ή εργαλεία να δημιουργήσουμε για εσάς
και είναι κυριολεκτικά ένα αρχείο json
και το ενδιαφέρον μέρος είναι οι εξαρτήσεις εδώ.
Ακριβώς όπως και στην Laravel, σας είχε αυτόν τον κατάλογο πωλητή
και θα έπρεπε να ανησυχούν σχετικά με τα πακέτα και να κάνει -
στην πραγματικότητα ενημέρωση με Artisan ή παρόμοιες εντολές,
οι βιβλιοθήκες σας έχουν εγκατασταθεί,
παρόμοια με package.json εδώ και τη διαχείριση των βιβλιοθηκών
και οι εκδόσεις ότι σας ενδιαφέρουν.
Έτσι, αν έχω μια package.json, Θα ήθελα απλώς να κάνω NPM,
Κόμβος Package Manger εγκατάσταση, πρόκειται να δούμε αυτόματα
σε αυτό το αρχείο package.json.
Εξετάσουμε και να δούμε, μπορώ να έχετε την τελευταία έκδοση
όλων των ενοτήτων πωλητές
σε έναν κόμβο υπογραμμίζουν ενότητες κατάλογο εδώ ή ίσως
σε κάποιο γονέα ή Κατάλογος πρόγονο.
Και αν όχι, είναι πρόκειται να τους κατεβάσετε
και θα δείτε ένα σωρό
πράγματα θα HTTP σε όλη την σύρμα.
Έτσι, για παράδειγμα, επιτρέψτε μου να να σας δείξει τα περιεχόμενα
ενοτήτων κόμβου μόνο για να εκφράσουν.
Επιτρέψτε μου να προχωρήσει και τόλμη να διαγράφουν μονάδες κόμβου
έτσι ώστε το μόνο που έχω τώρα είναι αυτό.
Και αν το κάνω NPM εγκατάσταση, θα είστε δείτε ότι πρόκειται να διαβάσετε
ότι το αρχείο package.json και έχουμε δει έξοδο παρόμοια
σε αυτό τον κόσμο Laravel.
Είναι το κατέβασμα μια ολόκληρη σωρό πράγματα και αυτό είναι
επειδή express με τη σειρά του εξαρτάται από ένα σωρό
άλλων λαών βιβλιοθήκες.
Έτσι, όλα αυτά είναι το είδος του να κατεβάσει αναδρομικά.
Μέχρι τώρα, αν το κάνω σε LS και πάλι,
υπάρχει ενότητες κόμβο μου πίσω κατάλογο
και να εκφράσουν και πίσω.
Έτσι είναι απλά ένας τρόπος απλοποίηση της διαχείρισης του πακέτου.
Τώρα, αν κοιτάξουμε το app.js αρχείο, αυτό θα
να είναι μια επαναφορά σε νωρίτερο web server μας
όπου μόλις σούβλα out "Hello, World".
Αλλά παρατηρήσετε τα παραδείγματα εδώ,
Πρώτα θα απαιτείται η ρητή μονάδα, τότε έχουμε αυτή τη γραμμή
του κώδικα που ξέρετε από την τεκμηρίωση.
Μπορείτε κυριολεκτικά τη θεραπεία που μεταβλητής μονάδας ως μια συνάρτηση,
τόσο ανοιχτό κλείσιμο παρένθεση παρένθεση σημαίνει το εκτελέσει.
Αυτό πρόκειται να φαινομενικά επιστρέψω κάτι θα πάμε
γενικά ζητούν μια εφαρμογή.
Πώς λειτουργεί;
Εγώ δεν ξέρω πραγματικά.
Θα σας αφήσω κάποιον άλλο, ξέρετε, την ρητή κόσμο γράφουν ότι.
Πάω τώρα να σταθεί στο ώμους του ή της, έτσι ώστε
να κάνετε την αίτησή μου τρέχει λίγο πιο απλό.
Εδώ, Πάω να ακούσετε για τη συγκεκριμένη θύρα
ότι θα μπορούσε να είναι κάτι πιο.
Και εδώ είναι ο κωδικός που είναι ίσως και περισσότερο θυμίζει τώρα
της Laravel και routes.php.
Έτσι, αυτό είναι απλό δείπνο, είμαι ακριβώς πρόκειται να καθορίσετε μια διαδρομή
για κάθετο αστέρι, έτσι ώστε τα πάντα πρόκειται να απορροφηθεί
από αυτό το αίτημα χειριστή.
Το παράδειγμα για το αίτημα χειρισμού είναι ανώνυμη συνάρτηση της
με το επιχείρημα αίτημα
και ένα αντικείμενο ανταπόκριση ακριβώς όπως πριν.
Και res.send σε ρητή μέσα μπορείτε να στείλετε τον κωδικό που ακολουθείται
από ό, τι θέλετε να στείλετε.
Και φυσικά, μπορείτε να κάνουμε κάτι εκτροφέα
από την πραγματικότητα αποστολή αρχεία ή HTML
ή δημιουργούνται δυναμικά περιεχόμενο.
Αλλά για τώρα, το μόνο που κάναμε είχε φτύσει γειά σου, τον κόσμο.
Αν πάμε σε εξυπηρετητή τρεις, Αυτό είναι ακόμη πιο φανταχτερά μόνο
να σας δείξω κάποια λειτουργικότητα.
Και θα σας μέρος ενός show ακόμα πιο σέξι εκδοχή
αυτό την Τετάρτη.
Αλλά αν έχετε ακούσει ποτέ του Socket IO ίσως,
έτσι όπως νομίζω Jonathan ή κάποιος είπε νωρίτερα,
ένα από τα πράγματα κόμβος είναι πραγματικά γνωστή
για είναι σε πραγματικό χρόνο της συμπεριφορά, έτσι δεν είναι;
Σκεφτείτε PHP σε MySQL, αν ήταν να εφαρμόσουν ένα διακομιστή συνομιλίας
σε PHP με την οποία δύο άνθρωποι θα μπορούσαν ανοίξετε ένα παράθυρο του προγράμματος περιήγησης στο foo.com
και στη συνέχεια να αρχίσουν IMing κάθε άλλων, Alice σε ένα παράθυρο,
Bob σε ένα άλλο, έτσι ώστε το καθένα από αυτά βλέπει τις δικές του
ή τα μηνύματά της σε το παράθυρο του άλλου.
Πώς θα το κάνετε αυτό σε PHP και MySQL;
Χρήση ή μη χρήση Laravel ταξινόμησης των άυλων, μπορείτε να έχετε
όπως ένα αρχείο index.php.
Και έχεις να έχετε - σε Σε ορισμένες περιπτώσεις είναι να έχεις φτύσει
έξω από τη μορφή, οπότε δεν υπάρχει πρόκειται να είναι μια μορφή HTML
ότι πιθανόν να μην υποστηρίζει μέσω της κανονικής υποβολής φόρμας
αλλά μάλλον Ajax, σωστά;
Έτσι, ένα για να υποβάλουν χειριστή, έτσι πληκτρολογείτε σε ένα πεδίο κειμένου,
πατήσετε enter και στη συνέχεια να παίρνει αποστέλλονται στο διακομιστή μέσω Ajax.
Τι να κάνετε στη συνέχεια, κάνει στο διακομιστή;
Έτσι, έχετε index.php
ή κάτι dot PHP που είναι έλαβε στην παράμετρο HTTP
από τον χρήστη, Alice ή του Bob άμεσων μηνυμάτων, τι κάνετε
με αυτό, ώστε να το πολλαπλασιάσουν στο Bob ή Alice, αντίστοιχα;
Εσένα εννοώ κυριολεκτικά έχουν τα εργαλεία με τα οποία
να το κάνετε αυτό σε λεπτά σας.
Έτσι, όπως τι θα κάνατε;
Έχετε ένα λεπτό για να υλοποίηση αυτού του προγράμματος.
Ναι;
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Τέλεια. Σωστά, έτσι έχεις μια βάση δεδομένων.
Γνωρίζουμε λίγο bit για την MySQL.
Έτσι, έχετε ένα τραπέζι αυτό είναι τα μηνύματα,
ίσως υπάρχει φορές σφραγίδα, ένα αναγνωριστικό χρήστη,
το σώμα του μηνύματος η ίδια δημιούργησε ότι,
ενημερώθηκε ότι και όλα αυτά.
Έτσι, μπορείτε να αποθηκεύσετε σε μια βάση δεδομένων.
Και ας υποθέσουμε ότι η Alice στέλνει το πρώτο μήνυμα, πώς να πάρει Bob
αυτό το μήνυμα τώρα από τη βάση δεδομένων;
>> Θα μπορούσε να είναι κάποια Ajax απόκριση που είναι συνεχώς σε εξέλιξη
πίσω στη βάση δεδομένων top πάρει το [δεν ακούγεται].
>> Ακριβώς.
Έτσι κώδικα του Bob που είναι κώδικας είναι το ίδιο με το Alice είναι ακριβώς το είδος
ενός συμμετρικού σχέσης,
Ο φυλλομετρητής Bob έχει κάποιο κώδικα Ajax αυτό είναι πιθανώς ίσως κάθε 30
δευτερόλεπτα τραβώντας το server μέσω Ajax συγχρονισμού,
είναι νέα μηνύματα εκεί;
Υπάρχουν νέα μηνύματα εκεί;
Κάθε 30 δευτερόλεπτα θα να είναι το είδος της αναντίστοιχο
γιατί πρέπει να περιμένουν ακόμη
αν η Alice κυριολεκτικά Μόλις έστειλα το μήνυμα.
Έτσι, το πρόγραμμα περιήγησης του Bob θα μπορούσε να κάθε δεύτερη χτύπησε το διακομιστή.
Αλλά αυτό σημαίνει ότι Αλίκης browser είναι το χτύπημα του διακομιστή
κάθε δευτερόλεπτο.
Τι γίνεται με τον Τσάρλι [Υποτίθεται ορθογραφία]
και ο David [υποτίθεται ορθογραφία] και Edward [υποτίθεται ορθογραφία]
καθώς και κάθε άλλο έγγραφο της αλφαβήτου;
Ποιο είναι το πρόβλημα αυτής της προσέγγισης;
Πολλές επιτυχίες υπερβολική -
Θέλω να πω ότι είστε απλά αποτελεσματικά Δοσομετρικές δικό σας όραση
ή DDOSing, Κατανεμημένα Denial Of Service επίθεσης
στο δικό σας site, έχοντας όλα
από αυτούς τους χρήστες να τρέξει το JavaScript κώδικα που είναι ακριβώς το πινγκ
heck από server σας ακόμη και αν αυθαίρετο αριθμό,
80 τοις εκατό του χρόνου κανείς δεν έχει πει τίποτα
στο chat room.
Αλλά είστε ακριβώς τον έλεγχο για να βεβαιωθείτε ότι τέτοια.
Έτσι, PHP σε πολλά γλώσσες δεν είναι μόνο καλό
για την πραγματική επικοινωνία χρόνο.
Επειδή σε PHP ανάκληση υπάρχει Δεν κεντρική μνήμη, έτσι δεν είναι;
Έχετε αντικείμενα συνόδου η οποία δημιουργεί την ψευδαίσθηση
της κεντρικής αποθήκευσης, αλλά ότι είναι σε μια ανά χρήστη βάση.
Δεν έχουν παγκόσμια μνήμη όπως κάνετε σε ένα Java Servlet
σε οικεία ή σε άλλα καρέ λειτουργεί σαν αυτό.
Node.js όμως, έχετε παγκόσμια μνήμη γιατί έχετε
έναν server και ότι «μπορεί να θυμάται τίποτα θέλει
για όλους τους χρήστες.
Και ίσως ακόμα έχει μια βάση δεδομένων.
Αλλά το ωραίο πράγμα για Node.js πάρα πολύ είναι ότι είναι πολύ καλύτερα
από ό, τι κάτι σαν PHP και δημιουργώντας την ψευδαίσθηση
να χειρίζονται πολλαπλές πράγματα ταυτόχρονα.
Και στην πραγματικότητα, όπως και στην άκρη, μπορείτε να εφαρμογή servers συνομιλίας σε PHP,
αλλά θα κάνατε συνήθως κάτι που ονομάζεται μακρά δημοσκοπήσεις
σύμφωνα με την οποία δεν ping ο διακομιστής κάθε δευτερόλεπτο.
Μπορείτε να κάνετε ping στο διακομιστή, η διακομιστής δεν ανταποκρίνεται σε σας
για πάνω από 30 δευτερόλεπτα, κάθεται κυριολεκτικά
σε ένα βρόχο αναμονής και περιμένουν.
Και ο διακομιστής ελέγχει αν υπάρχει νέα δεδομένα στη βάση δεδομένων
και μόνο όταν σας βλέπει, "Ω, εδώ είναι ένα μήνυμα από τον Bob, "
δεν θα απαντήσει στο διακομιστή HTP;
Έτσι, το αποτέλεσμα στον browser σας είναι ότι η εικόνα IE ή το Mozilla
ή ό, τι κρατά μόνο κλώση για 30 δευτερόλεπτα κάθε φορά.
Ωστόσο, οι ανοδικοί είναι, δεν έχετε έχουν 30 αιτήσεις σύνδεσης
σε 30 δευτερόλεπτα, έχετε ένα.
Έτσι λέγεται μεγάλη δημοσκοπήσεις.
Αλλά ακόμα καλύτερα στη σύγχρονη web browsers είναι κάτι που ονομάζεται
WebSocket, η οποία παίρνετε το CS143,
μπορείτε να κάνετε μια αποτελεσματική Σύνδεση TCP από ένα πελάτες
όπως ένα πρόγραμμα περιήγησης σε ένα διακομιστή και στη συνέχεια να κρεμάσει προς το
χωρίς τη χρήση σχεδόν όπως πολλοί πόροι
όπως HTTP μπορεί να κάνει παραδοσιακά.
Και Socket IO είναι μια βιβλιοθήκη Node.js
που το καθιστά πολύ πιο εύκολο να κάνουν τις συνδέσεις υποδοχή
ή έχουμε ψευδαισθήσεις σε για παλαιότερα προγράμματα περιήγησης
ώστε να μπορείτε να εφαρμόσει αυτό το σε πραγματικό χρόνο τη λειτουργία του.
Έτσι, εδώ είναι ένα παράδειγμα.
Αυτή η ουσία επάνω στην κορυφή παίρνει ένα λίγο πιο περίπλοκη
αλλά είναι ως επί το πλείστον αντιγράψετε και να επικολλήσετε από την τεκμηρίωση socket.io 's.
Εδώ είναι τώρα μια πιο συγκεκριμένο αίτημα χειριστή.
Εάν ο χρήστης ζητήσει μια κάθετος, ποιο αρχείο θα πάω
να είναι προφανώς εξυπηρετήσει μέχρι τους;
Index.html.
Και δεν υπάρχει κάποια νέα πράγματα εδώ ρεύμα
το οποίο θα σας δείξω ακριβώς σε μια στιγμή.
Αλλά αυτό είναι απλά ένας άλλος τρόπος
αρπάζοντας ένα αρχείο μια λίγο πιο αποτελεσματικά
από ό, τι ακριβώς να κάνει fs.readFile.
Είναι λίγο πιο έξυπνοι ειδικά για μεγάλα αρχεία.
Έτσι, τα πολυλογώ, αυτές οι γραμμές μόνο για να εξυπηρετήσει
μέχρι ένα αρχείο με όνομα index.html
η οποία προς το παρόν αναλάβει περιέχει η μορφή HTML με την οποία Alice
και ο Μπομπ μπορεί να επικοινωνούν μεταξύ τους.
Τέλος, io.sockets.on, έτσι αυτό προέρχεται από αυτή τη γραμμή εδώ.
Έτσι, είμαι απλώς την ανάγνωση της τεκμηρίωση io.socket μου δίνει
πρόσβαση σε ένα λεγόμενο WebSocket με ένα πρόγραμμα περιήγησης,
μεταξύ του προγράμματος περιήγησης και ο διακομιστής.
Ακούω για ειδικές Σύνδεση γεγονός που μέσα
όταν για πρώτη φορά το χρήστη χτυπά ο διακομιστής προσπαθεί
για να ανοίξετε αυτό το πλαίσιο, είμαι πρόκειται να καλέσετε αυτό το αίτημα πίσω.
Και τώρα, θα πάω να κάνετε τα εξής.
Κάθε πέντε δευτερόλεπτα τι Πάω να κάνουμε;
Πάω να εκπέμπει ή να μεταδοθεί αν θυμάστε το μηδέν,
η γραφική γλώσσα θα ότι μια εκπομπή μπλοκ;
Έτσι, θα πάμε να εκπέμπουν
ή να προκαλέσει μια εκδήλωση που ονομάζεται αυθαίρετα από το διακομιστή.
Και πρόκειται να περιέχουν ένα μήνυμα Ping
και η τρέχουσα ημερομηνία.
Έτσι, αυτό είναι ένα πραγματικό ότι συνομιλίας διακομιστή Alice
και ο Bob μπορεί να χρησιμοποιήσει, αλλά είναι το είδος από ένα αυτοματοποιημένο διακομιστή συνομιλίας
όπου είναι τα μηνύματα ακριβώς το είδος του σόναρ pings.
Είναι ακριβώς σήμερα σε ώρες που είναι που αποστέλλονται κάθε πέντε δευτερόλεπτα.
Έτσι, αν πραγματικά το τρέξετε πράγμα - και αυτό είναι όλο.
Για να είμαι σαφής εδώ κάτω, ανακοίνωση αυτή ακριβώς τη σύνδεση εδώ κάτω.
Έτσι, επιτρέψτε μου να μετατρέψει ένα τα στραβά μάτια σε αυτό.
Επιτρέψτε μου να κάνω κόμβο της app.js.
Επιτρέψτε μου να πάω στον browser μου.
Ανανέωση της αρχικής σελίδας εδώ.
[Παύση]
Και επιτρέψτε μου να κλείσει τον επιθεωρητή.
Κάθε πέντε δευτερόλεπτα έχω ένα επίδειξη αν και ακόμη δεν
διαδραστικές για την ανθρώπινη
κάτι που είναι συμβαίνει ασύγχρονα.
Στην ανακοίνωση του προγράμματος περιήγησης, δεν υπάρχει εικονίδιο γυρίζει.
Είναι χρησιμοποιώντας ένα πιό φανταχτερό χαρακτηριστικό του Chrome σε σύγχρονα προγράμματα περιήγησης
της διατήρησης ενός πρίζα σύνδεση κάτω από την κουκούλα
και αυτό είναι ό, τι λέγεται γενικά μια pub / sub μοντέλο,
publish / subscribe μοντέλο, όπου δεν έχουν γίνει
που είναι αρκετά ρητά εδώ.
Αλλά τι είναι ωραίο γι 'αυτό γενική pub / sub παράδειγμα είναι
ότι μπορείτε να έχετε έναν εκδότη.
Στην περίπτωση αυτή η κεντρικό server και όλα
του ατόμου browsers είναι οι πελάτες.
Alices και βαρίδια του κόσμος μπορεί να γίνει συνδρομητής,
ώστε να μπορείτε να μεταδίδουν μηνύματα μεταξύ οποιονδήποτε αριθμό χρηστών.
Και παρόλο που και πάλι είμαστε δεν βλέπουμε διαδραστικότητα,
είχαμε ίσως 12 γραμμές του κώδικα απλά για να το κάνουμε αυτό.
Και μάλλον δεν είναι ένα άλμα να φανταστεί κανείς πώς θα μπορούσε να κτυπήσει
από το αρχείο index.html ότι έχει μια πραγματική μορφή HTML,
μικρό κομμάτι του κώδικα jQuery με Ajax που δεν στέλνει ημέρας
αλλά απλά στέλνει ανεξάρτητα από Alice ή τύπου Bob στο διακομιστή
και στη συνέχεια ο διακομιστής θα το ρελέ έξω.
Και υπόσχομαι να διαβλέψει σε ένα τελευταίο πράγμα μόνο
να σας πειράζω με αυτό.
Αν πάμε στο ρεύμα μηδέν και ένα,
μπορείτε να δείτε τον κώδικα που είναι ακριβώς λίγο διαφορετικό εδώ.
Ακριβώς έτσι το έχετε δει, Αυτή είναι μια εναλλακτική
σε αυτό που ονομάζεται fs.readFile Μέθοδος νωρίτερα, σύμφωνα με την οποία,
μπορείτε να πείτε Node.js, "Go διαβάστε αυτό το αρχείο στη μνήμη.
Αλλά αν είναι απλά να δώσει μεγάλη μου ένα κομμάτι σε έναν χρόνο. "
Και ίσως γνωρίζετε από CS165
ή 161 τα συστήματα αρχείων έχουν διαφορετικές
ιδιότητες των επιδόσεων.
Μπορεί να θέλετε να διαβάσετε σε μπλοκ 512 bytes
ή 2 kilobytes ή οτιδήποτε άλλο.
Αυτό είναι ένας τρόπος για τη βελτιστοποίηση της να πάρει πίσω από το αρχείο επαναληπτικά
ώστε να μπορείτε να το φτύσει έξω λίγο πιο γρήγορα
στο πρόγραμμα περιήγησης ή να όποιος το τέλος του πελάτη είναι.
Έτσι τεράστιο ποσό του περιεχομένου σήμερα και θα πάμε για να βουτήξει
σε περισσότερες λεπτομέρειες την Τετάρτη με τον Tim [υποτίθεται ορθογραφία]
ιδίως εξετάζοντας το πώς μπορούμε μπορεί να μεταφράσει κάποιες από τις ιδέες
από το πρώτο εξάμηνο του Φυσικά Laravel και μοντέλα
σε μια βιβλιοθήκη που ο ίδιος έγραψε ονομάζεται Bookshelf.js
η οποία γίνεται ολοένα και πιο δημοφιλής στην κοινότητα
επειδή σας δίνει το μεγαλύτερο μέρος του,
αν όχι περισσότερο από ό, τι η λειτουργικότητα εύγλωττη
η οποία είναι ότι η ανάκληση βιβλιοθήκη εικόνα της Laravel,
τόσο περισσότερα για αυτό και περισσότερο πόσο
να αναπτύξει πλήρες apps την Τετάρτη.
Θα σας δούμε στη συνέχεια.