1 00:00:00,000 --> 00:00:09,647 2 00:00:09,647 --> 00:00:11,730 ΟΜΙΛΗΤΗΣ: Τώρα ας βουτιά στον Κώδικα Διαχείρισης του Δικτύου 3 00:00:11,730 --> 00:00:14,470 και να ρίξετε μια ματιά στο πλαίσιο στην οποία ο κώδικας που γράφετε 4 00:00:14,470 --> 00:00:15,780 πρόκειται να λειτουργούν. 5 00:00:15,780 --> 00:00:17,350 Στο τέλος της ημέρας, θα πάμε να εφαρμόσουν 6 00:00:17,350 --> 00:00:18,710 το σύνολο του web server. 7 00:00:18,710 --> 00:00:20,460 Αλλά έχουμε παράσχει σας με το σκελετό 8 00:00:20,460 --> 00:00:24,090 κώδικα που έχουν κάποια λειτουργικότητα, συνδέεται ιδιαίτερα με τη δικτύωση. 9 00:00:24,090 --> 00:00:25,390 Ας ρίξουμε μια ματιά. 10 00:00:25,390 --> 00:00:27,560 >> Έτσι, εδώ προς την κορυφή του αρχείου είναι ένα μάτσο 11 00:00:27,560 --> 00:00:30,020 των δοκιμών της μακροοικονομικής απαιτήσεις. 12 00:00:30,020 --> 00:00:33,570 Τώρα αυτό είναι απλά ένα χαρακτηριστικό της C, σύμφωνα με την οποία σύμφωνα με ένα μάτσο σελίδες man 13 00:00:33,570 --> 00:00:36,410 πρέπει να ορίσετε μερικές από τις Αυτές οι σταθερές για να είναι αληθινό 14 00:00:36,410 --> 00:00:39,920 ή να είναι ακόμη συγκεκριμένους αριθμούς, έτσι ώστε έχετε πρόσβαση σε ορισμένες λειτουργίες. 15 00:00:39,920 --> 00:00:42,470 Διαφορετικά, θα είναι αδήλωτα και δεν θα έχετε πρόσβαση. 16 00:00:42,470 --> 00:00:45,340 Έτσι έχω κάνει αυτό με τον τρόπο διαβάζετε τις σελίδες του ο άνθρωπος. 17 00:00:45,340 --> 00:00:48,410 Τώρα κάτω από, σε γραμμές 15 έως 17, θα 18 00:00:48,410 --> 00:00:50,550 έχουν ένα σωρό όρια που δηλώνονται. 19 00:00:50,550 --> 00:00:53,370 >> Και έχουμε δανειστεί αυτά από ένα δημοφιλές web server που ονομάζεται Apache. 20 00:00:53,370 --> 00:00:54,650 Και αυτά είναι μόνο αριθμοί που είναι σε εξέλιξη 21 00:00:54,650 --> 00:00:56,810 να περιορίσει τον συνολικό αριθμό των bytes που επιτρέπονται 22 00:00:56,810 --> 00:01:01,930 σε διάφορα πλαίσια για την αίτηση HTTP ότι ένα πρόγραμμα περιήγησης μπορεί να μου στείλει. 23 00:01:01,930 --> 00:01:04,310 Στη συνέχεια, ορίζουμε οκτάδες. 24 00:01:04,310 --> 00:01:07,790 Τώρα μια οκτάδα είναι μόνο ένα φανταχτερό τρόπο του λέγοντας ένα byte, ή οκτώ bits. 25 00:01:07,790 --> 00:01:10,720 Βγάζει στο χτες ένα byte δεν ήταν απαραίτητα οκτώ bits, 26 00:01:10,720 --> 00:01:12,339 έτσι οκτάδα είναι πάντα οκτώ bits. 27 00:01:12,339 --> 00:01:14,880 Έτσι, σε αυτή την περίπτωση έχουμε υιοθετήσει ό, τι είναι κοινό στη δικτύωση 28 00:01:14,880 --> 00:01:17,410 κόσμο καλώντας οκτώ bytes μια οκτάδα. 29 00:01:17,410 --> 00:01:21,840 >> Εδώ έχω διευκρίνισε ότι θα οκτάδες είναι 512, έτσι ώστε να μοιάζει πολύ στην εγκληματολογία 30 00:01:21,840 --> 00:01:24,170 όταν διαβάζουμε ένα μάτσο bytes σε μια στιγμή, εδώ, 31 00:01:24,170 --> 00:01:27,390 θα πάμε να διαβάσετε ένα μάτσο οκτάδες σε μια στιγμή. 32 00:01:27,390 --> 00:01:28,922 Στη συνέχεια ένα σωρό αρχεία κεφαλίδας. 33 00:01:28,922 --> 00:01:30,255 Πώς το ξέρω για να συμπεριλάβει αυτά; 34 00:01:30,255 --> 00:01:32,730 Λοιπόν εγώ απλά διαβάσει τον άνθρωπο σελίδες για έναν αριθμό λειτουργιών 35 00:01:32,730 --> 00:01:35,620 ότι θα χρησιμοποιήσουμε σε αυτή την διανομή κώδικα και περιλαμβάνει σε αυτά 36 00:01:35,620 --> 00:01:37,390 Ήμουν εντολή να. 37 00:01:37,390 --> 00:01:39,090 >> Και τώρα έχουμε έναν τύπο δεδομένων. 38 00:01:39,090 --> 00:01:41,470 Έχουμε δηλώσει την οκτάδα να είναι μια χαρα. 39 00:01:41,470 --> 00:01:44,040 Και θα δούμε αργότερα ότι αυτό είναι χρησιμοποιείται σε όλη την κώδικα. 40 00:01:44,040 --> 00:01:45,670 Και έχουμε κηρυχθεί σωρό των πρωτοτύπων, 41 00:01:45,670 --> 00:01:47,961 και θα περπατήσει γρήγορα μέσα κάθε μία από αυτές τις λειτουργίες. 42 00:01:47,961 --> 00:01:50,400 Τέλος, και ίσως το πιο σημαντικό να διατηρηθεί σε 43 00:01:50,400 --> 00:01:52,520 νου σε αυτό το σημείο η ιστορία, είναι ότι υπάρχει 44 00:01:52,520 --> 00:01:54,520 είναι, στην πραγματικότητα ένα ολόκληρο μάτσο καθολικές μεταβλητές 45 00:01:54,520 --> 00:02:00,430 στην κορυφή του αρχείου, ρίζα, CFD, SFD, αίτημα, το αρχείο και το σώμα. 46 00:02:00,430 --> 00:02:03,960 >> Τώρα γενικά, χρησιμοποιώντας τόσα πολλά παγκόσμια μεταβλητές, ή καθολικές μεταβλητές σε όλους, 47 00:02:03,960 --> 00:02:05,280 δεν είναι το πίσω πρακτική. 48 00:02:05,280 --> 00:02:09,090 Αλλά τελικά είμαστε, επίσης, χρησιμοποιώντας ένα τεχνική που ονομάζεται χειρισμό σήματος αργότερα 49 00:02:09,090 --> 00:02:11,930 στον κώδικα, το οποίο μας επιτρέπει να ανιχνεύουν όταν ο χρήστης πατήσει κάτι 50 00:02:11,930 --> 00:02:15,080 όπως CTRL Ψ και να κλείσουν ο διακομιστής με χάρη. 51 00:02:15,080 --> 00:02:18,240 Και για να το κάνουμε αυτό με χάρη και πραγματικά δωρεάν, τη μνήμη, 52 00:02:18,240 --> 00:02:20,800 πρέπει να έχουν πρόσβαση σε Αυτές οι καθολικές μεταβλητές. 53 00:02:20,800 --> 00:02:24,510 >> Και τώρα ας ρίξουμε μια ματιά στα βασικά προϊόντα, τα οποία οδηγεί το σύνολο του εν λόγω προγράμματος. 54 00:02:24,510 --> 00:02:27,720 Πρώτον, στην κορυφή εδώ έχουν ένα σφάλμα μεταβλητό αριθμό 55 00:02:27,720 --> 00:02:29,570 ότι δεν φαίνεται να έχει έναν τύπο, αλλά αυτό είναι 56 00:02:29,570 --> 00:02:31,500 γιατί είναι πραγματικά ορίζεται σε ένα αρχείο που ονομάζεται 57 00:02:31,500 --> 00:02:34,800 errno.h λάθος που περιλαμβάνεται ψηλότερα. 58 00:02:34,800 --> 00:02:38,780 Αν το κάνετε άνθρωπο errno σε πραγματικά βλέπε τον ορισμό για αυτό το πράγμα, 59 00:02:38,780 --> 00:02:41,230 θα δείτε ότι αυτό είναι ένα ειδικές παγκόσμια μεταβλητή που 60 00:02:41,230 --> 00:02:43,350 καθορίζεται από ένα σωρό των λειτουργιών που δεν είναι γραμμένα 61 00:02:43,350 --> 00:02:48,730 από εμάς, αλλά από τους συντάκτες του Linux και άλλα συστήματα για να ρυθμίσετε πραγματικά 62 00:02:48,730 --> 00:02:52,400 ένας αριθμός για αυτή τη μεταβλητή όταν κάτι πάει στραβά, έτσι ώστε να μπορείτε παγκοσμίως 63 00:02:52,400 --> 00:02:54,830 καταλάβω τι έκανε να πάει στραβά. 64 00:02:54,830 --> 00:02:58,540 >> Τώρα κάτω από σας θα δείτε ένα νέο τεχνική ίσως χρησιμοποιώντας getopt, 65 00:02:58,540 --> 00:03:01,790 μια λειτουργία που βοηθά μεταγλώττιση εντολή τα επιχειρήματα της γραμμής, έτσι ώστε να μην κάνουμε 66 00:03:01,790 --> 00:03:05,540 έχετε να ασχοληθείτε σπατάλη χρόνου υπολογίζοντας πώς να αναλύσει κάτι σαν 8080, 67 00:03:05,540 --> 00:03:08,350 ή παύλα ρ, ή παύλα ώρα για να λάβετε βοήθεια. 68 00:03:08,350 --> 00:03:10,300 getopt ουσιαστικά κάνει αυτό για εμάς. 69 00:03:10,300 --> 00:03:11,750 Δείτε τη σελίδα man για περισσότερα. 70 00:03:11,750 --> 00:03:13,960 >> Στη συνέχεια, κάνουμε ένα κομμάτι του σφάλματος έλεγχο για να βεβαιωθείτε 71 00:03:13,960 --> 00:03:17,420 ότι ο αριθμός θύρας είναι εντός το καθορισμένο εύρος στο spec. 72 00:03:17,420 --> 00:03:20,240 Στη συνέχεια, θα δούμε μια κλήση της συνάρτησης ξεκινήσει, των οποίων ο ορισμός θα 73 00:03:20,240 --> 00:03:24,040 εξετάσουμε σε μια στιγμή, και το όνομά του προτείνει, αυτό ξεκινά τον web server. 74 00:03:24,040 --> 00:03:26,960 Εδώ έχουμε μια κλήση σε λειτουργία που ονομάζεται σήμα που λέει, 75 00:03:26,960 --> 00:03:30,750 αν και όταν ακούτε Ελέγχου C από πληκτρολόγιο του χρήστη, να προχωρήσει και να καλέσετε 76 00:03:30,750 --> 00:03:34,650 μια λειτουργία που ονομάζεται χειριστής που πρόκειται να τελικά καθαρά τα πράγματα και να σταματήσει 77 00:03:34,650 --> 00:03:35,500 ο διακομιστής. 78 00:03:35,500 --> 00:03:39,470 >> Κάτω από αυτό είναι αυτό που φαίνεται να είναι ένα άπειρο βρόχο, η πρώτη γραμμή της οποίας 79 00:03:39,470 --> 00:03:41,660 ουσιαστικά είναι μια πρόσκληση σε μια λειτουργία που ονομάζεται 80 00:03:41,660 --> 00:03:45,110 επαναφορά, η οποία τους εαυτούς μας εφαρμοστεί αργότερα, προκειμένου 81 00:03:45,110 --> 00:03:47,470 να απελευθερώσει μερικά από τα παγκόσμια μελών μας. 82 00:03:47,470 --> 00:03:50,480 Μετά από αυτό είναι μια σειρά από κώδικα, προκύπτει ότι υπό όρους 83 00:03:50,480 --> 00:03:52,576 ελέγχει την επιστροφή αξία της συνδεδεμένης. 84 00:03:52,576 --> 00:03:55,700 Τώρα που συνδέεται μοιάζει με ένα κατηγόρημα, κάτι που επιστρέφει true ή false. 85 00:03:55,700 --> 00:03:58,040 Και το κάνει, αλλά δεν υπάρχει κάτι το ιδιαίτερο σε συνδεδεμένη 86 00:03:58,040 --> 00:03:59,960 υπό την έννοια ότι είναι μια κλήση κλείδωμα. 87 00:03:59,960 --> 00:04:03,180 Θα κάθεται εκεί και περιμένει μέχρι ο browser του χρήστη 88 00:04:03,180 --> 00:04:05,860 προσπαθεί να συνδεθεί με αυτό το web server και μόνο τότε θα είναι 89 00:04:05,860 --> 00:04:10,160 επιστρέφουν αληθείς ή ψευδείς, έτσι ώστε να προχωρήσουμε στο εσωτερικό αυτού του if. 90 00:04:10,160 --> 00:04:13,870 >> Μόλις εκεί, παρατηρήσετε αυτή τη λειτουργία για ένα λειτουργία που ονομάζεται μαϊντανός, το οποίο γράψαμε, 91 00:04:13,870 --> 00:04:17,230 η οποία αναλύει όλες τις οκτάδες, όλα των bytes που προέρχονται από ένα πρόγραμμα περιήγησης 92 00:04:17,230 --> 00:04:21,010 στο διακομιστή, έτσι ώστε να μπορούμε να παραδώσει σας πίσω τελικά μια τιμή σε ένα 93 00:04:21,010 --> 00:04:24,420 από αυτές τις παγκόσμιες μεταβλητές που αποθηκεύει όλα τα bytes σε μόλις 94 00:04:24,420 --> 00:04:26,630 επικεφαλίδες που αίτηση, όχι το σώμα 95 00:04:26,630 --> 00:04:28,920 εάν υπήρχε πράγματι ένα σώμα σε αυτό. 96 00:04:28,920 --> 00:04:32,980 >> Τώρα κάτω από αρχίσουμε να αναλύσει αυτές τις κεφαλίδες για να εξαγάγετε 97 00:04:32,980 --> 00:04:35,490 ένα υποσύνολο των πληροφοριών ότι νοιαζόμαστε για. 98 00:04:35,490 --> 00:04:37,740 Ειδικότερα, κατά το προδιαγραφή, πρέπει πρώτα 99 00:04:37,740 --> 00:04:40,580 ήθελε να ζητήσει γραμμή, η οποία είναι ακριβώς ότι πρώτη γραμμή ότι 100 00:04:40,580 --> 00:04:45,710 ελπίζω να λέει κάτι σαν get κάθετο ή κάποια διαδρομή και, στη συνέχεια, HTTP 1.1. 101 00:04:45,710 --> 00:04:48,150 Είμαστε χρησιμοποιώντας αυτό το αλληγορία από μια βελόνα στα άχυρα 102 00:04:48,150 --> 00:04:50,370 να ψάξουν για συγκεκριμένα χαρακτήρες ή διευθύνσεις. 103 00:04:50,370 --> 00:04:53,120 Και πράγματι, υπάρχει ένας αριθμός λειτουργίες στον κώδικα της διανομής μας 104 00:04:53,120 --> 00:04:56,930 ότι και εσείς, επίσης, μπορεί να βρει χρήσιμες όταν ψάχνουν για συγκεκριμένες τιμές. 105 00:04:56,930 --> 00:05:00,630 >> Τελικά, αντιγράφουμε αυτά τα bytes σε μια μεταβλητή που ονομάζεται γραμμή, 106 00:05:00,630 --> 00:05:03,510 που παρατηρήσετε, επίσης, έχουμε διατεθεί στη στοίβα 107 00:05:03,510 --> 00:05:05,890 μέσω ενός δυναμικά μεγέθους συστοιχία. 108 00:05:05,890 --> 00:05:08,350 Και είμαστε προσπαθεί σκόπιμα να αποφεύγουν να καλέσουν malloc 109 00:05:08,350 --> 00:05:11,100 γιατί και πάλι, επειδή του ελέγχου C είναι 110 00:05:11,100 --> 00:05:14,630 ένα δυναμικό χαρακτηριστικό του προγράμματος αυτού, εμείς Δεν θέλω να έχω αυτόν τον κώδικα ξαφνικά 111 00:05:14,630 --> 00:05:17,479 διακόπτεται από το χτύπημα του χρήστη Ελέγχου C, το αποτέλεσμα της οποίας 112 00:05:17,479 --> 00:05:20,270 είναι ότι μπορεί να μην έχω την ευκαιρία για δωρεάν κάτι που έχω malloced. 113 00:05:20,270 --> 00:05:23,660 Έτσι, προσπαθώ να χρησιμοποιήσει ως πολύ της στοίβας είναι μπορώ εδώ. 114 00:05:23,660 --> 00:05:26,040 >> Έπειτα επάνω, ένα σωρό στο DOS. 115 00:05:26,040 --> 00:05:28,930 Η προδιαγραφή θα αναπτύξω για το τι ακριβώς είναι αναμενόμενο εδώ, 116 00:05:28,930 --> 00:05:31,800 αλλά τα σχόλια σας δώσω μια ιδέα για το τι βρίσκεται μπροστά μας. 117 00:05:31,800 --> 00:05:33,830 Θα πρέπει πρώτα να επικυρώνει τη γραμμή αίτημα 118 00:05:33,830 --> 00:05:37,760 και βεβαιωθείτε ότι μοιάζει με το προδιαγραφές γραμματική, να το πω έτσι, 119 00:05:37,760 --> 00:05:38,541 λέει ότι θα έπρεπε. 120 00:05:38,541 --> 00:05:41,290 Θα πρέπει στη συνέχεια να εξαγάγετε κάτι ονομάζεται το ερώτημα, τα πράγματα έξω 121 00:05:41,290 --> 00:05:44,200 μετά από ένα ερωτηματικό, όπως είδαμε με το Google παράδειγμα μας 122 00:05:44,200 --> 00:05:46,320 στο πέρασμα σε μια παράμετρο HD. 123 00:05:46,320 --> 00:05:49,050 Στη συνέχεια ενώσετε μαζί η ρίζα του web server 124 00:05:49,050 --> 00:05:52,520 με την πορεία που είναι σε ότι το αίτημα πρώτης γραμμής 125 00:05:52,520 --> 00:05:56,010 και αποτελούν την πλήρη διαδρομή του το αρχείο που θέλετε να αναζητήσετε. 126 00:05:56,010 --> 00:06:00,300 >> Στη συνέχεια, θα πάμε για να βεβαιωθείτε ότι ότι το αρχείο υπάρχει και είναι αναγνώσιμο. 127 00:06:00,300 --> 00:06:05,100 Και μετά θα πάμε για να εξαγάγετε της επέκταση αρχείου, το .html ή το .php, 128 00:06:05,100 --> 00:06:09,920 ή κάποια τέτοια επέκταση που είναι κατά το τέλος του string ζητηθεί. 129 00:06:09,920 --> 00:06:11,940 Επόμενο είναι μέχρι ένα ολόκληρο μάτσο κώδικα που γράψαμε 130 00:06:11,940 --> 00:06:15,800 να δημιουργήσει πραγματικά PHP περιεχόμενο που δημιουργείται για εσάς. 131 00:06:15,800 --> 00:06:18,010 Με λίγα λόγια, αυτό κώδικας λαμβάνει το όνομα 132 00:06:18,010 --> 00:06:20,250 του αρχείου που θέλετε PHP για να ερμηνεύσει. 133 00:06:20,250 --> 00:06:24,630 Εμείς να περάσει από κάτι που ονομάζεται ένα σωλήνα στον διερμηνέα της PHP. 134 00:06:24,630 --> 00:06:28,060 Πάρτε πίσω την απάντηση σαν η απάντηση ήταν η ίδια ένα αρχείο. 135 00:06:28,060 --> 00:06:32,110 Και τότε θα επαναλάβει πάνω από το αρχείο του bytes, τραβώντας όλα αυτά σε ένα ρυθμιστικό 136 00:06:32,110 --> 00:06:34,180 έτσι ώστε να μπορούμε τελικά να τις εκτυπώσετε. 137 00:06:34,180 --> 00:06:37,230 >> Πράγματι, όλα αυτά καλεί εδώ για να dprintf 138 00:06:37,230 --> 00:06:40,110 μας επιτρέπει να εκτυπώσετε κάτι ονομάζεται Περιγραφέας αρχείο, το οποίο 139 00:06:40,110 --> 00:06:42,350 είναι απλά ένας ακέραιος ότι αντιπροσωπεύει ένα αρχείο. 140 00:06:42,350 --> 00:06:45,360 Πολύ παρόμοια στο πνεύμα, αλλά ριζικά διαφορετικό από ένα αρχείο 141 00:06:45,360 --> 00:06:46,620 Κατηγορία δείκτη. 142 00:06:46,620 --> 00:06:50,260 Ανακοίνωση για το πώς μπορείτε να χρησιμοποιήσετε σύνταξη, όπως printf εδώ, ώστε να μπορώ δυναμικά 143 00:06:50,260 --> 00:06:54,000 εισάγετε κάτι σαν το μήκος για την αξία του μια κεφαλίδα HTTP 144 00:06:54,000 --> 00:06:55,270 ονομάζεται Content-Length. 145 00:06:55,270 --> 00:06:57,990 Και τελικά θα χρησιμοποιηθεί ο λειτουργία δικαίωμα να γράψει πραγματικά 146 00:06:57,990 --> 00:07:00,040 το σώμα του αιτήματος. 147 00:07:00,040 --> 00:07:03,750 >> Δυστυχώς, υλοποιήσαμε μόνο υποστήριξη για δυναμικά 148 00:07:03,750 --> 00:07:05,350 δημιουργούνται αρχεία PHP. 149 00:07:05,350 --> 00:07:08,520 Εμείς δεν εφάρμοσε υποστήριξη στατικά αρχεία, όπως gifs, και αρχεία JPEG, 150 00:07:08,520 --> 00:07:10,660 και CSS και HTML αρχεία. 151 00:07:10,660 --> 00:07:14,450 Αυτό, δυστυχώς, επαφίεται σε σας να ανταποκριθεί στο σκοπό του πελάτη 152 00:07:14,450 --> 00:07:15,090 αυτό να το κάνουμε. 153 00:07:15,090 --> 00:07:20,050 Έτσι, εκεί θα βρείτε ότι υπάρχει δεν είναι πολύ έμπνευση εντός αυτού του συγκροτήματος, 154 00:07:20,050 --> 00:07:23,520 αλλά αν είναι λίγο πιο ψηλά από το πόσο πήγαμε σχετικά με την ερμηνεία κώδικα PHP, 155 00:07:23,520 --> 00:07:25,520 οι λειτουργίες που θα χρησιμοποιήσετε είναι λίγο διαφορετικά. 156 00:07:25,520 --> 00:07:27,561 >> Στην πραγματικότητα, μπορείτε να δανειστείτε μερικές από τις λειτουργίες 157 00:07:27,561 --> 00:07:29,620 ίσως από τις εγκληματολογίας σετ πρόβλημα, επειδή 158 00:07:29,620 --> 00:07:32,860 Στο τέλος της ημέρας το μόνο που χρειάζεται να κάνουμε εδώ είναι Μόλις ξέρετε τι το άνοιγμα του αρχείου 159 00:07:32,860 --> 00:07:35,690 και μόλις ξέρετε ότι είναι το λεγόμενο Τύπος MIME ή τύπο περιεχομένου, 160 00:07:35,690 --> 00:07:39,040 θα πρέπει να διαβάσετε σε αυτά τα bytes και με κάποιο τρόπο να τους φτύνουν πίσω έξω. 161 00:07:39,040 --> 00:07:41,190 >> Και τώρα μια περιοδεία του αυτό άλλες λειτουργίες αρχείου. 162 00:07:41,190 --> 00:07:43,820 Πρώτα είναι συνδεδεμένο, η οποία απλά επιστρέφει true 163 00:07:43,820 --> 00:07:47,350 όταν ακούει τελικά ένα σύνδεση από ένα χρήστη. 164 00:07:47,350 --> 00:07:48,786 Επόμενο είναι λάθος. 165 00:07:48,786 --> 00:07:52,296 Σφάλμα, εν τω μεταξύ, ως μια λειτουργία που έγραψε για να χειριστεί όλα τα διάφορα 400 166 00:07:52,296 --> 00:07:55,360 και την κατάσταση HTTP 500 κωδικούς που μπορεί να θέλετε 167 00:07:55,360 --> 00:07:58,500 να στείλει πίσω στον χρήστη, μαζί με ένα τυπικό μήνυμα. 168 00:07:58,500 --> 00:08:01,950 >> Επόμενο είναι μέχρι το φορτίο, ιδιαίτερα σαρκωμένο λειτουργία, των οποίων ο σκοπός στη ζωή 169 00:08:01,950 --> 00:08:06,920 είναι να διαβάσει από ένα αστέρι αρχείο το δείκτη του περιεχόμενα ενός αρχείου σε ένα παγκόσμιο ρυθμιστικό 170 00:08:06,920 --> 00:08:09,000 ότι δηλώσαμε σε παγκόσμιο επίπεδο ανωτέρω [; κύριος. ?] 171 00:08:09,000 --> 00:08:12,649 Αυτό είναι ένα σύνθετο κομμάτι, γιατί εμείς Πρέπει να διαβάσετε το byte από το αρχείο 172 00:08:12,649 --> 00:08:14,690 αλλά ελέγχει σε κάθε επανάληψη αν έχουμε ήδη 173 00:08:14,690 --> 00:08:17,600 χτύπησε το τέλος του αρχείου ή κάτι άλλο έχει πάει στραβά. 174 00:08:17,600 --> 00:08:21,210 Και χρησιμοποιούμε realloc να βεβαιωθείτε ότι Όποια και αν είναι ρυθμιστικό είμαστε χρησιμοποιώντας αυξάνεται 175 00:08:21,210 --> 00:08:24,440 και μεγαλώνει και αναπτύσσεται και πάντα διαμονή τους μπροστά από τον αριθμό των bytes 176 00:08:24,440 --> 00:08:25,675 ότι θα πρέπει να ταιριάζει εκεί. 177 00:08:25,675 --> 00:08:27,550 Handler, εν τω μεταξύ, είναι Η συνάρτηση που παίρνει 178 00:08:27,550 --> 00:08:30,630 καλείται μέσω της έχοντας καταχωρηθεί Ελέγχου C ως σήμα 179 00:08:30,630 --> 00:08:32,140 ότι θέλουμε να υποκλέψει. 180 00:08:32,140 --> 00:08:34,070 Παρατηρήστε εδώ στο χειριστή ότι, τελικά, 181 00:08:34,070 --> 00:08:36,780 ζητεί να σταματήσει, το οποίο φυσικά σταματά τον web server. 182 00:08:36,780 --> 00:08:39,750 Και δυστυχώς, αναζήτηση δεν εφαρμόζεται. 183 00:08:39,750 --> 00:08:41,940 Σε πνεύμα, αυτό είναι ένα αρκετά απλή λειτουργία. 184 00:08:41,940 --> 00:08:44,900 Λαμβάνοντας υπόψη μια επέκταση του αρχείου, χρειάζεται για να επιστρέψετε λεγόμενη MIME 185 00:08:44,900 --> 00:08:46,320 είδος ή τύπο περιεχομένου. 186 00:08:46,320 --> 00:08:49,260 Και εμείς να προβλέψει στις προδιαγραφές τι η χαρτογράφηση θα πρέπει να είναι. 187 00:08:49,260 --> 00:08:52,330 Αλλά θα πρέπει να μεταφράσουν εν τέλει να γ κώδικα. 188 00:08:52,330 --> 00:08:56,490 >> Επόμενο είναι ομοίως σαρκωμένο λειτουργία μας ονομάζεται μεταγλώττιση, σκοπός του οποίου στη ζωή 189 00:08:56,490 --> 00:08:59,350 είναι να διαβάσει, όχι από ένα αρχείο, αλλά από μια σύνδεση δικτύου. 190 00:08:59,350 --> 00:09:03,510 Συγκεκριμένα, την ανάγνωση και την ανάλυση του Αίτηση HTTP που προέρχονται από ένα πρόγραμμα περιήγησης 191 00:09:03,510 --> 00:09:05,940 στο διακομιστή, έτσι ώστε τελικά μπορούμε να αναλύσει 192 00:09:05,940 --> 00:09:09,530 ακριβώς στα κεφαλίδες στην αίτηση γραμμή και να επιστρέψει αυτά που σας 193 00:09:09,530 --> 00:09:12,720 μέσω ενός παγκόσμιου ρυθμιστικού ότι που ανακοινώνονται ανωτέρω [; κύριος. ?] 194 00:09:12,720 --> 00:09:14,880 >> Επαναφορά, εν τω μεταξύ, είναι ένα λειτουργία που ορίζουμε 195 00:09:14,880 --> 00:09:18,730 ότι φώναξαν επαναληπτικά μέσα των κύριων κάθε φορά που είστε έτοιμος 196 00:09:18,730 --> 00:09:20,799 έτοιμοι να αρχίσετε να ακούτε για μια νέα σύνδεση 197 00:09:20,799 --> 00:09:22,840 έτσι ώστε να γνωρίζετε πάντα η κατάσταση των μεταβλητών μας 198 00:09:22,840 --> 00:09:24,870 και έτσι ώστε να έχουμε επίσης ελευθερωθεί μνήμη που 199 00:09:24,870 --> 00:09:28,070 θα μπορούσαν να έχουν διατεθεί για μια προηγούμενη σύνδεση με το δίκτυο. 200 00:09:28,070 --> 00:09:30,060 Το επόμενο είναι να ξεκινήσει, η λειτουργία που γράψαμε 201 00:09:30,060 --> 00:09:31,920 που περιέχει μια ολόκληρη πολύ κώδικα δικτύωσης 202 00:09:31,920 --> 00:09:34,420 που ξεκινά τελικά τον web server. 203 00:09:34,420 --> 00:09:36,680 >> Τελευταία up είναι η λειτουργία που ονομάζεται στάση, η οποία 204 00:09:36,680 --> 00:09:38,770 κάνει ακριβώς αυτό, σταματά τον web server. 205 00:09:38,770 --> 00:09:42,270 Αλλά πρώτα απελευθερώνει περισσότερη μνήμη ότι εξακολουθεί να έχει διατεθεί. 206 00:09:42,270 --> 00:09:45,850 Αλλά αυτό απαιτεί τελικά την έξοδο χωρίς καν να επιστρέφει τον έλεγχο 207 00:09:45,850 --> 00:09:47,480 προς την κύρια λειτουργία μας. 208 00:09:47,480 --> 00:09:49,480 Τελικά, ένα από τα πιο σημαντικές τεχνικές 209 00:09:49,480 --> 00:09:52,680 Κατά την εφαρμογή αυτού του web server είναι πρόκειται να είναι ένα κομμάτι της δοκιμής και του λάθους, 210 00:09:52,680 --> 00:09:55,886 έχει ένα πρόγραμμα περιήγησης στο ανοιχτό παράθυρο στα δεξιά και ένα παράθυρο τερματικού στο 211 00:09:55,886 --> 00:09:57,760 αριστερά, η κονσόλα διακομιστές παράθυρο, έτσι ώστε να 212 00:09:57,760 --> 00:10:00,420 να δείτε τα μηνύματα που είναι που εμφανίζεται στην οθόνη. 213 00:10:00,420 --> 00:10:04,170 >> Αλλά ακόμα καλύτερα θα ήταν ένα τρίτο παράθυρο, ένα δεύτερο παράθυρο του τερματικού, 214 00:10:04,170 --> 00:10:07,135 στο οποίο μπορείτε να χρησιμοποιήσετε το Telnet, τη χρήση για τις οποίες προβλέπεται στο spec. 215 00:10:07,135 --> 00:10:09,640 Και Telnet είναι μόνο ένα πολύ απλό πρόγραμμα δικτύου 216 00:10:09,640 --> 00:10:12,660 που σας επιτρέπει να προσποιούνται ότι είναι ένα πρόγραμμα περιήγησης σε ένα παράθυρο 217 00:10:12,660 --> 00:10:14,540 ενώ μιλώντας στο άλλο παράθυρο. 218 00:10:14,540 --> 00:10:16,830 Με αυτό τον τρόπο μπορείτε να δείτε ακριβώς οι εντολές κειμένου 219 00:10:16,830 --> 00:10:18,700 που έρχονται πίσω από το διακομιστή στον πελάτη 220 00:10:18,700 --> 00:10:20,810 χωρίς να χρειάζεται να σπρώχνει γύρω προγραμματιστής του Chrome 221 00:10:20,810 --> 00:10:24,010 εργαλεία σε μια κατά τα άλλα clunkier διεπαφή. 222 00:10:24,010 --> 00:10:29,099