Skonfiguruj serwer internetowy w Pythonie za pomocą Socket

Jako uzupełnienie samouczka dotyczącego klienta sieciowego, ten samouczek pokazuje, jak zaimplementować prosty serwer WWW Pyton. Dla pewności nie zastąpi to Apache ani Zope. Istnieją również bardziej niezawodne sposoby implementacji usług sieciowych w Pythonie przy użyciu modułów takich jak BaseHTTPServer. Ten serwer używa wyłącznie modułu gniazda.

Przypomnisz sobie, że moduł gniazda jest podstawą większości modułów usług WWW Python. Podobnie jak w przypadku prostego klienta sieciowego, zbudowanie z nim serwera w przejrzysty sposób ilustruje podstawy usług sieciowych w Pythonie. BaseHTTPServer sam importuje moduł gniazda, aby wpłynąć na serwer.

W ramach przeglądu wszystkie transakcje sieciowe odbywają się między klientami a serwerami. W większości protokołów klienci pytają o określony adres i odbierają dane.

W ramach każdego adresu może działać wiele serwerów. Limit jest w sprzęcie. Przy wystarczającym sprzęcie (pamięć RAM, szybkość procesora itp.) Ten sam komputer może służyć jako serwer sieciowy, serwer ftp i

instagram viewer
serwer poczty elektronicznej (pop, smtp, imap lub wszystkie powyższe) jednocześnie. Każda usługa jest powiązana z portem. Port jest powiązany z gniazdem. Serwer nasłuchuje na powiązanym porcie i udziela informacji, gdy żądania są odbierane na tym porcie.

Aby wpłynąć na połączenie sieciowe, musisz znać hosta, port i czynności dozwolone na tym porcie. Większość serwerów WWW działa na porcie 80. Aby jednak uniknąć konfliktu z zainstalowanym serwerem Apache, nasz serwer internetowy będzie działał na porcie 8080. Aby uniknąć konfliktu z innymi usługami, najlepiej zachować usługi HTTP na porcie 80 lub 8080. Są to dwa najczęstsze. Oczywiście, jeśli są one używane, musisz znaleźć otwarty port i powiadomić użytkowników o zmianie.

Podobnie jak w przypadku klienta sieciowego, należy pamiętać, że te adresy są wspólnymi numerami portów dla różnych usług. Tak długo, jak klient prosi o poprawną usługę na właściwym porcie pod właściwym adresem, komunikacja będzie się nadal odbywać. Google's na przykład usługa pocztowa początkowo nie działała na wspólnych numerach portów, ale ponieważ wiedzą, jak uzyskać dostęp do swoich kont, użytkownicy mogą nadal otrzymywać swoją pocztę.

W przeciwieństwie do klienta sieciowego, wszystkie zmienne na serwerze są przewodowe. Każda usługa, która ma stale działać, nie powinna mieć w swojej linii poleceń zmiennych swojej wewnętrznej logiki. Jedyną odmianą byłoby, gdybyś z jakiegoś powodu chciał, aby usługa była uruchamiana od czasu do czasu na różnych numerach portów. Gdyby tak jednak było, nadal można obserwować czas systemowy i odpowiednio zmieniać powiązania.

Jak już wspomniano, serwer musi znać host, z którym ma być powiązany, oraz port, na którym ma nasłuchiwać. Dla naszych celów usługa będzie w ogóle obowiązywała dla dowolnej nazwy hosta.

Port, jak wspomniano wcześniej, to 8080. Pamiętaj więc, że jeśli używasz tego serwera w połączeniu z klientem sieciowym, będziesz musiał zmienić numer portu, który jest w nim używany program.

Czy poprosić o informacje lub je podać, aby uzyskać dostęp do Internet, musimy stworzyć gniazdo. Składnia tego wywołania jest następująca:

Pierwsze dwa są oczywiście protokołami internetowymi. W tych rodzinach można uzyskać dostęp do wszystkiego, co podróżuje przez Internet. Wiele sieci wciąż nie działa na IPv6. Tak więc, chyba że wiesz inaczej, najbezpieczniej jest domyślnie wybrać IPv4 i użyć AF_INET.

Zdecydowanie najpopularniejszymi typami są SOCK_STEAM i SOCK_DGRAM, ponieważ działają na dwóch protokołach pakietu IP (TCP i UDP). Te trzy ostatnie są znacznie rzadsze i dlatego nie zawsze mogą być obsługiwane.

Po utworzeniu gniazda musimy ustawić opcje gniazda. Dla dowolnego obiektu gniazda można ustawić opcje gniazda za pomocą metody setsockopt (). Składnia jest następująca:

Jeśli chcemy przekazać opinię osobie dzwoniącej do serwera, możemy teraz wprowadzić polecenie drukowania, aby potwierdzić, że serwer działa.

Po skonfigurowaniu serwera musimy teraz powiedzieć Pyton co zrobić, gdy na danym porcie zostanie wysłane żądanie. W tym celu odwołujemy się do żądania według jego wartości i używamy go jako argumentu trwałej pętli while.

Po złożeniu żądania serwer powinien je zaakceptować i utworzyć obiekt pliku, aby z nim współdziałać.

W takim przypadku serwer używa tego samego portu do odczytu i zapisu. Dlatego metoda makefile otrzymuje argument „rw”. Długość zerowa rozmiaru bufora po prostu pozostawia tę część pliku do ustalenia dynamicznie.

O ile nie chcemy utworzyć serwera z pojedynczym działaniem, następnym krokiem jest odczyt danych wejściowych z obiektu pliku. Kiedy to robimy, powinniśmy uważać, aby usunąć nadmiar wprowadzonych białych znaków.

Żądanie przyjdzie w postaci akcji, po której nastąpi strona, protokół i używana wersja protokołu. Jeśli ktoś chce obsłużyć stronę internetową, dzieli to wejście, aby pobrać żądaną stronę, a następnie odczytuje tę stronę na zmienną, która jest następnie zapisywana w obiekcie pliku gniazda. Funkcję odczytu pliku do słownika można znaleźć na blogu.

Aby ten samouczek był nieco bardziej ilustrujący to, co można zrobić z modułem gniazda, zrezygnujemy z tej części serwera i zamiast tego pokażemy, jak można niuansować prezentację danych. Wprowadź kilka kolejnych wierszy do program.

Jeśli ktoś wysyła stronę internetową, pierwszy wiersz to dobry sposób na wprowadzenie danych do przeglądarki internetowej. Jeśli zostanie pominięty, większość przeglądarek internetowych domyślnie renderuje HTML. Jeśli jednak go uwzględnisz, po nim musi być „OK” dwa nowe znaki linii. Służą one do odróżnienia informacji protokołu od zawartości strony.

Jak można się domyślać, pierwszą składnią pierwszego wiersza jest protokół, wersja protokołu, numer komunikatu i status. Jeśli kiedykolwiek odwiedziłeś przeniesioną stronę internetową, prawdopodobnie wystąpił błąd 404. 200 wiadomość tutaj jest po prostu wiadomością twierdzącą.

Reszta danych wyjściowych to po prostu strona internetowa podzielona na kilka wierszy. Zauważ, że serwer można zaprogramować tak, aby używał danych użytkownika w danych wyjściowych. Ostatni wiersz odzwierciedla żądanie sieciowe otrzymane przez serwer.

Wreszcie, w związku z zamknięciem żądania, musimy zamknąć obiekt pliku i gniazdo serwera.

Teraz zapisz ten program pod rozpoznawalną nazwą. Po wywołaniu go za pomocą „python nazwa_programu.py”, jeśli zaprogramowałeś komunikat potwierdzający, że usługa jest uruchomiona, powinien zostać wydrukowany na ekranie. Terminal wydaje się wtedy wstrzymywać. Wszystko jest tak jak powinno być. Otwórz przeglądarkę internetową i przejdź do localhost: 8080. Powinieneś zobaczyć wynik wydanych przez nas poleceń zapisu. Pamiętaj, że ze względu na miejsce nie wdrożyłem obsługi błędów w tym programie. Jednak każdy program wydany w „dzikiej” wersji powinien.

instagram story viewer