Εγκαταστήστε έναν διακομιστή Internet στη Python χρησιμοποιώντας το Socket

click fraud protection

Ως συμπλήρωμα στο φροντιστήριο δικτύου πελατών, αυτό το σεμινάριο δείχνει πώς να υλοποιήσετε έναν απλό διακομιστή web στο Πύθων. Βεβαίως, αυτό δεν αποτελεί υποκατάστατο του Apache ή του Zope. Υπάρχουν επίσης πιο ισχυροί τρόποι για την υλοποίηση υπηρεσιών ιστού στην Python, χρησιμοποιώντας μονάδες όπως το BaseHTTPServer. Αυτός ο διακομιστής χρησιμοποιεί αποκλειστικά την υπομονάδα υποδοχής.

Θα θυμάστε ότι η υπομονάδα υποδοχής είναι η ραχοκοκαλιά των περισσότερων ενοτήτων υπηρεσιών ιστού της Python. Όπως συμβαίνει και με τον απλό πελάτη δικτύου, η δημιουργία ενός διακομιστή με αυτό δείχνει τα βασικά στοιχεία των υπηρεσιών ιστού στη Python με διαφάνεια. Ο ίδιος ο BaseHTTPServer εισάγει την ενότητα υποδοχής για να επηρεάσει έναν διακομιστή.

Μέσω ανασκόπησης, όλες οι συναλλαγές δικτύου πραγματοποιούνται μεταξύ πελατών και διακομιστών. Στα περισσότερα πρωτόκολλα, οι πελάτες ζητούν μια συγκεκριμένη διεύθυνση και λαμβάνουν δεδομένα.

Μέσα σε κάθε διεύθυνση, μπορεί να τρέξει πλήθος εξυπηρετητών. Το όριο είναι στο υλικό. Με αρκετό υλικό (μνήμη RAM, ταχύτητα επεξεργαστή κλπ.), Ο ίδιος υπολογιστής μπορεί να χρησιμεύσει ως διακομιστής ιστού, διακομιστής ftp και

instagram viewer
mail server (pop, smtp, imap ή όλα τα παραπάνω) όλα ταυτόχρονα. Κάθε υπηρεσία συνδέεται με μια θύρα. Η θύρα είναι συνδεδεμένη με μια πρίζα. Ο διακομιστής ακούει τη συνδεδεμένη θύρα του και παρέχει πληροφορίες όταν λαμβάνονται αιτήματα σε αυτήν τη θύρα.

Για να επηρεάσετε μια σύνδεση δικτύου, πρέπει να γνωρίζετε τον κεντρικό υπολογιστή, τη θύρα και τις ενέργειες που επιτρέπονται σε αυτήν τη θύρα. Οι περισσότεροι διακομιστές ιστού εκτελούνται στη θύρα 80. Ωστόσο, για να αποφευχθεί η σύγκρουση με έναν εγκατεστημένο διακομιστή Apache, ο διακομιστής ιστού θα λειτουργεί στη θύρα 8080. Για να αποφύγετε τη σύγκρουση με άλλες υπηρεσίες, είναι καλύτερο να διατηρείτε τις υπηρεσίες HTTP στη θύρα 80 ή 8080. Αυτά είναι τα δύο πιο συνηθισμένα. Προφανώς, εάν χρησιμοποιούνται, πρέπει να βρείτε ένα ανοιχτό λιμάνι και να ειδοποιήσετε τους χρήστες για την αλλαγή.

Όπως και με τον πελάτη δικτύου, θα πρέπει να σημειώσετε ότι αυτές οι διευθύνσεις είναι οι συνήθεις αριθμοί θυρών για τις διάφορες υπηρεσίες. Όσο ο πελάτης ζητά τη σωστή υπηρεσία στη σωστή θύρα στη σωστή διεύθυνση, η επικοινωνία θα εξακολουθεί να συμβαίνει. Η Google mail, για παράδειγμα, δεν ξεκίνησε αρχικά στους κοινούς αριθμούς λιμένων, αλλά επειδή γνωρίζουν πώς να αποκτούν πρόσβαση στους λογαριασμούς τους, οι χρήστες μπορούν ακόμα να λάβουν το ταχυδρομείο τους.

Σε αντίθεση με τον πελάτη δικτύου, όλες οι μεταβλητές στον διακομιστή είναι ενσύρματες. Οποιαδήποτε υπηρεσία που αναμένεται να εκτελείται συνεχώς δεν πρέπει να έχει τις μεταβλητές της εσωτερικής της λογικής που έχουν οριστεί στη γραμμή εντολών. Η μόνη παραλλαγή σε αυτό θα ήταν αν, για κάποιο λόγο, θέλατε την υπηρεσία να τρέχει περιστασιακά και σε διάφορους αριθμούς λιμένων. Αν συνέβαινε αυτό, θα μπορούσατε ακόμα να παρακολουθήσετε τον χρόνο του συστήματος και να αλλάξετε τις δεσμεύσεις ανάλογα.

Όπως ήδη αναφέρθηκε, ο διακομιστής πρέπει να γνωρίζει τον κεντρικό υπολογιστή με τον οποίο πρόκειται να συνδεθεί και τη θύρα που θα ακούσει. Για τους σκοπούς μας, θα έχουμε την υπηρεσία να ισχύει σε οποιοδήποτε όνομα του κεντρικού υπολογιστή καθόλου.

Το λιμάνι, όπως αναφέρθηκε προηγουμένως, θα είναι 8080. Σημειώστε ότι εάν χρησιμοποιείτε αυτόν τον εξυπηρετητή σε συνδυασμό με τον πελάτη δικτύου, θα χρειαστεί να αλλάξετε τον αριθμό θύρας που χρησιμοποιείται σε αυτό πρόγραμμα.

Είτε να ζητήσετε πληροφορίες είτε να την εξυπηρετήσετε, για να έχετε πρόσβαση στις πληροφορίες Διαδίκτυο, πρέπει να δημιουργήσουμε μια πρίζα. Η σύνταξη αυτής της κλήσης έχει ως εξής:

Τα πρώτα δύο είναι προφανώς πρωτόκολλα Διαδικτύου. Οτιδήποτε ταξιδεύει μέσω του διαδικτύου μπορεί να προσεγγιστεί σε αυτές τις οικογένειες. Πολλά δίκτυα εξακολουθούν να μην λειτουργούν με IPv6. Επομένως, αν δεν ξέρετε διαφορετικά, είναι ασφαλέστερο να προεπιλέξετε το IPv4 και να χρησιμοποιήσετε το AF_INET.

Μέχρι στιγμής, οι συνηθέστεροι τύποι είναι SOCK_STEAM και SOCK_DGRAM επειδή λειτουργούν στα δύο πρωτόκολλα της σουίτας IP (TCP και UDP). Τα τελευταία τρία είναι πολύ πιο σπάνια και μπορεί να μην υποστηρίζονται πάντα.

Μετά τη δημιουργία της υποδοχής, πρέπει να ρυθμίσουμε τις επιλογές υποδοχής. Για οποιοδήποτε αντικείμενο υποδοχής, μπορείτε να ορίσετε τις επιλογές υποδοχής χρησιμοποιώντας τη μέθοδο setsockopt (). Η σύνταξη είναι η εξής:

Αν θέλουμε να δώσουμε ανατροφοδότηση στο άτομο που καλεί το διακομιστή, θα μπορούσαμε τώρα να εισαγάγουμε μια εντολή εκτύπωσης για να επιβεβαιώσουμε ότι ο διακομιστής είναι σε λειτουργία.

Έχοντας εγκαταστήσει το διακομιστή, πρέπει τώρα να το πούμε Πύθων Τι πρέπει να κάνετε όταν υποβάλλεται αίτημα σχετικά με το συγκεκριμένο λιμάνι. Γι 'αυτό, αναφέρουμε το αίτημα από την αξία του και το χρησιμοποιούμε ως το επιχείρημα ενός μόνιμου βρόχου.

Όταν γίνεται αίτημα, ο διακομιστής θα πρέπει να αποδεχτεί το αίτημα και να δημιουργήσει ένα αντικείμενο αρχείου για να αλληλεπιδράσει με αυτό.

Σε αυτή την περίπτωση, ο διακομιστής χρησιμοποιεί την ίδια θύρα για ανάγνωση και εγγραφή. Επομένως, στη μέθοδο makefile δίνεται ένα όρισμα 'rw'. Το μηδέν μήκος του μεγέθους του buffer απλώς αφήνει το τμήμα του αρχείου να προσδιορίζεται δυναμικά.

Εάν δεν θέλουμε να δημιουργήσουμε ένα διακομιστή μιας ενέργειας, το επόμενο βήμα είναι να διαβάσετε την είσοδο από το αντικείμενο αρχείου. Όταν το κάνουμε αυτό, θα πρέπει να είμαστε προσεκτικοί για να απαλλαγούμε από την εισροή υπερβολικού λευκού χώρου.

Το αίτημα θα έρθει με τη μορφή μιας ενέργειας, ακολουθούμενη από μια σελίδα, το πρωτόκολλο και την έκδοση του πρωτοκόλλου που χρησιμοποιείται. Αν κάποιος θέλει να εμφανίσει μια ιστοσελίδα, κάποιος χωρίζει αυτή την είσοδο για να ανακτήσει τη ζητούμενη σελίδα και στη συνέχεια να διαβάσει τη σελίδα αυτή σε μια μεταβλητή που στη συνέχεια εγγράφεται στο αντικείμενο αρχείου socket. Μια λειτουργία για την ανάγνωση ενός αρχείου σε ένα λεξικό μπορεί να βρεθεί στο blog.

Προκειμένου να καταστήσουμε αυτό το σεμινάριο λίγο πιο ενδεικτικό του τι μπορεί να κάνει κανείς με την υπομονάδα υποδοχής, θα παραιτηθούμε από αυτό το μέρος του διακομιστή και θα δείξουμε αν μπορεί κανείς να αποχαιρετίσει την παρουσίαση των δεδομένων. Εισαγάγετε τις επόμενες αρκετές γραμμές στο πρόγραμμα.

Αν κάποιος στέλνει μια ιστοσελίδα, η πρώτη γραμμή είναι ένας καλός τρόπος εισαγωγής των δεδομένων σε ένα πρόγραμμα περιήγησης ιστού. Αν παραμείνει εκτός λειτουργίας, τα περισσότερα προγράμματα περιήγησης ιστού θα προεπιλεγούν στην απόδοση HTML. Ωστόσο, αν το συμπεριλάβετε, πρέπει να ακολουθήσετε το "OK" δύο νέους χαρακτήρες γραμμής. Αυτά χρησιμοποιούνται για τη διάκριση των πληροφοριών πρωτοκόλλου από το περιεχόμενο της σελίδας.

Η σύνταξη της πρώτης γραμμής, όπως πιθανόν να υποθέσετε, είναι το πρωτόκολλο, η έκδοση πρωτοκόλλου, ο αριθμός μηνύματος και η κατάσταση. Εάν έχετε πάει ποτέ σε μια ιστοσελίδα που έχει μετακινηθεί, πιθανότατα έχετε λάβει ένα σφάλμα 404. Το 200 μήνυμα εδώ είναι απλά ένα καταφατικό μήνυμα.

Το υπόλοιπο της παραγωγής είναι απλώς μια ιστοσελίδα διακεκομμένη σε αρκετές γραμμές. Θα σημειώσετε ότι ο διακομιστής μπορεί να προγραμματιστεί για να χρησιμοποιήσει δεδομένα χρήστη στην έξοδο. Η τελική γραμμή αντανακλά το αίτημα ιστού, όπως αυτό λήφθηκε από το διακομιστή.

Τέλος, ως πράξεις κλεισίματος της αίτησης, πρέπει να κλείσουμε το αντικείμενο αρχείου και την υποδοχή διακομιστή.

Τώρα αποθηκεύστε αυτό το πρόγραμμα κάτω από ένα αναγνωρίσιμο όνομα. Αφού το καλέσετε με το 'python program_name.py', εάν προγραμματίσατε ένα μήνυμα για να επιβεβαιώσετε την εκτέλεση της υπηρεσίας, θα πρέπει να εκτυπωθεί στην οθόνη. Το τερματικό θα φαίνεται στη συνέχεια να σταματήσει. Όλα είναι όπως θα έπρεπε. Ανοίξτε το πρόγραμμα περιήγησης ιστού και μεταβείτε στο localhost: 8080. Θα πρέπει να δείτε την έξοδο των εντολών εγγραφής που δώσαμε. Λάβετε υπόψη ότι, για λόγους χώρου, δεν έκανα εφαρμογή σφάλματος σε αυτό το πρόγραμμα. Ωστόσο, κάθε πρόγραμμα που κυκλοφορεί στο «άγριο» πρέπει.

instagram story viewer