KEVIN SCHMID: Γεια σε όλους. Καλώς ήρθατε στο σεμινάριο CS50 για Node.js. Το όνομά μου είναι ο Kevin. Είμαι TF CS50. Και είμαι κάπως σαν πραγματικά ενθουσιασμένος σχετικά με αυτό το σεμινάριο. Νομίζω ότι Node.js είναι πολύ δροσερό. Ελπίζω ότι αυτό το σεμινάριο μπορεί να χρησιμοποιηθεί ως ένα καλό, υποθέτω, εφαλτήριο για μερικά από τα τελευταία έργα σας, εάν σας ενδιαφέρει, χρησιμοποιώντας κάτι σαν Node.js. Θα είδος ξεκινήσει το σεμινάριο εκτός από απλά μιλάμε για ένα μικρό κομμάτι της είδους υπόβαθρο επεκτασιμότητα προοπτικές της Node.js, και στη συνέχεια θα προχωρήσουμε σε κάποια παραδείγματα κώδικα. Και θα έχω τον κώδικα σε ένα δικτυακό τόπο, και μπορείτε να κοιτάξετε τον κώδικα. Και μετά το σεμινάριο, θα ταξινομήσετε συζήτηση σχετικά με το πώς μπορείτε να ρυθμίσετε το Node.js στον υπολογιστή σας. OK. Οπότε ας ξεκινήσουμε. Έτσι υποθέτω ότι απλά θέλω να μιλήσω για web servers, πραγματικά, για πρώτη φορά. Και για να ξεκινήσουμε αυτή τη συζήτηση, εγώ ουσιαστικά ένα διάγραμμα το οποίο είναι από Το βιβλίο που χρησιμοποιείται για CS61, η οποία βασικά δείχνει την αλληλεπίδραση ανάμεσα σε μια διαδικασία πελάτη, όπως το web περιήγησης ή σαν client στόχος σας ή κάτι τέτοιο, και ένα web server. Έτσι, αυτό το είδος της μοιάζει με το εικόνα που είδατε στην διάλεξη με θέμα Τετάρτη, όπου ουσιαστικά έχουμε κάποια διαδικασία client όπως το Google Chrome. Και στη συνέχεια ένα βήμα είναι η πελάτης στέλνει μια αίτηση. Έτσι ώστε να μπορεί να είναι κάτι σαν και ας επισκεφθείτε, δεν ξέρω, CS50.net. Γι 'αυτό να εκδώσει την εν λόγω αίτηση. Και μήπως κανείς να θυμηθεί το όνομα του το πρωτόκολλο που καθορίζει τον τρόπο που αίτηση πρέπει να είναι δομημένη; Ναι. ΚΟΙΝΟ: [δεν ακούγεται]. KEVIN SCHMID: Ακριβώς. Έτσι είναι όπως HTTP, έτσι δεν είναι; Έτσι, ουσιαστικά η προδιαγραφή για το πώς ότι η αίτηση πρέπει πραγματικά να καθοριστούν έξω, διότι στο τέλος της ημέρας, ότι η αίτηση είναι πραγματικά ακριβώς όπως μια κορδόνι που ουσιαστικά λέει θέλω αυτό. Και η προδιαγραφή γι 'αυτό είναι το HTTP. Έτσι, αυτό είναι σαν ένα πρωτόκολλο. Έτσι, στη συνέχεια, λαμβάνει ο server το εν λόγω αίτημα. Έτσι, εσείς έχετε εγκαταστήσει ένα web server στη συσκευή CS50. Είναι Apache. Και αυτή την εβδομάδα, όταν εργάζεστε σε πρόβλημα έθεσε επτά, θα είστε πραγματικά να εργάζονται με αυτό το web server. Έτσι, ο server λαμβάνει το αίτημα αυτό, και τότε θα πρέπει να το είδος του μηδέν της το κεφάλι και να πω, όπως καλά τι μπορώ να κάνω με αυτό; Έτσι, με βάση ό, τι αποφασίσει να κάνει, στη συνέχεια, μπορεί να χρειαστεί να επικοινωνήσετε με κάποιο είδος των πόρων. Και ότι ο πόρος θα μπορούσε να είναι μια πολλά διαφορετικά πράγματα. Για το ένα, θα μπορούσε να είναι ακριβώς σαν ένα στατικό αρχείο HTML. Έτσι θα μπορούσε απλώς να είναι όπως κάποια HTML, που είναι όπως για την προσωπική σας ιστοσελίδα. Θα μπορούσε να είναι ένα στατικό αρχείο σαν εικόνα ή σαν μια ταινία που έχετε. Θα μπορούσε ακόμη και να μιλήσει σε κάποιο είδος της βάσης δεδομένων όπως μια βάση δεδομένων MySQL. Γι 'αυτό δεν πρέπει πάντα να επικοινωνούν με μια πηγή, αλλά σε Σε ορισμένες περιπτώσεις, θα μπορούσε. Και τότε τι πρόκειται να κάνουμε μετά από αυτό είναι ότι πρόκειται να στείλετε πίσω την απάντηση. Και η απάντηση για αυτό είναι καθορίζεται επίσης από HTTP. Έτσι, τότε ο πελάτης μπορεί να το παραλάβει. Μπορεί να το ξεσκίσει και θα τα επεξεργάζεται. Και τότε μπορείτε να πάρετε μια ιστοσελίδα όπως το Google ή CS50.net ή ό, τι πήγε. Εντάξει; Έτσι, αυτή είναι η βασική αλληλεπίδραση που θα πάμε να ασχολούνται με. Και είμαστε λίγο πολύ θα είναι εστιάζοντας σε αυτό το μέρος του αλληλεπίδρασης, ο διακομιστής. OK. Cool. Ο καθένας έχει οποιεσδήποτε ερωτήσεις μέχρι τώρα; OK. Έτσι, όπως είπαμε, ο web server λαμβάνει αυτό το αίτημα HTTP και στη συνέχεια εκδίδει αυτό Απόκρισης HTTP. Και όπως είπαμε πριν, η Συσκευή CS50 web server είναι ο Apache. Έτσι, όταν δουλεύετε σε P έθεσε επτά, θα πάμε να εργάζονται με το Apache web server. Ποτέ δεν θα πρέπει να δουλέψουμε πολύ με Apache άμεσα πάρα πολύ. Μπορείτε να ρυθμίσετε το είδος του Apache λίγο όταν καθορίζετε τα virtual hosts ή οι κατά οικοδεσπότες, και θα πάρουμε σε αυτό σε λίγο. Αλλά βασικά, ο web server Apache συσταθεί για να συνεργαστεί με το είδος PHP της έξω από το κουτί. Έτσι, αυτό που πραγματικά συμβαίνει είναι όταν θα πάτε σε μια από τις ιστοσελίδες σας, όπως, ας πούμε, τοπική κάθετο index.php ή κάτι υποδοχής, είναι το πρόγραμμα περιήγησής σας στέλνει ότι αιτήματος, και στη συνέχεια Apache κάθεται εκεί και υπολογίζει να κάνει με αυτό. Και η δράση είναι να εκτελέσει ότι ο κώδικας στο index.php και τότε το στείλετε μακριά πίσω. Έτσι υπάρχει αυτό. Γι 'αυτό και το είδος του μιλήσει γι' αυτό. Έτσι θα μπορούσε να εξυπηρετήσει μόνο ένα στατικό αρχείο ή να τρέξει λίγο κώδικα PHP και στη συνέχεια το θέμα η απόκριση. Έτσι, στη συνέχεια, μια κοινή ερώτηση που μπορεί να έρθει up είναι καλά, πώς μπορούμε πραγματικά να ασχοληθεί με την κατοχή πολλαπλών χρηστών την ίδια στιγμή; Φανταστείτε λοιπόν, αν γράφατε ένα web διακομιστή, εάν είχατε ένα web server που προσπαθούσατε να γράψετε κάτι όπως η C ή κάτι τέτοιο, βασικά μπορείτε να σκεφτείτε πόσο υπάρχει θα μπορούσε να είναι κάποιο είδος κώδικα που Θα λάβετε το αίτημα, αλλά στη συνέχεια έχει να κάνει όλο αυτό το έργο σε αυτό. Μπορεί να έχει, για παράδειγμα, σε επαφή με το βάση δεδομένων ή κάτι τέτοιο. Σωστά; Και τότε θα κάνουμε αυτό το είδος της επεξεργασίας και, στη συνέχεια, αποστέλλεται πίσω την απόκριση. Έτσι, αυτό είναι σαν το υψηλό Επισκόπηση επίπεδο. Αλλά δεν είναι αμέσως προφανές το πώς θα μπορεί να το κάνει αυτό, έτσι ώστε δύο άτομα ή ακόμη και 1.000 άτομα θα μπορούσε να συνεργαστεί με σας web server ταυτόχρονα. Έτσι, η λύση που χρησιμοποιεί Apache ονομάζεται σπειρώματα ή διαδικασίες. Έτσι, μπορεί να έχετε ακούσει τους όρους αυτούς πριν. Είναι εντάξει, αν δεν έχετε, αλλά απλά σκεφτείτε σχετικά με θέματα ή διαδικασίες και τρόπους για ένα λειτουργικό σύστημα ή ένα πρόγραμμα χρήστη ή κάτι τέτοιο ή ένα web server να είδος εκτελέσει πολλαπλές πράγματα ταυτόχρονα. Έτσι, μπορεί να έχετε ακούσει τον όρο όπως τα θέματα της εκτέλεσης. Έτσι είναι το είδος του σαν να είστε είδος του multitasking. Και αν έχετε δει στο κουτί σας φορητό υπολογιστή, ή κάτι τέτοιο, πολλαπλών πυρήνων, τι μπορείτε να κάνετε είναι να μπορείτε να τρέχουν δύο διαφορετικά νήματα σε διαφορετικές τμήματα της CPU έτσι ώστε να μπορούν στην πραγματικότητα να συμβεί την ίδια στιγμή. Έτσι, αυτό είναι πραγματικά ισχυρή. Και αυτό είναι το είδος του Apache του λύση στο πρόβλημα αυτό. Έτσι, υπάρχουν κάτι σαν όλα τα ζητήματα με την προσέγγιση αυτή όμως; Έτσι υποθέτω ότι το είδος τους έγραψε εκεί. Αλλά και οι δύο από αυτούς είδος χρησιμοποιούν πολλή μνήμη. Είναι πολύ ακριβό για να δημιουργήσετε ένα νήμα ή μια διαδικασία. Και μέρος της συλλογιστικής είναι ότι ακριβώς όπως όταν τρέχετε ένα πρόγραμμα C σαν κύρια σας και, στη συνέχεια, ότι οι κλήσεις μια άλλη λειτουργία, που έχει κάποιο είδος της στοίβας. Έτσι, τα θέματα που απαιτούν επίσης μια εντελώς ξεχωριστή στοίβα που μπορεί να είναι αρκετά μεγάλο. Και αν μπορείτε να φανταστείτε με τους τόνους των χρήστες στην ιστοσελίδα σας, θα έχετε πολλά διαφορετικά νήματα. Αυτό είναι ένα πολύ καπνοδόχων διαχείριση και συντήρηση. Γι 'αυτό είναι μεγάλη κατανάλωση μνήμης. Και στη συνέχεια, επίσης, ας πούμε ότι έχετε μόνο ένα CPU, ή ας πούμε ότι έχετε περισσότερα θέματα από ό, τι έχετε αυτές multicores. Σωστά; Ας πούμε ότι είχατε 10 θέματα και είχατε μόνο πέντε CPUs. Μπορείτε είδους πρέπει να το κάνουμε αυτό το πράγμα, όπου εναλλαγή μεταξύ της τρέχουσας αυτό που εκτελείται γιατί δεν μπορεί να τρέξει και τα 10 με τη μία. Και αυτό ονομάζεται μεταγωγή του πλαισίου. Και αυτός ο όρος στην πραγματικότητα έχει ένα ζευγάρι των διαφορετικά πλαίσια, αλλά ας σκεφτείτε το σαν μεταγωγής ανάμεσα σε δύο νήματα. Αυτό μπορεί να είναι αρκετά ακριβά, διότι βασικά αυτό που έχετε να κάνετε είναι να σας Πρέπει να σταματήσει αυτό που κάνετε, εκτός από το κατάσταση του εν λόγω νήμα που εκτελείται, και στη συνέχεια να στραφούν προς κάπου αλλού. Έτσι κάνει ο καθένας το είδος δείτε το τα κίνητρα του γιατί τα θέματα και διαδικασίες μπορεί να είναι λίγο ογκώδες; Και δεν έχετε κάποια ερώτηση; OK. Cool. Ο καθένας έχει οποιεσδήποτε ερωτήσεις; OK. Έτσι, αν κάνουμε ένα βήμα πίσω για ένα δευτερόλεπτο, υπάρχει κάτι σαν μια παρατήρηση που μπορούμε να κάνουμε για πολλές εφαρμογές web. Και αυτό είναι πραγματικά ότι πολλοί από αυτούς στην πραγματικότητα δεν το κάνουμε αυτό πολύ χρήσιμο εργάζονται μέσα από ένα νήμα. Έτσι έχει κάποιος άρχισε στις P έθεσε επτά καθόλου; Έτσι θέλετε να περιγράψει ίσως μερικά από τα μέρη; Έχετε εργαστεί σε σύνδεση ή κάτι τέτοιο; ΚΟΙΝΟ: Όχι. KEVIN SCHMID: OK. Δεν πειράζει. Λυπάμαι. Αλλά βασικά, στο σύνολο P, είστε πρόκειται να κάνει πολλά είδος ερωτήματα σε μια βάση δεδομένων για να πάρετε κάποια πληροφορίες από την εν λόγω βάση δεδομένων. Και τι τον κωδικό σας πρόκειται να κάνει, τι η διαδικασία Apache ή ότι το νήμα Apache πρόκειται να κάνει ενώ θα πρέπει να επικοινωνήσετε με το βάση δεδομένων είναι ότι είναι είδος πρόκειται να είναι κάθεται εκεί και πρόκειται να περιμένει η βάση δεδομένων να απαντήσει. Τώρα, αυτό δεν μπορεί να ακούγεται σαν το μεγάλο α αντιμετώπιση, επειδή η βάση δεδομένων είναι σε σας Συσκευή CS50, σωστά; Αλλά υπάρχει ένα είδος δικτύου λανθάνουσα κατάσταση εκεί γιατί τώρα το διαδίκτυο διακομιστής πρέπει να εκδώσει δικό της αίτημα να η βάση δεδομένων να επικοινωνούν με το βάση δεδομένων και στη συνέχεια να πάρει ότι πληροφορίες πίσω. Έτσι τώρα είναι σαν να περιμένει καλά για μένα, είμαι πρόκειται να πάει να πάρει κάτι από το βάση δεδομένων και, στη συνέχεια, υπάρχει μια Πολλοί περιμένουν σε εξέλιξη. Μήπως αυτό έχει νόημα; Και για μερικά πράγματα δεν είναι τόσο άσχημα. Αν έχει μόνο, για παράδειγμα, πρόσβαση στη μνήμη, αυτό δεν αρέσει φρικτό I / O latency. Και όταν λέω, I / O latency, τι είμαι αναφέρεστε είναι όπως και κάθε είδους, όπως εισόδου-εξόδου. Αλλά για να αποκτήσετε πρόσβαση σε ένα αρχείο στο δίσκο, όπως αν ήθελα να εξυπηρετήσει το στατικό HTML αρχείο που ήταν στην ιστοσελίδα μου ή κάτι τέτοιο, εγώ το είδος πρέπει να να σταματήσει για λίγο, διαβάστε αυτό το αρχείο από το δίσκο, και στη συνέχεια, ότι η διαδικασία Είμαι σε αναμονή. Δεν κάνω χρήσιμο έργο. Αυτό δεν ισχύει για τα πάντα, αλλά είναι κοινή σε εφαρμογές όπως το σύνολο P επτά και πολλές εφαρμογές ότι δεν είστε κάνει πραγματικά πολύ σκέψη. Και όταν λέω σκέψη, εννοώ όπως υπολογιστική εργασία. Έτσι υπολογιστική εργασία θα μπορούσε να είναι κάτι όπως, ας πούμε, θα ήθελε να γράψετε ένα web server που μόλις υπολογίστηκαν το νιοστό αριθμό Fibonacci. Αυτό δεν ακούγεται σαν μια ιδιαίτερα διασκέδαση web server. Λες και δεν θα περίμενε κανείς ότι η περιοχή να είναι το επόμενο Facebook, αλλά αυτό είναι κάποια είδος υπολογιστική εργασία. Και μπορείτε να φανταστείτε ότι με την αντικατάσταση κάποιο άλλο είδος ενδιαφέροντα υπολογιστική εργασία. Ας πούμε ότι έχετε έγραφαν κάτι που υπολογίζεται τους βαθμούς διαχωρισμός ανάμεσα σε δύο ανθρώπους ή κάτι τέτοιο. Έτσι ώστε δεν περιλαμβάνει κάποιο είδος υπολογισμού, σωστά; Και ακόμα και τότε, να κάνει ότι έχετε ακόμα να κάνει πολλά αναμονής για ίσως θα πρέπει να διερευνούν μια βάση δεδομένων για να δούμε up που είναι φίλοι με το ποιος ή κάτι τέτοιο. Έτσι, υπάρχει αυτό το είδος της έννοιας υπολογιστικής εργασίας. Μήπως αυτό έχει νόημα; Μήπως κάποιος έχει απορίες; Αχ και υποθέτω έβαλα διακομιστές συνομιλίας εκεί γιατί διακομιστές συνομιλίας είναι το είδος της άλλο ένα καλό παράδειγμα αυτού. Ένας server συνομιλίας δεν έχει να κάνει πολύ σκέψη. Πρέπει απλώς να περιμένουμε για τους ανθρώπους να να στείλετε μηνύματα και στη συνέχεια, όταν κάνουν, να τους στείλετε. Εντάξει; Έτσι απλά για να ανακεφαλαιώσουμε και πάλι, Apache και παρόμοια διακομιστές web όπως ότι ένα πιρούνι πολλά τα θέματα και τις διαδικασίες που μπορεί να είναι το είδος της σπατάλης. Έτσι υποθέτω ότι το ερώτημα που μπορεί να έρθει από αυτό το χρειαζόμαστε για να έχουμε πολλαπλά threads και διαδικασιών; Τι θα συμβεί αν είχαμε μόνο μία; Οπότε ας το είδος της δίνουν μια εικόνα από ό, τι αυτό θα μοιάζουν. Έτσι ας χρησιμοποιήσουμε μόνο ένα νήμα. Εντάξει; Φανταστείτε λοιπόν αυτό με ένα νήμα. Ας υποθέσουμε ότι στην πραγματικότητα δεν έκαναν ότι πολύ χρήσιμο - και όταν λέω χρήσιμο, εννοώ υπολογιστική εργασία - σε αυτά τα πολλαπλά threads πριν. Οπότε ας το είδος εδραίωση τα πάντα σε ένα νήμα. Τι κι αν είχαμε ένα νήμα αυτό το είδος μόλις πηγαίνει γύρω από το βρόχο και συνεχώς ελέγχους έκανε κάτι νέα συμβεί. Έτσι για παράδειγμα, συνέβη κάτι νέο θα μπορούσε να σημαίνει πήρα κάτι πίσω από η βάση δεδομένων, ή κάποιος που αποστέλλονται με νέα αίτηση HTTP. Έτσι, αυτές είναι το είδος των εκδηλώσεων συμβεί αυτό, έτσι δεν είναι; Και τότε τι μπορώ να κάνω όταν αυτά τα νέα πράγματα συμβαίνουν είναι σε αυτό το ίδιο το νήμα της εκτέλεσης, αυτό και μόνο το νήμα της εκτέλεση, μπορώ να καλέσω κάποιο κώδικα που θα χειριστεί το συγκεκριμένο πράγμα. Έτσι, για παράδειγμα, αν πήρα κάτι πίσω από τη βάση δεδομένων, θα μπορούσα να τρέξω μου μικρή υπολογιστική μέρος από αυτό που στην πραγματικότητα προετοιμάζεται ακριβώς το πράγμα για να στείλετε πίσω στο χρήστη. Έτσι κάνει αυτό το είδος της νόημα; Αλλά τι είναι πραγματικά η συνέπειες αυτού του γεγονότος; Σωστά; Επειδή έχουμε γράψει ένα πολύ κώδικα αυτού - και είμαι απλώς πρόκειται να βγαίνουμε μπροστά στις διαφάνειες, αν αυτό είναι εντάξει. Έτσι, αν δεν σας πειράζει, είμαι απλά πρόκειται να κάνουμε ένα βήμα πίσω. Έτσι, αυτό το είδος του πράγματος είναι ονομάζεται βρόχος εκδήλωση. Εντάξει; Και αυτό είναι το είδος της βασικής ιδέα πίσω από Node.js. Έτσι, αυτό που Node.js κάνει πραγματικά ως web server είναι ότι υπάρχει ένα ενιαίο νήμα που είναι βασικά πηγαίνει γύρω σε έναν βρόχο σαν μια στιγμή ένα είδος υπό η κουκούλα του Node.js που είναι συνεχώς τον έλεγχο, είχαμε λάβει νέα πράγματα; Και τότε θα τρέξει χειριστές ότι θα συσταθεί. Αλλά μια καλή ερώτηση για να ρωτήσω είναι, πώς μπορούμε να κάνουμε αυτή συμβεί με τα υπάρχοντα πράγματα; Έτσι έβαλα μια γραμμή κώδικα C εδώ ότι ουσιαστικά μοιάζει να είναι το άνοιγμα ενός αρχείο, έτσι δεν είναι; I Είναι μόλις βγήκε με ένα άλμπουμ. Γι 'αυτό και έπρεπε να την ανοίξετε ένα νέο αρχείο. Έτσι, ο τρόπος που μας κώδικα C για τη λειτουργία - και υποθέτω ότι ο λόγος που επέλεξα ήταν αρχεία επειδή αυτό είναι το είδος της έκτασης του έργου I / O που έχουμε κάνει σε C σε μια αίσθηση ότι υπάρχει εισόδου-εξόδου. Έτσι, καλούμε τον κωδικό αυτό που κάνει αυτό στ ανοιχτά. Και στη συνέχεια, στην επόμενη γραμμή μας προγράμματος, μπορούμε τώρα να συνεργαστεί με f. Έτσι, αυτό θα ήταν ένα παράδειγμα από κάτι αυτό είναι σαν σύγχρονη ή κλείδωμα επειδή εκείνη την πρώτη γραμμή εκεί περιμένουμε μέχρι να πάρετε το αρχείο ανοιχτό. Έτσι, στη δεύτερη γραμμή, γνωρίζουμε ότι μπορεί να λειτουργήσει με F, αλλά αυτό σημαίνει ότι ότι η δεύτερη γραμμή δεν μπορεί πραγματικά να τρέξει μέχρι την πρώτη γραμμή γίνεται. Μήπως αυτό έχει νόημα; Έτσι, αυτό θα ήταν κακό να θέσει σε ένα πρόγραμμα χειρισμού συμβάντων. Και ο λόγος για αυτό είναι ότι αυτό το είδος της αναμονής, έτσι δεν είναι; Έτσι, αυτό θα μας επανέλθει στο ίδιο πράγμα. Και τώρα δεν θα είχαμε ακόμη και η πλεονέκτημα των πολλαπλών νημάτων ή διεργασίες επειδή πήραμε ένα νήμα σε Node.js. Μήπως αυτό έχει νόημα για όλους; ΚΟΙΝΟ: Περιμένετε. Έτσι, ποια είναι η αντικατάσταση; KEVIN SCHMID: Ω, οπότε ναι. Έτσι, Πάω να φτάσετε στο ο αντικαταστάτης του. OK. Τι κι αν είχαμε κάτι που έμοιαζε με αυτό; Τι κι αν τώρα άλλαξε στ ανοίξει λίγο; Γι 'αυτό περνάω στο ίδιο δύο επιχειρήματα όπως και πριν. Αγαπώ ακόμα το νέο τραγούδι που ήρθε με. Αλλά είμαι περνώντας ένα τρίτο πράγμα που είναι η μεταβλητή που ονομάζεται κώδικα. Αλλά τι είναι ο κωδικός πραγματικότητα σε αυτό το πλαίσιο; Είναι σαν ένα κανονικό μεταβλητή C; Είναι μια λειτουργία, έτσι δεν είναι; Και αυτό μπορεί να είναι λίγο περίεργο γιατί Είμαι πραγματικά σαν τώρα περνά μια λειτουργούν σε μια άλλη λειτουργία. Έτσι, ένα ζευγάρι πράγματα που πρέπει να σημειωθεί σχετικά με αυτό. Ένα, δεν είμαι πραγματικά καλώντας η λειτουργία κωδικού. Έτσι δεν μπορείτε να δείτε τον κώδικα με το paren αριστερά, δεξιά paren. Είμαι απλά περνώντας στον κώδικα. Και σε C, τι αυτό θα κάνουμε πραγματικότητα είναι να μου δώσει ένα δείκτη για το πραγματικό κώδικα, και τότε αυτό θα μπορούσε να τρέξει. Αλλά σκεφτείτε το, όπως είστε περνώντας τον κώδικα να τρέχει όταν ότι το αρχείο ανοίγει. Αλλά αυτό σημαίνει ότι τώρα η υπόλοιπο του προγράμματός μου, η οποία θα μπορούσε να κάνει άλλα πράγματα, μπορεί να συνεχίσει να κάνει άλλα πράγματα, ενώ εμείς, δεν είναι πραγματικά περιμένουμε, αλλά Απλά πρέπει στο πίσω μέρος του κεφαλιού μας που όταν είναι ανοικτά, τρέξιμο αυτού του αρχείου που κωδικός στην κορυφή. Μήπως αυτό έχει νόημα; Και τώρα η ιδέα πίσω από Node.js είναι ότι ο κώδικας στην ουσία κάνουμε με f μέρος πρέπει να είναι αρκετά σύντομη και απλή και απλή και δεν είναι πραγματικά πολύ εντατική υπολογιστικά. Μπορεί να χρειαστεί να ανοίξετε ένα άλλο αρχείο, αλλά ότι θα πρέπει επίσης να είναι αρκετά γρήγορη γιατί πρέπει να πω κάνουμε άλλο f ανοίξετε και στη συνέχεια να καλέσετε αυτό το άλλο κωδικό. Έτσι απλά για να είναι απολύτως σαφής, το f ανοίξτε που κάνει το νέο τραγούδι Katy Perry done mp3, ότι πρόκειται για αρκετά πολύ να επιστρέψει αμέσως. Και τότε μπορούμε απλά να συνεχίσουμε να κάνουμε άλλα πράγματα, γιατί όλα αυτά που τώρα στ ανοικτή πρόσκληση δεν είναι πει ουσιαστικά το υποκείμενη στ ανοιχτού κώδικα ανοίξετε αυτό το αρχείο και όταν τελειώσετε το άνοιγμα αυτό αρχείο ή όταν το πάρει πίσω, στη συνέχεια, εκτελέστε τον κώδικα. Αλλά δεν τρέχει πραγματικά τον εν λόγω κώδικα. Και είχατε μια ερώτηση; ΚΟΙΝΟ: Μπορείτε φαίνεται να υπονοεί μερικές φορές ότι η προσθήκη υπολογιστικά εντατική κωδικός είδους σπάσει το [Δεν ακούγεται] με γνώμονα το σύστημα. [Δεν ακούγεται]; KEVIN SCHMID: Αυτό είναι ένα μεγάλο ερώτημα. Έτσι έχω πραγματικά ένα παράδειγμα για το πώς θα μπορούσε να ενσωματώσει υπολογιστικά εντατική κώδικα σε λίγο. Έτσι, όταν φτάσουμε στα παραδείγματα κώδικα, Θα είμαι βέβαιος να τραβήξει το ένα. Είναι αυτό εντάξει; Σας ευχαριστώ. Ποιο ήταν το όνομά σου; ΚΟΙΝΟ: Aaron. KEVIN SCHMID: Aaron δημιουργεί ένα πολύ καλό σημείο, το οποίο είναι ότι αν είχα κάποια υπολογιστικά εντατικές κώδικα σε η ουσία κάνει με f μέρος, το υπόλοιπο της το πρόγραμμά μου δεν μπορεί να τρέξει και δεν μπορείτε να ακούσετε για τις νέες αιτήσεις ή οτιδήποτε έως ότου όλα η ουσία έχει τελειώσει. Έτσι, αν γράφω κώδικα κόμβου γενικά αν δεν κάνουμε κάτι σαν Πάω να προτείνει αργότερα, όταν κοιτάμε το παραδείγματα κώδικα, πρέπει να είμαι σίγουρος ότι κωδικός μου δεν δένουν αυτό το βρόχο εκδήλωση. Μήπως αυτό έχει νόημα; OK. Cool. Έτσι Node.js προσφέρει αυτό το πλαίσιο που μπορείτε να δημιουργήσετε αυτά συμβάν οδηγείται servers με. Γι 'αυτό έχει αυτό το είδος της ασύγχρονης non-blocking I / O βιβλιοθήκες, ενώ οι τυπικές βιβλιοθήκες C, που έχουμε ήδη εργάζονται με, όπως και αν απλά χρήση τους με τον ίδιο τρόπο που έχουμε τα χρησιμοποιούν με f ανοίγει και πράγματα, αυτά είναι το κλείδωμα γιατί που πραγματικά πρέπει να περιμένουμε για αυτό το αρχείο για να το ανοίξετε. Αλλά Node.js σας δίνει ότι και ουσιαστικά δένει στο V8 της Google JavaScript κινητήρα που είναι ο λόγος ότι το Chrome είναι τόσο γρήγορα στην επεξεργασία JavaScript διότι έχει αυτόν τον κινητήρα V8. Έτσι ξέρω ότι ακούγεται σαν ένα από αυτά WWDC συνέδρια προγραμματιστών πράγμα όπου απλά να ρίξει μια δέσμη των Αριθμός επιστολή πράγματα για τους μεταποιητές και λένε ότι αυτό είναι τόσο δροσερό. Αλλά είναι δροσερό ότι το έκαναν Αυτό επειδή η JavaScript - ή ίσως αν δεν είστε εξοικειωμένοι με JavaScript ακόμη, επειδή δεν είχαμε οι διαλέξεις σε αυτό - αλλά JavaScript είναι μια ερμηνεία γλώσσας. Και αυτό είναι ένα σημαντικό σημείο πάρα πολύ. Γι 'αυτό είναι σημαντικό για την ιστοσελίδα μας servers να είναι γρήγορος, έτσι δεν είναι; Και αν ήμασταν απλά τρέχει JavaScript κώδικα που ερμηνεύονται μόνο με κάθε παλαιό διερμηνέα θα μπορούσε να είναι αργή. Έτσι κόμβου οφέλη από την απόκτηση αυτή super fast διερμηνέα V8. Και δεν ξέρω αν το όνομα επειδή το χαστούκι V8 στο μέτωπο πράγμα, αλλά εντάξει. Έτσι έχω ετοιμάσει μερικά παραδείγματα σε αυτό το URL. Μετά το σεμινάριο, είμαι το είδος του πρόκειται να μιλήσουμε για το πώς μπορείτε να πάρετε σετ κόμβου , αλλά για τώρα, εγώ ακριβώς το είδος του θέλουν να περπατήσει μέσα από μερικά παραδείγματα κώδικα. Έτσι, εάν θέλετε να ακολουθήσετε μαζί, όλα τα πηγαίος κώδικας είναι διαθέσιμα εκεί. Εντάξει; Έτσι, θα αφήσω αυτό το URL για ένα μικρό. Και τότε είμαι απλώς πρόκειται να μεταβείτε στο τερματικό. Είναι όλοι καλά με αυτή τη διεύθυνση URL; Έτσι, Πάω να περάσουμε στο τερματικό μου εδώ. Έτσι, εδώ είναι ο κώδικας που Έχω για σήμερα. Γιατί δεν ξεκινάμε με simpler.js αρχείο; Το άλλο πράγμα είναι ότι όλα αυτά κωδικός πρόκειται να γραφτεί σε JavaScript που μπορεί να είναι ή μπορεί να μην είναι εξοικειωμένοι με. Υποθέτω ότι μερικά πράγματα είναι ότι πολλά του κώδικα JavaScript είναι το είδος της σύνταξη και η δομή είναι πολύ παρόμοια με C, έτσι ώστε να μπορείτε να το είδος του να πάρει ως προχωράς. Έχω προσπαθήσει να γράψει πολλά από τα ξεκινώντας κώδικα για αυτό με έναν τρόπο που είναι παρόμοια με C έτσι ώστε να είναι λίγο πιο ευανάγνωστο. Αλλά καθώς προχωρούμε, θα είμαι αποδεικνύοντας μερικά από τα επιπλέον χαρακτηριστικά της JavaScript που είναι είδος δροσερό. Αλλά ας ρίξουμε μια ματιά σε αυτό το πρόγραμμα δείγμα. Υποθέτω ότι όλα είναι κομμένα από εκεί. Είμαι ακριβώς πρόκειται να καθορίσει ότι η πραγματική γρήγορα, αν αυτό είναι εντάξει ή όχι. Δεν ξέρω τι είναι αυτό που πρόκειται να κάνει. Είναι αυτό λίγο καλύτερα; Μπορείτε να δείτε το var και πράγματα; OK. Έτσι, η πρώτη γραμμή είναι σαν το JavaScript έκδοση μιας μεταβλητής δήλωση. Έτσι απλά για να αναδείξει ό, τι θα ήταν αυτό μοιάζει με C. Έτσι, αυτό είναι ακριβώς όπως μου λέει δείκτης ισούται με τρεις ή κάτι τέτοιο. Γι 'αυτό και δεν προσδιορίζει τον τύπο. JavaScript δεν έχουν τύπους, αλλά είναι πληκτρολογήσει πολύ δυναμικά στη φύση, έτσι δεν παρέχει κανένα είδος του τύπου σε αυτό. Γι 'αυτό έχει ακριβώς var. Αυτό είναι σαν μεταβλητή. Εντάξει; Και Παίρνω αυτό το μεταβλητό HTTP. Και στη δεξιά πλευρά μου, έχω το έκφραση που θέλετε να θέσει σε HTTP. Και αυτό λέει απαιτούν HTTP. Έτσι, αυτό είναι το είδος παρόμοιο με συμπεριλάβει. Είναι λίγο περισσότερο σαν ισχυρό από ό, τι περιλαμβάνουν την έννοια ότι περιλαμβάνουν θα αντιγράψετε και να επικολλήσετε μόνο την κεφαλίδα αρχείο για τα πρωτότυπα συναρτήσεων ή ό, τι με τους ορισμούς του τύπου. Αλλά χρειάζονται πραγματικά συμβαίνει να μας πάρετε τον κώδικα. Έτσι, μπορείτε να σκεφτείτε από το ως εισάγουν κάποιο κώδικα. Έτσι, κάπου στην ενότητα Node.js σύστημα ή οτιδήποτε άλλο, έχουν όλα αυτά Κώδικα διακομιστή HTTP, έτσι είμαι απλά θελκτικός για τις δικές μου προσωπική χρήση σε αυτό το πρόγραμμα. Εντάξει; Έτσι, τότε έχω αυτή τη λειτουργία ότι έχω γράψει. Και πρόσεξα ότι δεν χρειάζεται να καθορίσετε ο τύπος επιστροφής ή το είδος της επιχειρήματα και πάλι. Έτσι, το είδος χαλαρής πληκτρολογήσει αυτό το είδος της αίσθησης. Δύο επιχειρήματα που παίρνει μέσα, η αίτηση και την απάντηση. Έτσι, αυτό είναι εννοιολογικά κάτι σαν γνωστό από την εικόνα που είχαμε στην οθόνη πριν, διότι έχουμε αυτό το αίτημα που έχουμε έχουν από το χρήστη. Και τότε έχουμε μια απάντηση που μπορούμε να γράψουμε τα πράγματα με. Έτσι, η πρώτη γραμμή αυτή κάνει res.writeHead 200 και στη συνέχεια αυτό τύπο περιεχομένου απλού κειμένου. Οπότε ας το κομμάτι αυτό, εκτός λίγο. Οπότε ας επικεντρωθεί στην res.write για λίγο. Έτσι γράφουν είναι βασικά, και να γράψει το κεφάλι, είναι απλώς τρόποι για να είδος γράψουν πράγματα για την απάντηση. Εντάξει; Έτσι γράφω το κεφάλι, αν κάποιος θυμάται από τη διάλεξη HTTP, κάνετε εσείς θυμηθείτε κεφαλίδες κατά τη κορυφή του πράγματος HTTP; Γιατί λοιπόν να μην μπορώ απλά demo κεφαλίδες πραγματικά γρήγορα. Θα ήταν ότι είναι χρήσιμη; Ή θα πρέπει να έχουμε ακριβώς το είδος του - OK. Σίγουρα. Έτσι, όταν το πρόγραμμα περιήγησης πηγαίνει στο google.com ή κάτι τέτοιο, υπάρχει πραγματικά λίγο περισσότερο - αυτό είναι σαν ένα μυστικό - υπάρχει σαν μια μικρή περισσότερες πληροφορίες που έρχεται μέσω του σωλήνα από ό, τι ακριβώς η μικρή έρευνα και τα πάντα. Έτσι για να σας δείξω αυτό, Πάω να χρησιμοποιήσετε ένα πρόγραμμα που ονομάζεται Curl. Εντάξει; Έτσι, αυτό είναι κάτι που μπορείτε να εκτελέσετε γραμμή εντολών Mac OSX σας ή στο συσκευής ή οτιδήποτε άλλο. Και έτσι, αν κάνω Curl HTTP google.com, Πάω να δω το HTML. Και αυτό είναι, για να είμαστε δίκαιοι, μόνο η HTML που είδος σας λέει να ανακατεύθυνση στο www αν ο browser σας δεν χειριστεί αυτόματα το ανακατεύθυνση. Έτσι, αυτό είναι μόνο HTML, αλλά Πάω για να προσθέσετε αυτό το ενωτικό Curl έχω επισημάνει. Εντάξει; Και αυτό πρόκειται να δείξει με τις κεφαλίδες. Έτσι, αυτό είναι, επίσης, τις πληροφορίες που έρχεται μέσα, όταν έχω την απάντηση αυτή. Εντάξει; Έτσι, στην κορυφή, θα δείτε αυτό HTTP 301 εγκατασταθεί μόνιμα. Και αυτό είναι το είδος της σημαντική, διότι αυτό αναφέρεται στον κωδικό κατάστασης. Έτσι, το 301 εδώ είναι ο κωδικός κατάστασης, το οποίο είναι βασικά ακριβώς ένας ακέραιος που λέει το πρόγραμμα περιήγησης ή όποιος είναι διαβάζετε αυτό, αν προσποιούνται ότι είστε ένας browser και εσείς βλέποντας αυτό, βασικά τώρα αν κοιτάξετε αυτό και βλέπετε ένα 301, ξέρεις έχω να κάνει κάτι ιδιαίτερο με βάση 301, ή κάτι το ιδιαίτερο συνέβη με βάση το 301. Γι 'αυτό λέει μετακινηθεί μόνιμα. Και στη συνέχεια, βασικά, έχουμε μια δέσμη των βασικών ζευγών αξίας. Έτσι παίρνουμε τη θέση είναι www.google.com. Και στη συνέχεια το είδος του όλα αυτά τα άλλα πράγματα, αλλά βασικά, ποια είναι η θέση είναι ρητό είναι η νέα θέση είναι στο www.google.com. Έτσι τώρα, αν πάτε στο google.com, θα είστε είδος δείτε το είδος του προγράμματος περιήγησης της αναλαμπής για ένα δευτερόλεπτο και στη συνέχεια να σας ανακατευθύνει δεξιά πίσω στο www.google.com. Έτσι, οι απαντήσεις μπορούν να περιέχουν αυτές οι κεφαλίδες. Και μερικά πράγματα που πρέπει να επισημάνουμε. Έτσι, ας πούμε ότι ήταν πραγματικά επιτυχημένη σε επίσκεψη σε μια ιστοσελίδα. Έτσι, επιτρέψτε μου να πάω σε - τι είναι ένα καλό δικτυακό τόπο; Είμαι κακός στη σκέψη της καλής δικτυακούς τόπους επί τόπου. ΚΟΙΝΟ: Wikipedia. KEVIN SCHMID: OK. Ας κάνουμε Wikipedia. Εδώ, λοιπόν, είχε μετακινηθεί. Ω περιμένετε. Ήμουν; Ναι, ήμουν. OK. Έτσι έχω να κάνω www. Έτσι, Πάω να κάνω www. Και όπως μπορείτε να δείτε, εδώ είναι όλα τα HTML ότι ο browser θα επεξεργάζεται για την Wikipedia. Αλλά αν συνεχίσετε την κύλιση μέχρι εδώ, τι θα δούμε στην κορυφή - wow, υπάρχει μια πολύ HTML για την Wikipedia - αλλά αυτό που μπορώ να δω στην κορυφή είναι εδώ αυτός ο κώδικας 200 κατάσταση, σε αντίθεση με το 301 που είδα νωρίτερα. Και παρατηρήσετε ότι έχει μια ωραία φιλικό OK δίπλα του. Έτσι, αυτό είναι σαν το καλό κώδικα κατάστασης. Μήπως ότι 200 ​​αριθμός φαίνεται γνωστό; Ναι, γιατί όταν έκανα simpler.js, Έγραψα ένα 200 εκεί. Έτσι, αυτό είναι βασικά λέγοντας πω την περιήγησης ή όποιος προσπαθεί να πάρει για να αυτό ότι ήταν επιτυχής. Ή ότι το είδος του όπως εμείς ήταν πάρα πολύ επιτυχής. Και υπάρχει αυτό το είδος της ειδικής σύνταξης σε Javascript για το χαρακτηρισμό χάρτης αυτών των κλειδιών, όπως τον τύπο περιεχομένου και αυτές οι τιμές, όπως απλό κείμενο. Έτσι, αν δείτε την απάντηση ότι πήρε πίσω από την Wikipedia πριν, - Πάω να προσπαθήσουμε να μετακινηθείτε μέχρι λίγο πιο γρήγορα - έχετε αυτά τα κλειδιά, όπως ο εξυπηρετητής και αυτές οι τιμές Apache. Έτσι έχετε τα κλειδιά και τις αξίες. Και μπορείτε να καθορίσετε αυτό Κόμβο τι πρέπει να στείλει πίσω. Έτσι, αυτό είναι πραγματικά το είδος της, σε ορισμένες τρόπους, και κατά κάποιο τρόπο δεν είναι πραγματικά, αλλά αυτό είναι λίγο χαμηλότερο επίπεδο από τον κώδικα PHP που μπορεί να είναι γραπτώς για την P έθεσε επτά, επειδή η PHP και Apache είδος αναλάβει τη φροντίδα του κάποια από αυτά τα πράγματα για σας. Στην PHP, μπορείτε να παρακάμψετε την προεπιλεγμένη συμπεριφορά γράφοντας το δικό σας κεφαλίδες. Αλλά για τους σκοπούς του παρόντος, έχουμε να γράψουν τη δική μας κεφαλίδες. Έτσι κάνει ότι η γραμμή έχει νόημα να όλους, η γραμμή της κεφαλής εγγραφής; OK. Awesome. Έτσι, στη συνέχεια, αυτό που κάνω είναι να τερματίσω την απάντηση λέγοντας hello world. OK. Αλλά αυτό είναι μόνο μια λειτουργία ονομάζεται διαχειριστή αιτήσεων. Έτσι, τώρα έχω πραγματικά να κάνει το είδος της κάτι με αυτή τη λειτουργία, έτσι δεν είναι; Έτσι, εδώ αυτό που κάνω είναι υπάρχει αυτή η γραμμή η οποία δεν ισούται διακομιστή var HTTP.create διακομιστή, και στη συνέχεια θα περάσει στην αίτηση εξυπηρέτησης. Έτσι, αυτό είναι το είδος του κόμβου τρόπος για τη δημιουργία ενός διακομιστή. Και παρατηρήσετε ότι είμαι διέρχεται στην αίτηση εξυπηρέτησης. Έτσι, αυτό λέει την createServer λειτουργία που θέλω να μου κάνει μια διακομιστή, και όταν ο server λαμβάνει μια απάντηση, θα πρέπει να καλέσετε αυτό ζητήσει συνάρτηση handler. Εντάξει; Έτσι, αυτή τη γραμμή λίγο πολύ τελειώνει αμέσως. Έτσι, η σειρά server var γίνεται σωστά μετά το κάνετε αυτό λίγο πολύ. Θέλω να πω, θα πρέπει να δημιουργήσει κάποια εσωτερική κατάσταση να γνωρίζουν ότι θα πρέπει να καλούν την εν λόγω λειτουργία διαχειριστή αιτήσεων, αλλά δεν πρόκειται να καθίσει εκεί και λόγο έχει ο χρήστης έστειλε με αίτηση ακόμα; Μου έστειλε ένα αίτημα ακόμα ο χρήστης; Γι 'αυτό δεν μπλοκάρει. Εντάξει; Έτσι, αυτό που θα κάνουμε είναι ουσιαστικά τώρα αποθηκεύει ένα δείκτη σε αυτόν τον κώδικα, αυτή η συνάρτηση handler αίτημα, και, στη συνέχεια, θα τρέξει τον κώδικα όταν κάποιος κάνει μια αίτηση. Και τότε θα κάνουμε server.listen. Το 1337 είναι αρκετά αυθαίρετη. Δεν είχα κανένα ιδιαίτερο λόγο για να πάρει τον αριθμό αυτό. Ήταν εντελώς τυχαία. Αλλά αυτό καθορίζει μόνο το λιμάνι. Έτσι, οι περισσότεροι διακομιστές web θα δείτε ότι χρησιμοποιεί τη θύρα 80, διότι αυτό είναι το είδος σαν της σύμβασης. Έτσι, αν πάω σε κάτι σαν, Δεν ξέρω, Wikipedia.org, και έβαλα παχέος εντέρου 8 - oh wow, δεν μπορείτε να δείτε αυτό. Λυπάμαι. Αλλά αν το κάνω Wikipedia - Θα το γράψω εδώ ακριβώς έτσι ώστε Είναι σαφές από την κάμερα. Αλλά αν πάρω αυτό σε ένα πρόγραμμα περιήγησης με άνω και κάτω τελεία 80, που καθορίζει πηγαίνετε στο Wikipedia.org στη θύρα 80. Έτσι είναι όπως το πώς οι Ηνωμένες Πολιτείες έχουν πολλαπλές θύρες όπως, όπου μπορείτε να στείλετε τα πράγματα με το είδος του. Έτσι είναι σαν να πηγαίνετε σε αυτό το συγκεκριμένο τοποθετείτε σε αυτόν το διακομιστή. OK. Γι 'αυτό ακριβώς επέλεξα 1337. Υπάρχει μια ολόκληρη σειρά των αριθμών ότι μπορείτε να επιλέξετε. Αυτό δεν ήταν τελείως ξεχωριστό. Αλλά τι Πάω να κάνουμε τώρα είναι Πάω να τρέξει κόμβου. Επιτρέψτε μου πραγματικότητα αρχίζει ότι ένα ζευγάρι γραμμές προς τα κάτω έτσι ώστε να μπορείτε να το δείτε. Πάω να κάνω κόμβου, και είμαι πρόκειται να τρέξει simpler.js. Και εμείς θα μιλήσουμε για το πώς να πάρει Κόμβου που έχει συσταθεί σε λίγο. Αλλά τώρα είναι απλά εκτελεί το διακομιστή. Έτσι, ένα πράγμα μπορούμε να δοκιμάσουμε το οποίο δεν μπορεί να να είναι τόσο συναρπαστικό είναι ότι μπορούμε πραγματικά προσπαθούν να έχουν πρόσβαση σε Curl. Έτσι, μπορώ να κάνω Curl, και μου μηχανής είναι η τοπική υποδοχής. Θα δείτε επίσης αυτό γραμμένο όπως αυτό μερικές φορές. Τοπική υποδοχής και 127.0.0.1 είναι το είδος σαν τον υπολογιστή του σπιτιού σας. Έτσι είναι σαν να μιλάμε για το δικό σας υπολογιστή. OK. Και τότε μπορώ να πω 1337. Έτσι, αν μπορώ να εκτελέσω αυτήν τη γραμμή κώδικα, λέει hello world. Και αν ήθελα να δω αυτό το πράγμα που απλό κείμενο είχε τύπο περιεχομένου ή οτιδήποτε άλλο, θα μπορούσα να βάλω ακόμη και αυτό εδώ. Και παρατηρήσετε ότι λέει OK. Και έχω απλό κείμενο. Και έπειτα υπάρχει το είδος του όλα αυτά άλλων πράγματα που κόμβου θα προσθέσει στο εκεί για μένα. Αυτό δεν είναι εξαιρετικά σημαντικό. Θέλω να πω, υπάρχουν κάποια τεχνικά πτυχές που είναι σε είδος δροσερό για να μιλήσει για, αλλά απλά για να δείξει σας, θα ήθελα επίσης να έχουν την εξουσία να αλλάξετε αυτές τις γύρω. Έτσι, μπορώ να προσθέσω ένα μάτσο πράγματα όπως αυτό. Και στη συνέχεια, τώρα, αν κοιτάξουμε στον μου εξόδου, θα είναι ότι. Έτσι, αυτές οι κεφαλίδες, ορισμένα πράγματα σε browsers και τέτοια πράγματα. Και κεφαλίδες μπορεί να πει ουσιαστικά ένα πρόγραμμα περιήγησης πώς να ανταποκριθούν σε κάτι. Αν έχετε ποτέ ακούσει για τα cookies πριν, ή αν έχετε ποτέ ενοχλημένος από μια ιστοσελίδα για τη cookies, ή ενεργοποιημένο μπλοκ μπισκότο ή κάτι τέτοιο. Μπορείτε να ρυθμίσετε πραγματικά cookies σε αυτές τις κεφαλίδες. Έτσι λένε ένα πρόγραμμα περιήγησης πώς να συμπεριφορά σε ορισμένες περιπτώσεις. OK. Έτσι, αυτό ήταν simpler.js. Μήπως κάποιος έχει απορίες σε αυτό το αρχείο πηγαίου κώδικα; OK. Cool. Οπότε ας αφαίρεση του r από αυτό και να δούμε simple.js. Έτσι, αυτό είναι λίγο πολύ το ίδιο πρόγραμμα. Απλά το έγραψα λίγο διαφορετικά γιατί ήθελα να ταξινομήσετε του highlight ορισμένες δυνατότητες της JavaScript. Έτσι, παρατηρούμε ότι το αίτημα χειρισμού λειτουργία έχει εξαφανιστεί εντελώς. Αχ yep, είχατε μια ερώτηση; ΚΟΙΝΟ: Ναι, τα επιχειρήματα που μεταβιβάζονται προς εκείνη λειτουργία, ποια είναι αυτά; KEVIN SCHMID: Έτσι αυτά είναι JavaScript αντικείμενα. Στην τεκμηρίωση Node.js, το βασικά λέει ό, τι είναι οι μέθοδοι διατίθεται σε αυτές. Εμείς απλώς τυχαίνει να έχουν την πρόσβαση σε η μέθοδος αυτή ονομάζεται κεφαλή εγγραφής και το τέλος και τέτοια πράγματα. Αλλά υπάρχει ένα σωρό περισσότερες μεθόδους. Και για παράδειγμα, όπως ένα από αυτά ιδίως όσον αφορά rec, μπορείτε να κάνετε κάτι σαν rec.method οποία θα να σας πω αν είναι ένα HTTP πάρει ή HTTP μετά τις αιτήσεις και τέτοια πράγματα. Οπότε υπάρχουν όλα τα είδη των διαφορετικών ιδιότητες, αλλά είναι και οι δύο JavaScript αντικείμενα, και το μόνο που έχουν λειτουργίες που συνδέονται με αυτά που σας να γράψετε πράγματα που πρέπει να. Εντάξει; Έτσι, παρατηρούμε ότι το αίτημα χειρισμού είναι εντελώς φύγει. Όμως, ο κώδικας που είχα στο αίτημα handler είναι ακόμα εκεί. Εξακολουθώ να έχω αυτό το res.writeHead και εξακολουθώ να έχω αυτό το res.end. Και τι είναι αυτό ένα παράδειγμα σε JavaScript είναι η ιδέα ενός ανώνυμη συνάρτηση. και ανώνυμα είναι σαν ένα ταιριαστό όνομα γι 'αυτό, γιατί δεν το κάνει κυριολεκτικά έχει ένα όνομα. Δεν υπάρχει αίτημα λειτουργίας χειρισμού εκεί μέσα. Δεν έχει όνομα, αλλά ακόμα είναι λαμβάνοντας ένα επιχείρημα. Έτσι, ακόμα πήρα rec και ΑΠΕ. Και ακόμα έχω τον κωδικό. Αυτό είναι απολύτως εντάξει JavaScript κώδικα. Έτσι, μπορώ να δηλώσω μια λειτουργία χωρίς δίνοντας ρητά ένα όνομα. Είναι μια μικρή σύγχυση κατά την πρώτη. Υπάρχουν μερικά χρήσιμα πράγματα, όπως ότι μπορείτε να κάνετε με αυτά τα ανώνυμα λειτουργίες. Μήπως κάποιος έχει απορίες σχετικά με αυτό, ή είναι εντάξει απλά, για τώρα, το είδος ακριβώς αποδεχθεί ότι θα κάνουμε το ίδιο πράγμα; Ναι; ΚΟΙΝΟ: Οι λειτουργίες πρώτη τάξη σε JavaScript; KEVIN SCHMID: Θα είναι η πρώτη τάξη στην JavaScript. Και απλά να ξέρετε ότι αυτές οι έννοιες των περνώντας σε μια ανώνυμη συνάρτηση, όπως Αυτό ισχύει και για το ότι σας JavaScript μπορεί να γράψει στο τελικό σχέδιο σας για ο web browser πάρα πολύ. Έτσι, για παράδειγμα, στη JavaScript στο browser σας, είναι επίσης κάπως εκδήλωση οδηγείται υπό την έννοια ότι αυτό που θα έχουν είναι όταν ο χρήστης κάνει κλικ σε αυτό το κουμπί, θέλω να εκτελέσετε αυτόν τον κώδικα. Έτσι είναι το ίδιο είδος των ιδεών της πλευρά του πελάτη, όταν ένα κλικ του ποντικιού ή το ποντίκι πάνω από κάποιο εικόνα στον υπολογιστή σας ιστοσελίδα, εκτελέσετε αυτόν τον κώδικα. Αυτό μπορεί να ισχύει για servers. Έτσι, αυτό είναι κάτι σαν το συναρπαστικό λόγος για τον οποίο JavaScript είναι μια πραγματικά κατάλληλο ή μερικοί άνθρωποι πιστεύουν ότι είναι μια κατάλληλη γλώσσα για αυτό το είδος της εξυπηρετητή του οδηγού εκδήλωση επειδή έχετε αυτά τα ανώνυμα λειτουργίες. Έχετε την όλη ιδέα της αυτό το κώδικα ασύγχρονης. OK. Ο καθένας έχει οποιεσδήποτε ερωτήσεις; OK. Έτσι, αυτό ήταν simple.js. Ας ρίξουμε μια ματιά σε ένα πιο ή ένα ζευγάρι περισσότερο. Έτσι, αυτό είναι sleep.js. Έτσι, είναι κάποιος εξοικειωμένος με η C λειτουργία ύπνου; Από ίσως μία από τις προηγούμενες διαλέξεις ή κάτι τέτοιο; Έτσι, βασικά, μπορείτε να περάσετε το πιστεύω ότι μια αριθμό των δευτερολέπτων ή αν είστε με τη χρήση U κοιμηθείτε μια σειρά από χιλιοστά του δευτερολέπτου ή νανοδευτερόλεπτα. Και βασικά το πρόγραμμα θα σταματήσει μόνο τρέχει για το εν λόγω χρονικό διάστημα. Σωστά; Και τότε θα ξυπνήσει τελικά και τότε θα συνεχίσουμε απλά τρέχει το πρόγραμμα. Έτσι, αυτό το είδος του διακομιστή δίνει η εντύπωση του ύπνου. Έτσι, παρατηρούμε ότι έχουμε το ίδιο res.writeHead 200 με την επικεφαλίδα πριν, αλλά στη συνέχεια εμείς την αποκαλούμε αυτό λειτουργία που ονομάζεται σύνολο του χρονικού ορίου. Καθορισμός χρόνου αναμονής είναι επίσης διαθέσιμο σε web browser σας Google Chrome ή Safari ή οτιδήποτε άλλο. Και βασικά αυτό που κάνει εδώ είναι αυτό που παίρνει σε μια λειτουργία. Ανακοίνωση, πάλι, είναι μια ανώνυμη συνάρτηση. Έτσι, αυτό είναι το είδος της δροσερό, επειδή είμαστε χρησιμοποιώντας μια ανώνυμη συνάρτηση εντός ενός ανώνυμη συνάρτηση που μπορεί να είναι λίγο περίεργο. Αλλά παίρνει αυτή τη λειτουργία, η οποία είναι λέγοντας ουσιαστικά - και ο τρόπος με τον έργων είναι 5.000 χιλιοστά του δευτερολέπτου, θέλω μπορείτε να εκτελέσετε αυτή τη λειτουργία η οποία μόλις τελειώνει η απάντηση και γράφει hey. Έτσι, αυτό δίνει την εντύπωση, όπως ύπνο, αλλά ο τρόπος που αυτό πράγματι λειτουργεί είναι ότι θα τρέχει μέσα αυτή η γραμμή πολύ γρήγορα. Εμείς απλά γράφοντας κάτι. Και τότε επίσης θα τρέχει μέσα αυτή η γραμμή πολύ γρήγορα. Έτσι δεν κάνουμε στην πραγματικότητα πρόκειται να περιμένετε πέντε δευτερόλεπτα. Εμείς απλά θα τρέξει αυτόν τον κώδικα αμέσως. Και έπειτα υπάρχει, και πάλι, αυτό το μικρό βρόχο γεγονός που έχει τώρα αυτό το πράγμα μητρώα που ουσιαστικά είναι απλώς συνεχώς πηγαίνει γύρω σε έναν κύκλο και κοιτάζοντας το ρολόι σε ένα ενιαίο το νήμα και το ρητό, έχει πέντε δευτερόλεπτα πέρασε ακόμα; Και στη συνέχεια, όταν βλέπει ότι το δεύτερο πλευρά έχει μετακινηθεί σαν πέντε δευτερόλεπτα ή οτιδήποτε άλλο, τότε ξυπνάει και λέει, Ω, τι πρέπει να κάνω; Α, θα πρέπει να εκτελέσετε αυτόν τον κώδικα. Και στη συνέχεια, πρόκειται να τρέχει res.end hey. Έτσι και πάλι, είμαστε ποτέ περιμένουν εδώ. Έτσι δεν είναι ότι αυτός ο κώδικας στο εσωτερικό της αυτή η λειτουργία πρόκειται να πάρει πέντε δευτερόλεπτα για να τρέξει. Ο κωδικός αυτός θα τρέξει λίγο πολύ ακαριαία, τουλάχιστον σε σχέση με οι πέντε δευτερολέπτων που μιλούσαμε νωρίτερα πριν. Έτσι απλά για να το αποδείξει αυτό στην πράξη, Μπορώ να κάνω Node.sleep.js. Και έκανα χαλάσουν κάτι; Ενδεχομένως. Λυπάμαι. Ας δούμε τι μπορούμε να κάνουμε για να διορθώσετε αυτό. OK. Έτσι, σίγουρα χρησιμοποιούν Node.js. Αστειεύομαι. OK. Μισό λεπτό. OK. Ξέρω τι είναι. Έτσι, το θέμα είναι ότι σε άλλες καρτέλα μου εδώ, έτρεχα Κόμβος ήδη ότι η ίδια διεύθυνση, 1337. Έτσι, το σφάλμα ότι αυτό έριξε, αν κοιτάξουμε σε αυτό πραγματικό στενά, είναι η διεύθυνση στην χρήση, EADDRINUSE. Έτσι ήμουν ήδη χρησιμοποιούν 1337 εδώ. Έτσι, αν έχω κλείσει αυτό το off, και, στη συνέχεια, τώρα προσπαθήσει να τρέξει αυτό, ελπίζω, τα πάντα θα είναι μια χαρά. OK. Έτσι μπορείτε να έχετε μόνο ένα πράγμα είδος από ακρόαση στη θύρα ταυτόχρονα. Μια άλλη λύση θα ήταν για μένα να επεξεργαστείτε ακριβώς αυτό το πρόγραμμα και να κάνει αυτό είναι σαν 1338 ή κάτι τέτοιο όπως αυτό. Αλλά τώρα ο ύπνος λειτουργεί. Ας το δοκιμάσουμε στην πραγματικότητα στην το πρόγραμμα περιήγησης αυτήν τη φορά γιατί είναι μια μικρή ενθουσιώδη για να δείτε σε ένα τερματικό. Έτσι, είμαι απλώς πρόκειται να πάει με αυτό 127 Διεύθυνση και πάλι στο 1337. Και αν μπορείτε να το δείτε - Δεν ξέρω αν μπορείς - αλλά μου προγράμματος περιήγησης, λαμβάνοντας μια πολύ, πολύ καιρό χρόνο για να φορτώσει ή σαν πέντε δευτερόλεπτα. Και στη συνέχεια μετά από αυτό, τελικά έληξε την απάντηση. Και δεν μπορείτε να το δείτε γιατί το πράγμα μετακινείται πάνω από ένα μικρό, αλλά αν κάνω αυτό είναι λίγο μικρότερο, θα μπορεί να δει ότι λέει hey. Έτσι πήρα το hey, αλλά μετά από πέντε δευτερόλεπτα. Και θα μπορούσε να είναι λίγο καθαρότερο για να δείτε εδώ στο τερματικό, έτσι είμαι πρόκειται να κάνει μια - ας κάνουμε εδώ - ας κάνουμε Curl αυτή τη διεύθυνση πάλι με το 1337. Και εγώ ακριβώς το είδος του πρέπει να καθίσει εδώ για πέντε δευτερόλεπτα. Να σημειωθεί όμως ότι ο διακομιστής μπορεί να δεχθεί νέες απαντήσεις. Γι 'αυτό εκτυπώνει hey. Και το demo αυτό, βασικά αυτό που Μπορώ να κάνω σε αυτή την άλλη καρτέλα - οπότε ας πούμε ότι το κάνετε αυτό σε άλλη καρτέλα, Πάω να κάνω Curl και το ίδιο πράγμα ξανά. Και Πάω να προσπαθήσει να κλωτσήσει αυτά παιδιά μακριά την ίδια στιγμή. Έτσι, Πάω να το κάνετε αυτό, και είμαι πρόκειται να αγωνιστεί εδώ και είμαι πρόκειται να το ξανακάνω. Και ας το κάνει, έτσι ώστε να μπορεί να δει και τα δύο. Εκείνο το ένα τυπωμένο hey και ότι μία τυπωμένο hey σε όλη τη διαδρομή σε - ας κάνουμε πάλι το πείραμα. Στην πραγματικότητα, ας χρησιμοποιήσουμε αυτή τέχνασμα, αν αυτό είναι εντάξει. Έτσι, Πάω να χρησιμοποιήσετε ένα πράγμα κέλυφος που μου επιτρέπει να τρέξει βασικά δύο αντίγραφα αυτού του προγράμματος παράλληλα. Γι 'αυτό θα τρέξει το πρώτο πρόγραμμα και το δεύτερο πρόγραμμα παράλληλα. Έτσι τώρα, αν πατήσω Enter, πρόκειται να κάνει το αίτημα αυτό λίγο πολύ ακαριαία την ίδια στιγμή. Οπότε ας δώσει σε αυτό έναν πυροβολισμό. Έτσι, σήμερα παρατηρούμε ότι λέει δύο διαδικασίες. Και αν είστε περίεργοι, ότι 27.000 αριθμός είναι βασικά η διαδικασία ID. Και στη συνέχεια παρατηρήσετε, τύπωναν Hey ταυτόχρονα. Δεν ήταν σαν να έπρεπε να περιμένουν πέντε δευτερόλεπτα για ένα και στη συνέχεια μετά από αυτό, πέντε δευτερόλεπτα αργότερα να πάρει τη δεύτερη. Έτσι, αυτό είναι το είδος της, κατά κάποιο τρόπο, είναι δεν είναι πραγματικά απόδειξη, αλλά είναι διαισθητική απόδειξη ότι δεν είναι μόνο σαν να περιμένουν πέντε δευτερόλεπτα και κλείδωμα ολόκληρο το νήμα. OK δροσερό. Έτσι, ο Ααρών μια ερώτηση νωρίτερα ότι ήταν, αλλά τι γίνεται αν εμείς κάνουμε κάτι - Ναι; ΚΟΙΝΟ: Περιμένετε. Πώς είναι ότι διαφέρει από ρυθμιστικό printf, όμως; Δεν το κάνει αυτόματα αυτό; Γιατί πρέπει να ανησυχείτε γι 'αυτό; KEVIN SCHMID: Ω, θα μπορούσε να σας να πω ότι για μια ακόμη φορά; ΚΟΙΝΟ: Δεν ήθελα ρυθμιστικό printf κάνουν ακριβώς το ίδιο πράγμα; KEVIN SCHMID: Το ρυθμιστικό printf; ΚΟΙΝΟ: Ναι. OK. Δεν ήταν σε ένα από τα κουίζ ήταν μιλάμε για το πώς, αν το δικαίωμα printf κάτι και στη συνέχεια να έχουν μια παύση δεύτερο, και στη συνέχεια να το έχετε βρόχο δέκα φορές, θα περιμένετε δέκα δευτερόλεπτα και printf στη συνέχεια όλα μαζί; KEVIN SCHMID: Ω, εντάξει. ΚΟΙΝΟ: Είναι κάνει το ίδιο πράγμα τότε σε αυτή την περίπτωση; KEVIN SCHMID: Άρα το ερώτημα ήταν βασικά σε μία από τις πρώην κουίζ ή κάτι τέτοιο, υπήρχε μια ερώτηση που βασικά αν πεις εκτύπωσης f 10 τα πράγματα σε έναν χρόνο και στη συνέχεια κοιμήθηκε σαν σε η διαδικασία της εκτύπωσης τα έξω, στο τέλος για κάποιο λόγο, θα ήταν απλά χωματερή εκείνες όλοι έξω στην οθόνη. Έτσι, υπάρχει το είδος των δύο διαφορετικών έννοιες εδώ. Έτσι υποθέτω ότι ένα πράγμα είναι ότι, σε αυτό το περίπτωση, έχουμε να κάνουμε με δύο διαφορετικά το είδος των ανθρώπων που ζητούν το διακομιστή δραστηριότητες ταυτόχρονα. Και ο λόγος που το είδος της printf περιμένει, όπως και ότι χωματερές όλα έξω ταυτόχρονα είναι πιο σχετικές με πώς το είδος της printf - έτσι ώστε ο τρόπος printf είναι στην πραγματικότητα εφαρμοστεί είναι ότι έχει ουσιαστικά να μιλήστε με το λειτουργικό σύστημα για να γράψει ότι τα πράγματα στην κονσόλα. Γι 'αυτό δεν θέλω να κάνω όλα αυτά πράγματα αμέσως όταν λέτε printf κάποια σειρά, επειδή αυτό θα μπορούσε να να πάρει ακριβό αν πρέπει να το κάνουμε αυτό κάθε φορά. Έτσι, αν κάνετε printf hey, το πρόγραμμά σας δεν μπορεί στην πραγματικότητα να εκτυπώσετε ότι αμέσως στην κονσόλα. Θα μπορούσαμε να πούμε, εντάξει, εγώ το έγραψα. Και στη συνέχεια το είδος της σας περιμένουν για να δώσει λίγο πιο πριν στην πραγματικότητα γραπτώς έξω στην κονσόλα. Έτσι, ο λόγος ότι αυτή ήταν η περίπτωση - και αυτό είναι το είδος των μη συνδεδεμένων για τον ύπνο - είναι ότι ο ύπνος ήταν το είδος ακριβώς εγχέεται εκεί για να καταδειχθεί η γεγονός ότι δεν γράφει είναι συγχρονισμένα. Αλλά ο λόγος για αυτό είναι μόνο απόδοσης, έτσι ώστε να μην χρειάζεται να κάνει πολλές επαφές με το λειτουργικό σύστημα. Αλλά εδώ, αυτό που προσπαθούμε να κάνουμε με αυτό το πράγμα ύπνος είναι απλώς show ότι όταν έχουμε δύο ανθρώπους που επισκέπτονται αυτή την ιστοσελίδα, δεν πρόκειται να θέσει τους σε μια γραμμή όπου πρόκειται να πω Έχω να σας βοηθήσει, και στη συνέχεια, όταν είμαι τελειωμενη βοηθώντας σας μετά από αυτές τις πέντε δευτερόλεπτα και, στη συνέχεια, Πάω να προχωρήσουμε στο επόμενο πρόσωπο. Έτσι, το αίτημα του πρώτου προσώπου δεν δένουν ότι βρόχο εκδήλωση αν αυτό έχει νόημα. Αλλά εδώ είναι πραγματικά ένα παράδειγμα κάτι που θα συνδέσει μέχρι το βρόχο εκδήλωση. Έτσι, εδώ είναι μια φρικτή λειτουργία για να υπολογίσουμε το νιοστό Fibonacci. Είναι κυριολεκτικά το χειρότερο τρόπο μπορείτε υπολογίσουμε το νιοστό αριθμό Fibonacci. Και αυτό είναι πραγματικά μόνο για να αναγνωρίσουμε όπου αυτό προήλθε από, υπάρχει στην πραγματικότητα - Θέλω να πω, μπορείτε να προσπαθήσετε να πάτε να βρείτε - αλλά υπάρχει σαν μια πολύ μακρά blog υστέρων ότι κάποιος έγραψε. Είναι σαν ένα από εκείνα τα πράγματα Reddit. Αλλά κάποιος επέκρινε Node.js, και χρησιμοποίησαν αυτό ως παράδειγμα. Γι 'αυτό το είδος ήθελε να σας δείξω μόνο δύο διαφορετικές οπτικές γωνίες για να πάρει ακριβώς μια γενική κατανόηση των εννοιών πίσω από αυτά τα δύο πράγματα. Αλλά αυτό έχει επιλεγεί ως απλά μια φρικτή, Σκληρό αναποτελεσματική υπολογιστικά εντατικό τρόπο για να υπολογίσουμε το νιοστό αριθμό Fibonacci. Έτσι ακριβώς όπως μια πλευρά σημείωση, γιατί είναι το φρικτό, όπως σε ένα τρόπο; Ναι; ΚΟΙΝΟ: Πείτε ξεκινήσετε έξω με 1000. 1.000 χωρίζει στα 999 και 998. Κάθε ένα από αυτό χωρίζεται σε δύο πράγματα. Κάθε ένα από αυτό χωρίζεται σε δύο πράγματα. KEVIN SCHMID: Σωστά. ΚΟΙΝΟ: Όλος ο τρόπος κάτω. KEVIN SCHMID: Ακριβώς. Έτσι απλά για να επαναλάβω για την κάμερα, αν καλέστε ψεματάκι για 1.000 ή σαν κάτι έτσι, δεν είναι προφανώς λιγότερο από ό, τι ή ίση με ένα, έτσι Πάω να πηγαίνω σε αυτήν την περίπτωση οι άλλοι, και στη συνέχεια θα πάω να καλέσετε ψεματάκι 999 συν 998 ψεματάκι. Και στη συνέχεια, λίγο πολύ όλα αυτά έργο που ψεματάκι 999 δεν είναι το είδος της σε αυτό το επίπεδο. Αν πάτε προς τα κάτω, είναι ακόμη πιο περιττή από αυτό, αλλά αν απλά σκεφτείτε υπολογιστών fib 998 παίρνει μας πολύ κοντά σε ψεματάκι 999. Γι 'αυτό πρέπει πραγματικά να είναι λίγο πιο έξυπνος για το πώς το είδος της επαναχρησιμοποίησης αυτά, αλλά δεν είμαστε επαναχρησιμοποίηση αυτά τα πράγματα καθόλου. Έτσι μπορείτε να φανταστείτε αυτό το γιγάντιο, γιγαντιαίο δέντρο που είναι ακριβώς φρικτό. Αλλά έτσι κι αλλιώς, OK. Έτσι, αυτό ήταν fib. Χρειάζεται μόνο μια στιγμή για να τρέξει. Ναι; ΚΟΙΝΟ: [δεν ακούγεται]. KEVIN SCHMID: Ω, θα μπορούσε να σας επαναλάβω την ερώτηση; ΚΟΙΝΟ: [δεν ακούγεται]. KEVIN SCHMID: Oh so αυτό είναι μόνο κώδικας ότι πρόκειται να είναι το είδος του σχετικά με την πλευρά του server. Έτσι, αυτό δεν πρόκειται να βρεθεί στο πρόγραμμα περιήγησης ή οτιδήποτε άλλο. Είναι βασικά αυτό που έχουμε είναι ότι όταν ο χρήστης εδώ λίγο πολύ μάρκες αίτησή τους και πάλι, όταν το είδος της υποβάλουν αίτηση, θα πάμε για να καλέσετε αυτή η λειτουργία στην πλευρά του διακομιστή. Και τότε θα πάρει το αποτέλεσμα πίσω από την κλήση αυτής της λειτουργίας. Και τότε θα εκτυπώσετε μόνο στο χρήστη. Έτσι, ο χρήστης δεν πραγματικά να ασχοληθεί με αυτή τη λειτουργία πάρα πολύ. Ήταν ότι η ερώτηση; Μήπως αυτό έχει νόημα; OK. Cool. Έτσι και πάλι, κάνουμε όλο αυτό res.writeHead πράγμα όπου θα εκτυπώσετε η επικεφαλίδα. Και τότε θα τελειώσει την απάντηση κάνοντας ο μαγικός αριθμός είναι fib 45. Οπότε ας τρέχουν σε αυτόν το διακομιστή. Έτσι, Πάω να κάνω μια fib.js. κόμβου Έτσι τώρα διακομιστής fib μου τρέχει. Και τότε εδώ, Πάω να κάνει ένα από αυτά. Εντάξει; Έτσι, είμαι απλώς πρόκειται να πω, Curl. Έτσι πρόκειται να πάρει λίγο χρόνο, αλλά ελπίζουμε ότι σύντομα θα τελειώσει και θα εκτυπώσει ότι η 45η Fibonacci αριθμό. ΚΟΙΝΟ: [δεν ακούγεται]. KEVIN SCHMID: Θα πρέπει να γίνει πολύ σύντομα. Γι 'αυτό πρέπει να χρειαστούν πέντε έως έξι δευτερόλεπτα. Δεν ξέρω πως ακριβώς V8 είναι super γρήγορα, αλλά σε κάθε περίπτωση, αυτό είναι ένα πολύ σύντομο παράδειγμα και εσκεμμένα άκομψο από μη τετριμμένη υπολογισμού. Έτσι, μετά από λίγο, δεν πάρει αυτό. Αλλά τώρα, τι και αν κάνω το ίδιο είδος πείραμα όπως πριν, όπου κάνω δύο αιτήσεις κατά την ίδια στιγμή; Εδώ, λοιπόν, πάω σε μια μπούκλα σε ότι η διεύθυνση, και θα πάω να κάνουμε μια άλλη Curl. Και να θυμάστε, όταν το κάναμε αυτό για το ύπνο του διακομιστή, όταν είχε ουσιαστικά μετά από πέντε δευτερόλεπτα, που λίγο πολύ δύο ήρθαν πίσω δεξιά περίπου την ίδια ώρα. Έτσι, δεν ήταν ιδιαίτερα δεμένος. Αλλά ας το προσπαθήσουμε τώρα. Εντάξει, έτσι έχουμε δύο διαδικασίες μας. Να θυμάστε ότι αυτά είναι τα αναγνωριστικά διαδικασίας. Αυτό πρόκειται να είναι λίγο αμήχανη, ενώ εμείς σταματήσει. Οπότε ας μείνουμε εδώ και να περιμένουμε. Έτσι, ένας από αυτούς θα πρέπει να έρθει πίσω μετά, όπως - ΕΝΤΑΞΕΙ, έτσι ήρθε πίσω. Αλλά τότε γιατί να μην έκανε το δεύτερο ένα επανέλθω λίγο ακόμα; Ναι; ΚΟΙΝΟ: Ο διακομιστής δεν μπορεί να κάνει τίποτα ενώ είναι υπολογίζοντας ότι μεγάλος αριθμός. KEVIN SCHMID: Σωστά. Έτσι, η απάντηση ήταν ακριβώς ότι ο διακομιστής Πραγματικά δεν μπορούμε να κάνουμε τίποτα, ενώ είναι υπολογίζοντας τον αριθμό Fibonacci. Έτσι τώρα πήρα μόνο δύο πράγματα μου πίσω. Αλλά υποθέτω ότι απλά πρέπει να σκεφτεί για τον κώδικα λίγο περισσότερο, πώς λειτουργεί και τα πάντα. Έτσι, η λειτουργία αυτή εδώ είναι ο κώδικας που Έχω πει αυτό το server να τρέχει όταν λαμβάνει μια νέα εισερχόμενη αίτηση. Γι 'αυτό ακριβώς πρόκειται να τρέχει μέσα από αυτό ολόκληρο τον κώδικα, και στη συνέχεια πρόκειται να πάει πίσω στο βρόχο εκδήλωση και στη συνέχεια να συνεχίσει έλεγχο για νέα συμβάντα. Έτσι, βασικά αυτό που έχουμε να συμβεί είναι ο server είναι ακούγοντας για νέα πράγματα. Το πρώτο πρόσωπο που ζητά γι 'αυτό 45 είναι. Εμείς τρέχουμε τον κώδικα για να το υπολογίσετε. Ο κωδικός αυτός διαρκεί περίπου πέντε έως έξι δευτερόλεπτα για να τρέξει. Στη συνέχεια, πάμε πίσω στο βρόχο εκδήλωση και να ελέγξετε για νέες αιτήσεις. Έτσι, αυτό είναι ένα παράδειγμα του πώς, εάν έχουν τα πράγματα που είναι τα λεγόμενα υπολογιστική δεσμεύεται, ή να χρησιμοποιήσετε μια πολύ υπολογιστική, Δεν εξουσία, αλλά όπως είναι υπολογιστικά εντατική - Υποθέτω ότι ένα πράγμα να πει γι 'αυτό είναι ότι αυτή η λειτουργία είναι να κάνει εντελώς, ως επί το πλείστον, αρκετά χρήσιμο σωστή δουλειά. Το σύνολο του χρόνου ότι επανάκλησης λειτουργία έτρεχε, ήταν αρκετά πολύ ξοδεύουν τον περισσότερο χρόνο του μόνο computing αριθμός που πολλοστή Fibonacci. Αλλά είχαμε μόνο ένα νήμα να αντιμετωπίσουμε. Στο μοντέλο Apache, όταν δύο άτομα υπέβαλε το αίτημα να πάρει ψεματάκι 45, θα θα είχε δύο διαφορετικά θέματα. Και τότε η δουλειά του λειτουργικού συστήματος θα ήταν, ή το επίπεδο των χρηστών κώδικα που διαχειρίζεται τα θέματα, θα έχουμε ήταν να χωρίσετε ότι μέχρι σχετικά με την CPU, ή ακόμα και αν είχαν πολλαπλές CPUs, διανείμετε ομοιόμορφα σε όλη την CPUs έτσι ώστε και οι δύο φινίρισμα περίπου την ίδια στιγμή. Έτσι απλά για να σας δείξει πώς μπορούμε να λύσουμε από - και αυτό δεν είναι ένα σύνολο τέλειο λύση, αλλά το είδος του πώς μπορούμε να κάνουν μια επανέλθω εδώ και να κάνουμε λίγο καλύτερα. Έτσι, αυτό που έχουμε εδώ είναι ένα πρόγραμμα που ονομάζεται Ψεματάκι C. Και αυτό χρησιμοποιεί βασικά άλλο ένα από τα modules κόμβου ονομάζεται Η διαδικασία Παιδί Module. Έτσι έχω συμπεριληφθεί ότι στην κορυφή του είδους σαν θα ήθελα να κάνω μια λίβρα περιλαμβάνουν process.h παιδί ή κάτι τέτοιο. Τώρα έχω πρόσβαση σε αυτή τη μεταβλητή CP η οποία έχει όλες τις λειτουργίες μου. Και τώρα τι κάνω σε αυτή την απάντηση handler είναι Τρέχω αυτό το πρόγραμμα dot κάθετος fib 45. Έτσι, αυτό που έχω κάνει - και είμαι απλώς πρόκειται να βγει από αυτό το πρόγραμμα για την λίγο - Είναι Έχω γράψει ένα πρόγραμμα C που βασικά υπολογίζει το νιοστό αριθμό Fibonacci. Έτσι, εδώ είναι μόνο ένα πρόγραμμα που έχω γράψει σε C που υπολογίζει αυτό. Μπορώ να το υπολογίσουν, και μπορώ να τρέξω είναι στη γραμμή εντολών. Και πρόκειται να υπολογίσει το Αριθμός 45η Fibonacci. Έτσι παρατηρήσετε ότι παίρνει μόνο λίγο πολύ όσο χρονικό διάστημα. Εγώ κατά πάσα πιθανότητα θα μπορούσε να χρησιμοποιηθεί παύλα 03 έως βελτιστοποίηση ή κάτι τέτοιο, αλλά εγώ απλά έκανα σαν κανονικό ρυθμίσεις compiler. Και εκτυπώνει. Αλλά τώρα, τι είμαι το είδος του κάνει; Αχ συγνώμη, λάθος αρχείο. Γι 'αυτό και κάνουν τα ίδια πράγματα με η επικεφαλίδα πριν. Στη συνέχεια, κάνω αυτό cp.exec. Έτσι αυτό πρόκειται να κάνουμε είναι να είναι πρόκειται να τρέξει αυτό το πρόγραμμα. Αλλά ο τρόπος με τον οποίο δουλεύει αυτό είναι δεν πρόκειται να περιμένει για αυτό το πρόγραμμα για να ολοκληρωθεί. Λέει απλά βασικά εκτέλεση του προγράμματος. Έτσι, πληκτρολογήστε βασικά αυτό σε το γραμμή εντολών είδος. Και στη συνέχεια, όταν τελειώσετε με αυτό, εκτελέστε αυτή τη λειτουργία. Έτσι τώρα έχουμε το είδος του να πάρει αυτό ολόκληρη αποκατασταθεί πράγμα όπως δεν είμαστε σε αναμονή. Μήπως αυτό το είδος της νόημα; Ναι; ΚΟΙΝΟ: [δεν ακούγεται]; KEVIN SCHMID: Έτσι, αυτό θα είναι πράγματι ανοίξει μια νέα διαδικασία για να το κάνουμε. Έτσι αυτό είναι στην πραγματικότητα, με κάποιους τρόπους, το κακό, δεν είναι σούπερ κακό, αλλά είναι σημαντικό να πούμε ότι αυτό είναι το είδος της πηγαίνει πίσω, από τη μια πλευρά, η Apache μοντέλο όπου κάνουμε τα θέματα και τις διαδικασίες για κάθε αίτηση ή διεργασίες για κάθε αίτηση. Έτσι, αυτό είναι το είδος της ανάλογης σε ό, τι κάνει Apache. Σε ορισμένες περιπτώσεις, θα χρησιμοποιήσει μόνο ένα νέο νήμα, το οποίο είναι λίγο περισσότερο φως βάρος από μια διαδικασία, αλλά θα μπορούσε Apache καταλήγουν διακλάδωση μια νέα διαδικασία το οποίο είναι το είδος του τι κάνουμε εδώ εμμέσως, κάνοντας dot κάθετο fib 45. Και στη συνέχεια, στην περίπτωση αυτή, έχουμε το είδος των επιβαρύνονται οι ίδιες έξοδα των διαδικασιών. Έτσι, αυτό είναι μόνο ένα πράγμα που μπορείτε να κάνετε. Αλλά ακριβώς για να δείξει αυτό το είδος της λειτουργίας. Και αυτή η συζήτηση είναι ακριβώς πραγματικά στοχεύουν στην παρουσιάζουν αυτά τα είδη των προγραμμάτων ως τρόπος για να δείξει διαφορετικές προοπτικές για πώς να σχεδιάσουν servers όπως αυτό. Έτσι, αυτό είναι το τρέξιμο, και στη συνέχεια, τώρα αν κάνω Αυτό πάλι, πήρα δύο αναγνωριστικά διαδικασία. Ας μιλήσουμε για πράγματα που πρέπει να επισημάνουμε. Έτσι, παρατηρούμε ότι είναι σταδιακά. Αυτό είναι δροσερό. Επειδή ήταν 27.122 πριν. Αλλά προσέξτε τώρα, επέστρεψαν περίπου στο ίδιο χρονικό διάστημα. Και τώρα, μια καλή ερώτηση για να ρωτήσω για γιατί ήταν ότι η υπόθεση είναι, του οποίου η δουλειά ήταν τώρα να ταξινομήσετε του κάνει αυτά τα πράγματα είδος του παιχνιδιού με κάθε θεμιτό άλλες, αυτές οι δύο περιπτώσεις dot κάθετος fib 45 που έτρεξα ή ότι έτρεξε κόμβου; Ποιος είδους καθιστά εύλογη ότι και οι δύο να πάρει το είδος της με βάση το χρόνο εκτέλεσης; ΚΟΙΝΟ: [δεν ακούγεται]. KEVIN SCHMID: Ναι. Έτσι, βασικά, όταν κάνω dot κάθετος fib 45 ή κάτι τέτοιο, τώρα είναι είδος του μέχρι το λειτουργικό σύστημα για χειριστεί το χρόνο εκτέλεσης των προγραμμάτων αυτών. Και τώρα μπορεί να τους προγραμματίσετε σε διαφορετικούς επεξεργαστές ή μπορεί να τους προγραμματίσετε. Μπορεί να κόψει μέχρι και την ώρα που κάποιος CPU παίρνει ή που παίρνουν να τρέχει σε έναν επεξεργαστή. Έτσι, αυτή είναι η ιδέα πίσω από αυτό. Μήπως αυτό έχει νόημα για όλους; Έτσι τώρα κόμβου δεν είναι πραγματικά παίζει μέρος ο καταμερισμός των καθηκόντων αυτών. OK. Έτσι, αυτό είναι σχεδόν αυτό για τα παραδείγματα. Ήθελα απλώς να δείξει ένα πράγμα επειδή πολλά από αυτά μέχρι τώρα ήταν όχι εντελώς σούπερ πρακτικό σε ορισμένες περιπτώσεις. Μπορώ να φανταστώ γυρνάς σπίτι μετά από αυτό να μιλήσει και κάτι σαν και λέγοντας, καλά εγώ το είδος πήρε από αυτά τα λόγια που Μπορώ να κάνω ένα διακομιστή Fibonacci για τελικό σχέδιο μου. Έτσι, εδώ είναι ακριβώς το είδος του ένα ακόμη παράδειγμα ώστε να ελπίζουμε ότι θα είναι - ίσως όχι, αλλά ίσως - λίγο περισσότερο το είδος των σχετικών με τελικών σχεδίων και σκέφτεται το μέλλον για τέτοια πράγματα. Έτσι, αυτό είναι chat.js. Έτσι, αυτό είναι το είδος του αρέσει κάποιο δείγμα του διακομιστή κωδικό πλευρά που θα μπορούσατε να χρησιμοποιήσετε για να δημιουργήσει ένα μικρό διακομιστή συνομιλίας, όπως μπορεί να έχετε δει για το Facebook Chat ή οτιδήποτε άλλο. Γι 'αυτό δεν λέω ότι αυτό είναι όπως το Facebook Συνομίλησε, αλλά αυτό είναι το είδος της σαν ένα καλό - ίσως δεν είναι καλό, αλλά ίσως αφετηρία για ένα chat - καλό server για την ιστοσελίδα σας για ένα τελικό σχέδιο. Ας ρίξουμε μια ματιά σε αυτό που κάνει. Έτσι παίρνουμε αυτό το ιδιαίτερο πράγμα στην κορυφή, αυτό var SIO ισούται απαιτούν Socket.IO. Έτσι, αυτό είναι ένα άλλο πράγμα που δεν το κάνει στην πραγματικότητα έρχονται συσσωρευμένος με Κόμβου, αλλά μπορείτε να το εγκαταστήσετε. Είναι μια μονάδα κόμβου. Έτσι είναι ακριβώς όπως μερικοί επέκταση κόμβου. SocketIO είναι πραγματικά πολύ είδος δροσερό. Είναι μια αφαίρεση που βασικά αυτό που κάνει είναι να είναι αυτό που επιτρέπει την έχουν αυτό το ρεύμα της επικοινωνίας μεταξύ ενός web browser και ένα web server. Έτσι, ως επί το πλείστον μέχρι σήμερα, είχαμε αυτά τα πολύ γρήγορη ένα δευτερόλεπτο ή δύο δεύτερη επικοινωνία μεταξύ ενός web browser και το web server. Έτσι είναι βασικά πηγαίνετε στο google.com, get τα πράγματα, να το στείλετε πίσω, και στη συνέχεια τελειώσαμε. Είμαστε δεν μιλάμε ξανά έως ότου η πληκτρολογεί ο χρήστης σε κάτι άλλο. Αλλά τι Socket.IO και παρόμοιο είδος πράγματα - και SocketIO είναι στην πραγματικότητα ένα από τα πράγματα που είναι χτισμένο πάνω ως WebSocket το οποίο είναι το είδος των διαθέσιμων ως μέρος της HTML5 - που σας επιτρέπει να έχετε αυτό συνέχιση του διαλόγου. Και αυτό είναι πολύ χρήσιμο σε ένα διακομιστή συνομιλίας το είδος του πράγματος, διότι είναι σαν ένα είδος συνέχιση του διαλόγου σε μερικοί τρόποι γιατί αν είστε κουβέντα με κάποιον, μπορείτε απλά να στείλετε ένα μήνυμα κάτω από το σωλήνα, και στη συνέχεια το server μπορεί να στείλει ένα μήνυμα προς τα κάτω το σωλήνα με το άλλο πρόσωπο είστε κουβεντιάζοντας με. Και τότε μπορείτε να έχετε αυτό το ανταλλάσσουν έτσι. Έτσι, αυτό είναι το είδος του τι SocketIO είναι καλό για. Ο λόγος που χρησιμοποιεί SocketIO WebSockets ως ένα πράγμα είναι ότι σε Εκτός από απλά παλιά WebSockets, κάνει επίσης μερικά κόλπα για να βασικά είναι συμβατό το πρόγραμμα περιήγησης. Έτσι browsers όπως ο Internet Explorer δυστυχώς δεν υποστηρίζουν WebSockets δεξιά από το κουτί. Γι 'αυτό χρησιμοποιεί κάποιο άλλο είδος δροσερό τακτοποιημένο τα πράγματα με το Adobe Flash για να επιτρέψει να έχετε υποστήριξη για cross browser. Έτσι, αυτό είναι πραγματικά χρήσιμο. Και στην πραγματικότητα, ξέρω ότι είμαι το είδος του τρέχει στο χρόνο εδώ, αλλά CS50 Συζητήστε, έχετε δει ποτέ κάτι όπως, δεν ξέρω, κενό έτσι και έτσι είναι απάντηση σε αυτή τη θέση ή κάτι έτσι, αυτό το χαρακτηριστικό; Αυτό είναι SocketIO. Έτσι, όταν κάποιος ξεκινά πληκτρολογώντας το συζητήσουν το πλαίσιο για να κάνει μια απάντηση, ή κάτι, το πρόγραμμα περιήγησής σας κάνει ό, τι είναι κάλεσε SocketIO εκπέμπει κάποιο είδος γεγονός που λέει κάποιος ότι είναι απάντηση σε αυτή τη θέση. Στη συνέχεια, ο διακομιστής λέει, εντάξει, τι πρέπει να κάνω; Καλά τώρα έχω να πω αυτά τα άλλα παιδιά που βρίσκονται σε CS50 Συζητήστε ψάχνετε σε αυτή τη θέση ότι κάποιος είναι απάντηση. Έτσι, αυτό είναι το είδος του τι είναι SocketIO καλό για, αυτό το είδος της συνεχιζόμενης ροή του διαλόγου. OK. Έτσι, αυτό που έχουμε εδώ - και είμαστε μόλις πρόκειται να αγνοήσει τον πίνακα συνδέσεων για λίγο - αυτό που κάνω είναι να κάνω μια άλλη ακούσετε. Έτσι, αυτός είναι ακριβώς ο τρόπος με τον Socket.IO είναι λέγοντας ας ακούσουμε σε αυτή τη θύρα. Και τότε κάνω αυτό σχετικά με τη σύνδεση. Έτσι, αυτό είναι μόνο βασικά Socket ΔΟ τρόπος για να πούμε, όταν λάβουμε μια σύνδεσης, θέλω για να εκτελέσετε αυτόν τον κώδικα. Και παρατηρήσετε ότι αντί να rec ΑΠΕ και πέρασε εκεί έχω Socket. Και αυτό Socket ιδέα είναι βασικά αυτό πράγμα που μπορείτε να γράψετε και να διαβάσετε από ότι έχει το χρήστη μηνύματα, ενδεχομένως. Και τα μηνύματα που θα στείλει να πάτε μέσω αυτού του Socket. Μήπως αυτό έχει νόημα; Έτσι είναι αυτή η συνεχής πράγμα. Έτσι, αυτό που κάνω είναι να καλέσετε Socket.emit. Και εκπέμπουν παίρνει λίγο πολύ δύο επιχειρήματα. Το πρώτο επιχείρημα είναι ένα string απλά αντιπροσωπεύει τον τύπο του πράγμα είστε εκπομπής. Έτσι, για την περίπτωση αυτή, έχω χρήσης αυτή η συμβολοσειρά νέο μήνυμα. Και αυτό είναι μόνο βασικά λέγοντας ότι το είδος του αυτό το πράγμα, τι είμαι αποστολή, είναι ένα νέο μήνυμα. Έτσι, μπορείτε να ακούσετε για συγκεκριμένους τύπους σαν νέο μήνυμα ή οτιδήποτε άλλο χρησιμοποιώντας κουκκίδα στο. Έτσι, τη σύνδεση και ο χρήστης έστειλε εκεί, αν κοιτάξετε, όπου καλούμε κουκκίδα στο, αυτά είναι άλλες χορδές που αντιπροσωπεύουν τύπους μηνυμάτων του χρήστη. Έτσι είναι βασικά μπορείτε να έχετε αυτό το emit ένας από αυτούς τους τύπους μηνυμάτων, και συνέχεια να κάνουμε κάτι για την αντιμετώπιση ένας από αυτούς τους τύπους μηνύματος Έτσι είμαι εκπέμπουν αυτό το νέο μήνυμα. Εμείς πάμε για να αγνοήσει connections.push για ένα δευτερόλεπτο. Στη συνέχεια, όμως λέω, έστειλε Socket.on χρήστη. Έτσι, τώρα είναι κάτι σαν όταν η χρήστη μου στέλνει ένα μήνυμα, θέλω μπορείτε να εκτελέσετε αυτόν τον κώδικα. Και να παρατηρήσετε ότι η ανώνυμη συνάρτηση λαμβάνει στη μεταβλητή αυτή ονομάζονται στοιχεία τα οποία είναι βασικά πρόκειται να έχει το μήνυμα του χρήστη. Έτσι, τώρα ας το είδος της ομιλίας για η σειρά των συνδέσεων. Έτσι, αυτό είναι σχεδιασμένο για έναν πελάτη συνομιλίας όπου ουσιαστικά όλοι είναι είδος σε το ίδιο δωμάτιο συνομιλίας. Έτσι, βασικά, αυτό που πρέπει να κρατήσει είναι γύρω από κάποια διάταξη που ουσιαστικά αντιπροσωπεύει όλους τους ανθρώπους να συζητάνε σε μερικοί τρόποι, αν αυτό έχει νόημα. Σωστά; Επειδή πρέπει να γνωρίζουμε ποιος αυτούς τους τύπους είναι έτσι μπορούμε να τους στείλουμε τα μηνύματα ότι οι άλλοι άνθρωποι να μας στείλετε. Έτσι τι αυτός ο κώδικας δεν είναι όταν ο χρήστης στέλνει ένα μήνυμα - αυτό είναι το είδος του η εκδήλωση - θα πάμε να εκτελέσετε αυτόν τον κώδικα. Και αυτό που κάνουμε είναι να τρέχει μέσα από αυτό πίνακα που ζητήσαμε συνδέσεις. Και λίγο πολύ για κάθε σύνδεση εκτός από αυτό που είναι δικό μας, που είναι τι λέει αυτός ο κώδικας, πρέπει να στείλετε ένα νέο μήνυμα με αυτό το συνημμένο μήνυμα πληροφορίες. Έτσι, αν παρατηρήσετε εδώ, τι έκανα όταν ο χρήστης κάνει πραγματικά μια νέα σύνδεση έχω προσθέσει με το Μέθοδος JavaScript.push, αυτό είναι βασικά ακριβώς όπως λέγοντας προσθήκη ότι Socket ως αξία σε array συνδέσεις μας. Μέχρι τώρα, όταν αυτός ο κώδικας εκτελείται, θα να στείλετε τα πράγματα σε εκείνους συγκεκριμένο συνδέσεις. Έτσι, αυτό μπορεί να είναι ένα καλό σημείο εκκίνησης για την κατασκευή ενός διακομιστή συνομιλίας ή κάτι παρόμοιο. Και το είδος της δροσερό πράγμα είναι ότι η κωδικό που βλέπετε εδώ, όπως και στις εκπέμπουν και τα πράγματα όπως ότι είναι η ίδια είδος κώδικα JavaScript που θα κάνατε γράψετε στο πρόγραμμα περιήγησης για να αλληλεπιδράσουν με το διακομιστή. Έτσι, γι 'αυτό SocketIO είναι το είδος του τακτοποιημένη και χρήσιμα με αυτόν τον τρόπο. Αχ και μόνο ένα περισσότερο πράγμα πραγματικά γρήγορα. Υπήρξε μια CS50 τελικό σχέδιο του περασμένου έτους ότι εφαρμόζονται ουσιαστικά μια συνομιλία διακομιστή Node.js. Νομίζω ότι είναι Harvardchats.org αλλά δεν είμαι - OK. Δεν είμαι σίγουρος ποια είναι η διεύθυνση URL είναι, αλλά Μπορώ να στείλω ότι έξω αργότερα. Αλλά είναι το είδος της δροσερό τι μπορείτε να κάνετε με Node.js. Ελπίζω, λοιπόν, σε γενικές γραμμές, εσείς έχετε μια καλή αίσθηση του τι είναι χρήσιμο Node.js και για το πώς θα μπορούσε ίσως να εφαρμοστεί στο τελικό σχέδιο σας. Θα πρέπει να στείλει τους λίγο περισσότερο πόρων μαζί με αυτό. Και σας ευχαριστώ που ήρθατε. Σας ευχαριστώ. [Χειροκροτήματα]