Απλός διακομιστής Ιστού C++

Aplos Diakomistes Istou C



Σε αυτό το άρθρο, θα μάθουμε για τους διακομιστές Ιστού σε C++. Ο κύριος σκοπός του διακομιστή ιστού είναι να χειρίζεται τα αιτήματα HTTP που έρχονται, να επεξεργάζεται όλα τα επερχόμενα αιτήματα και να απαντά με το περιεχόμενο HTML ιστού ως αντάλλαγμα. Πρέπει να διατηρήσουμε τον διακομιστή ιστού σε C++ προσθέτοντας απλώς τις βιβλιοθήκες δικτύωσης στο περιβάλλον C++, όπως 'πρίζες', για να χειριστούμε τις επικοινωνίες και τα ζητήματα δικτύωσης. Ένας web server είναι η ραχοκοκαλιά του Διαδικτύου και είναι ένας τρόπος επικοινωνίας μεταξύ των χρηστών και των κύριων διακομιστών. Ας αξιολογήσουμε τη διαδικασία δημιουργίας ενός απλού διακομιστή ιστού μέσω κατάλληλων παραδειγμάτων υλοποίησης.

Ρύθμιση του περιβάλλοντος

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







Sockets Χειρισμός του διακομιστή Web

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



Εδώ, θα ορίσουμε τις βιβλιοθήκες για υποδοχές ως '#include '. Στην κύρια συνάρτηση, δημιουργούμε την υποδοχή αρχικοποιώντας το 'server_fd'. Μετά από αυτό, ελέγχουμε την τιμή του 'server_fd' που περιέχει την επικύρωση σύνδεσης στοκ. Εάν ο διακομιστής είναι εκτός λειτουργίας και δεν λειτουργεί σωστά, επιστρέφει ή εμφανίζει το μήνυμα 'Αποτυχία δημιουργίας υποδοχών'. Διαφορετικά, το μήνυμα που έχει τη διεύθυνση IP του διακομιστή ιστού θα εμφανίσει τα δεδομένα HTML στον διακομιστή ιστού.



#include
#include
#include
int main ( ) {
int server_fd = υποδοχή ( AF_INET, SOCK_STREAM, 0 ) ;
αν ( διακομιστή_fd == - 1 ) {
std::cerr << 'Αποτυχία δημιουργίας υποδοχής' ;
ΕΠΙΣΤΡΟΦΗ -1 ;
}
// αλλού
// {
// std::cout << 'έξοδος' ;
// }
// δένω
std::cout << 'http//:127.0.0.1:8080' ;
// Περαιτέρω κώδικας πηγαίνει εδώ
ΕΠΙΣΤΡΟΦΗ 0 ;
}


Η έξοδος αυτού του κώδικα επισυνάπτεται στα ακόλουθα:






Αυτό δείχνει ότι η υποδοχή έχει δημιουργηθεί με επιτυχία σε C++ για σύνδεση με τον διακομιστή web.

Χειρισμός Web Server σε C++

Ο διακομιστής ιστού του συστήματος έχει ρυθμιστεί για να χειρίζεται τις διαφορετικές έννοιες της C++, όπως συγχώνευση ταξινόμησης, γραμμική ταξινόμηση κ.λπ. Θυμηθείτε να αρχικοποιήσετε τις σημαντικές βιβλιοθήκες δικτύωσης. Ο διακομιστής web εκτελείται στον τοπικό υπολογιστή (127.0.0.1) και ακούει στη θύρα 8080.



Συμπεριλάβετε τις απαραίτητες βιβλιοθήκες στη γλώσσα προγραμματισμού C++ ως εξής:

# περιλαμβάνω < ώθηση / asio.hpp >


Να θυμάστε ότι η δημιουργία ενός διακομιστή web σε C++ δεν είναι μια εύκολη και χρονοβόρα διαδικασία. Μπορούμε να χειριστούμε τις εισερχόμενες συνδέσεις χρησιμοποιώντας το 'async_accept'.

Αποκρίσεις διακομιστή στον κώδικα C++ στον διακομιστή Web

Η απόκριση διακομιστή πρέπει να είναι HTTP που λειτουργεί στο πρόγραμμα περιήγησης και εμφανίζει την έξοδο στην προβολή HTML στην ιστοσελίδα. Όλες οι βιβλιοθήκες διαχειρίζονται τους διακομιστές και χειρίζονται όλα τα έγκυρα αιτήματα.

Σύνδεση και ακρόαση του διακομιστή Web

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

Πρέπει να αρχικοποιήσουμε τις λίγες βιβλιοθήκες για δέσμευση και σύνδεση.

Διεύθυνση Sockaddr_in;


Μπορούμε να δεσμεύσουμε τον διακομιστή. Εάν ο διακομιστής είναι εκτός λειτουργίας ή δεν είναι συνδεδεμένος, το μήνυμα δεν εμφανίζεται στην ιστοσελίδα οποιουδήποτε προγράμματος περιήγησης.

Αποδοχή των συνδέσεων με τον διακομιστή Web

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

Μέθοδοι αποστολής και λήψης δεδομένων από το τέλος χρήστη και διακομιστή

Αφού δημιουργήσετε τους συνδέσμους υποδοχής και αποδεχτείτε τη σύνδεση, το επόμενο πράγμα είναι να στείλετε τα δεδομένα στην πλευρά του διακομιστή και να λάβετε τα δεδομένα από τον διακομιστή χρησιμοποιώντας διαφορετικές λέξεις-κλειδιά και να δημιουργήσετε τις λειτουργίες που σχετίζονται με την αποστολή και τη λήψη των δεδομένων στη C++. Εδώ, ελέγχουμε την απόκριση των δεδομένων. Είναι αυτό το αίτημα για λήψη των δεδομένων ή για ΑΝΑΡΤΗΣΗ των δεδομένων από τον διακομιστή ιστού; Ελέγχουμε την κατάσταση απόκρισης του αιτήματος του πελάτη. Αποθηκεύουμε προσωρινά όλα τα αιτήματα πελάτη στο buffer για να εμφανίσουμε το μήνυμα ή την έξοδο στον διακομιστή web.

Γραμμική ταξινόμηση σε C++

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

#include
χρησιμοποιώντας namespace std?
void LinearSearch ( int arr [ ] , int len, int item ) {
Για ( ενθ Εγώ = 0 ;Εγώ < len;i++ ) {
αν ( αρ [ Εγώ ] == αντικείμενο ) {
cout << είδος << ' Βρέθηκε στο ευρετήριο : ' << Εγώ;
ΕΠΙΣΤΡΟΦΗ ;
}
}
cout << 'Δεν βρέθηκε' ;
}
int main ( ) {
int arr [ ] = { 10 , 5 , δεκαπέντε , είκοσι ένα , - 3 , 7 } ;
int len ​​= μέγεθοςof ( αρ ) / μέγεθος του ( αρ [ 0 ] ) ;
int αντικείμενο = είκοσι ένα ;
Γραμμική Αναζήτηση ( arr, len, item ) ;
ΕΠΙΣΤΡΟΦΗ 0 ;
}


Σε αυτό το παράδειγμα, αναζητούμε το στοιχείο '21' στο οποίο ευρετήριο. Έτσι, τρέχουμε αυτόν τον κώδικα. Η έξοδος αυτού του κώδικα επισυνάπτεται στα ακόλουθα:


Αυτή η έξοδος είναι πλέον ανοιχτή στον διακομιστή ιστού όπως σε οποιοδήποτε πρόγραμμα περιήγησης όπως το Chrome, το Edge κ.λπ.

Τερματίστε όλες τις συνδέσεις μετά την οθόνη εξόδου

Αυτό είναι το τελευταίο βήμα στο χειρισμό των δεδομένων σε έναν διακομιστή web. Θυμηθείτε να κλείσετε τις συνδέσεις υποδοχής αφού εκτελέσετε την απαιτούμενη έξοδο. Κλείνουμε την υποδοχή εδώ χρησιμοποιώντας τις λειτουργίες όπως «close(server_id)» και «close (client socket)».

Στο τέλος της λειτουργίας του διακομιστή, η αναμενόμενη έξοδος εμφανίζεται στην ιστοσελίδα με πρόσβαση στη διεύθυνση ως 'http//localhost:8080'.

συμπέρασμα

Στο τέλος αυτού του άρθρου, μπορούμε να πούμε ότι ο απλός χειρισμός διακομιστή ιστού στη C++ είναι πραγματικά πολύπλοκος και χρειάζεται πλήρη συγκέντρωση για την αποστολή και λήψη του αιτήματος του πελάτη HTTP. Μπορούμε να επεκτείνουμε τη λειτουργικότητα του διακομιστή ιστού για να εμφανίζεται το περιεχόμενο δυναμικά στην ιστοσελίδα. Ας ελπίσουμε ότι αυτό το άρθρο είναι χρήσιμο για εσάς και μπορείτε να εκτελέσετε αυτά τα παραδείγματα στο περιβάλλον σας για να κατανοήσετε τα βήματα που απαιτούνται για τη δημιουργία ενός απλού διακομιστή web σε C++.