הגדר שרת אינטרנט ב- Python באמצעות שקע

כהשלמה למדריך לקוח הרשת, מדריך זה מראה כיצד ליישם שרת אינטרנט פשוט ב- פייתון. אם להיות בטוחים, זה לא תחליף לאפאצ'י או לזאפ. ישנן גם דרכים חזקות יותר ליישם שירותי אינטרנט בפייתון, באמצעות מודולים כמו BaseHTTPServer. שרת זה משתמש במודול השקע באופן בלעדי.

תזכרו שמודול השקעים הוא עמוד השדרה של מרבית מודולי שירותי האינטרנט של פייתון. בדומה ללקוח הרשת הפשוט, בניית שרת איתו ממחישה את היסודות של שירותי אינטרנט בפייתון באופן שקוף. BaseHTTPServer עצמו מייבא את מודול השקע כדי להשפיע על שרת.

בדרך של סקירה, כל עסקאות הרשת מתרחשות בין לקוחות לשרתים. ברוב הפרוטוקולים הלקוחות שואלים כתובת מסוימת ומקבלים נתונים.

בתוך כל כתובת מספר רב של שרתים יכולים לרוץ. המגבלה היא בחומרה. עם חומרה מספקת (זיכרון RAM, מהירות מעבד וכו '), אותו מחשב יכול לשמש כשרת אינטרנט, שרת ftp ו- שרת דואר (פופ, smtp, imap או כל האמור לעיל) כולם בו זמנית. כל שירות משויך ליציאה. היציאה מחוברת לשקע. השרת מקשיב ליציאה המשויכת שלו ומספק מידע כאשר מתקבלות בקשות ביציאה זו.

אז כדי להשפיע על חיבור רשת אתה צריך להכיר את המארח, את היציאה ואת הפעולות המותרות באותה יציאה. רוב שרתי האינטרנט פועלים ביציאה 80. עם זאת, כדי למנוע התנגשות עם שרת Apache מותקן, שרת האינטרנט שלנו יפעל ביציאה 8080. בכדי למנוע התנגשות עם שירותים אחרים, עדיף לשמור על שירותי HTTP בנמל 80 או 8080. אלה הם השניים הנפוצים ביותר. ברור שאם משתמשים בהם, עליך למצוא יציאה פתוחה ולהתריע בפני המשתמשים על השינוי.

instagram viewer

בדומה ללקוח הרשת, עליך לשים לב שכתובות אלה הן מספרי היציאות הנפוצים עבור השירותים השונים. כל עוד הלקוח מבקש את השירות הנכון ביציאה הנכונה בכתובת הנכונה, תקשורת עדיין תתרחש. של גוגל שירות הדואר, למשל, לא פעל בתחילה על מספרי היציאות הנפוצים, אך מכיוון שהם יודעים לגשת לחשבונות שלהם, משתמשים עדיין יכולים לקבל את הדואר שלהם.

להבדיל מלקוח הרשת, כל המשתנים בשרת הם חוטי רשת. כל שירות שצפוי לפעול ללא הרף לא אמור לכלול את המשתנים של ההיגיון הפנימי שלו בשורת הפקודה. הווריאציה היחידה לכך תהיה אם מסיבה כלשהי אתה רוצה שהשירות יפעל מדי פעם ובמספרי יציאה שונים. אם זה היה המקרה, עדיין הייתם יכולים לצפות בזמן המערכת ולשנות כריכות בהתאם.

כאמור, השרת צריך להכיר את המארח אליו הוא משויך ואת היציאה שאליה להאזין. לענייננו, השירות יחול על שם מארח כלשהו.

הנמל, כאמור, יהיה 8080. אז שימו לב שאם אתם משתמשים בשרת זה בשילוב עם לקוח הרשת, תצטרכו לשנות את מספר היציאה המשמש באותו תכנית.

אם לבקש מידע או לשרת אותו, על מנת לגשת אל מרשתת, עלינו ליצור שקע. התחביר לשיחה זו הוא כדלקמן:

השניים הראשונים הם כמובן פרוטוקולים באינטרנט. ניתן לגשת לכל דבר שנוסע דרך האינטרנט במשפחות אלה. רשתות רבות עדיין אינן פועלות ב- IPv6. לכן, אלא אם כן ידוע לך אחרת, זה הכי בטוח לברירת המחדל ל- IPv4 ולהשתמש ב- AF_INET.

ללא ספק, הסוגים הנפוצים ביותר הם SOCK_STEAM ו- SOCK_DGRAM מכיוון שהם פועלים בשני הפרוטוקולים של חבילת ה- IP (TCP ו- UDP). שלושת האחרונים נדירים בהרבה ולכן יתכן שלא תמיד הם נתמכים.

לאחר יצירת השקע, עלינו להגדיר את אפשרויות השקע. עבור כל אובייקט שקע, באפשרותך להגדיר את אפשרויות השקע באמצעות שיטת setsockopt (). התחביר הוא כדלקמן:

אם אנו רוצים לתת משוב למי שמתקשר לשרת, נוכל כעת להזין פקודת הדפסה כדי לאשר שהשרת פועל.

לאחר התקנת השרת, כעת עלינו לדעת פייתון מה לעשות כאשר מתבצעת בקשה בנמל הנתון. לשם כך אנו מתייחסים לבקשה בערכה ומשתמשים בה כטיעון של לולאה מתמשכת בזמן.

כאשר מתבצעת בקשה, על השרת לקבל את הבקשה וליצור אובייקט קובץ כדי ליצור איתו אינטראקציה.

במקרה זה, השרת משתמש באותה יציאה לקריאה וכתיבה. לכן, לשיטת ה- makefile ניתנת טיעון 'rw'. אורך האפס של גודל המאגר פשוט משאיר את החלק של הקובץ לקבוע באופן דינמי.

אלא אם כן אנו רוצים ליצור שרת פעולה יחיד, השלב הבא הוא לקרוא קלט מאובייקט הקובץ. כשאנו עושים זאת, עלינו להקפיד על הפסקת קלט זה של שטח מרחב עודף.

הבקשה תגיע בצורה של פעולה, ואחריה עמוד, הפרוטוקול וגירסת הפרוטוקול בה נעשה שימוש. אם רוצים להגיש דף אינטרנט, יש לפצל קלט זה כדי לאחזר את הדף המבוקש ואז לקרוא את הדף למשתנה שנכתב אז לאובייקט קובץ השקע. ניתן למצוא פונקציה לקריאת קובץ במילון בבלוג.

על מנת להפוך את ההדרכה הזו לממחישה יותר מה ניתן לעשות עם מודול השקע, אנו נכחיש את החלק הזה בשרת ובמקום זאת נראה כיצד ניתן לדייק את הצגת הנתונים. הזן את מספר השורות הבאות לתוך תכנית.

אם אחד שולח דף אינטרנט, השורה הראשונה היא דרך נחמדה להציג את הנתונים לדפדפן אינטרנט. אם לא יישאר בחוץ, מרבית דפדפני האינטרנט יעבדו כברירת מחדל HTML. עם זאת, אם אחד מהם כולל את זה, 'OK' צריך להיות אחריו שתיים תווים חדשים. אלה משמשים כדי להבחין בין פרטי הפרוטוקול לתוכן העמוד.

התחביר של השורה הראשונה, כפי שאפשר לשער, הוא פרוטוקול, גרסת פרוטוקול, מספר הודעה ומצב. אם אי פעם הלכת לדף אינטרנט שעבר, כנראה שקיבלת שגיאה 404. 200 ההודעה כאן היא פשוט ההודעה המתקבלת.

שאר הפלט הוא פשוט דף אינטרנט המתפרק על פני מספר שורות. תוכלו לשים לב שניתן לתכנת את השרת לשימוש בנתוני משתמש בפלט. השורה האחרונה משקפת את בקשת האינטרנט כפי שהתקבלה על ידי השרת.

לבסוף, כפעולות הסגירה של הבקשה, עלינו לסגור את אובייקט הקובץ ואת שקע השרת.

כעת שמור תוכנית זו תחת שם מזוהה. לאחר שתקרא לזה בשם 'python program_name.py', אם תכנת הודעה כדי לאשר את השירות פועל, זה אמור להדפיס למסך. לאחר מכן נראה שהטרמינל מתעכב. הכל כמו שצריך. פתח את דפדפן האינטרנט שלך ועבור אל localhost: 8080. לאחר מכן עליך לראות את הפלט של פקודות הכתיבה שנתנו. לתשומת לבך, לצורך המרחב, לא יישמתי טיפול בשגיאות בתוכנית זו. עם זאת, כל תוכנית ששוחררה ל'פרוע 'צריכה.

instagram story viewer