قم بإعداد خادم إنترنت في Python Using Socket

كمكمل لبرنامج تعليمي عميل الشبكة ، يوضح هذا البرنامج التعليمي كيفية تنفيذ خادم ويب بسيط فيه بيثون. بالتأكيد ، هذا ليس بديلاً عن Apache أو Zope. هناك أيضًا طرق أكثر قوة لتنفيذ خدمات الويب في Python ، باستخدام وحدات مثل BaseHTTPServer. يستخدم هذا الخادم وحدة المقابس بشكل خاص.

سوف تتذكر أن وحدة المقابس هي العمود الفقري لمعظم وحدات خدمة الويب Python. كما هو الحال مع عميل الشبكة البسيط ، فإن إنشاء خادم به يوضح أساسيات خدمات الويب في بيثون بشفافية. BaseHTTPServer نفسه يستورد وحدة مأخذ التوصيل للتأثير على الخادم.

من خلال المراجعة ، تحدث جميع معاملات الشبكة بين العملاء والخوادم. في معظم البروتوكولات ، يطلب العملاء عنوانًا معينًا ويتلقون البيانات.

ضمن كل عنوان ، يمكن تشغيل العديد من الخوادم. الحد في الأجهزة. مع وجود أجهزة كافية (ذاكرة الوصول العشوائي ، سرعة المعالج ، إلخ) ، يمكن لجهاز الكمبيوتر نفسه أن يعمل كخادم ويب ، خادم بروتوكول نقل الملفات ، و خادم البريد (pop ، smtp ، imap ، أو كل ما سبق) كلها في نفس الوقت. كل خدمة مرتبطة بمنفذ. لا بد المنفذ إلى المقبس. يستمع الخادم إلى المنفذ المقترن به ويعطي معلومات عند تلقي الطلبات على ذلك المنفذ.

للتأثير على اتصال الشبكة ، يلزمك معرفة المضيف والمنفذ والإجراءات المسموح بها على هذا المنفذ. تعمل معظم خوادم الويب على المنفذ 80. ومع ذلك ، لتجنب التعارض مع خادم Apache المثبت ، سيتم تشغيل خادم الويب الخاص بنا على المنفذ 8080. لتجنب التعارض مع الخدمات الأخرى ، من الأفضل الاحتفاظ بخدمات HTTP على المنفذ 80 أو 8080. هذان هما الأكثر شيوعا. من الواضح ، إذا تم استخدامها ، فيجب عليك العثور على منفذ مفتوح وتنبيه المستخدمين إلى التغيير.

كما هو الحال مع عميل الشبكة ، يجب أن تلاحظ أن هذه العناوين هي أرقام المنافذ الشائعة للخدمات المختلفة. ما دام العميل يطلب الخدمة الصحيحة على المنفذ الصحيح على العنوان الصحيح ، فسيظل الاتصال يحدث. جوجل خدمة البريد ، على سبيل المثال ، لم يتم تشغيلها مبدئيًا على أرقام المنافذ الشائعة ، ولكن لأنهم يعرفون كيفية الوصول إلى حساباتهم ، لا يزال بإمكان المستخدمين الحصول على بريدهم.

بخلاف عميل الشبكة ، فإن كل المتغيرات في الخادم تكون متشابكة. يجب ألا تحتوي أي خدمة يتوقع تشغيلها باستمرار على متغيرات منطقها الداخلي المعين في سطر الأوامر. الاختلاف الوحيد في هذا الأمر هو إذا كنت ، لسبب ما ، تريد تشغيل الخدمة من حين لآخر وعلى أرقام منافذ مختلفة. ومع ذلك ، إذا كان الأمر كذلك ، فستظل قادرًا على مشاهدة وقت النظام وتغيير الارتباطات وفقًا لذلك.

كما ذكرنا سابقًا ، يحتاج الخادم إلى معرفة المضيف الذي سيتم ربطه والمنفذ الذي سيتم الاستماع إليه. لأغراضنا ، يتعين علينا تطبيق الخدمة على أي اسم مضيف على الإطلاق.

الميناء ، كما ذكرنا سابقًا ، سيكون 8080. لاحظ أنه إذا كنت تستخدم هذا الخادم مع عميل الشبكة ، فستحتاج إلى تغيير رقم المنفذ المستخدم في ذلك برنامج.

سواء لطلب معلومات أو لخدمتها ، من أجل الوصول إلى الانترنت، نحن بحاجة إلى إنشاء مأخذ. بناء الجملة لهذه المكالمة كما يلي:

الأولين من الواضح أن بروتوكولات الإنترنت. يمكن الوصول إلى أي شيء يسافر عبر الإنترنت في هذه العائلات. العديد من الشبكات لا تزال لا تعمل على IPv6. لذلك ، ما لم تكن تعلم خلاف ذلك ، فمن الأكثر أمانًا الافتراضي لـ IPv4 واستخدام AF_INET.

إلى حد بعيد ، الأنواع الأكثر شيوعًا هي SOCK_STEAM و SOCK_DGRAM لأنها تعمل على البروتوكولين لمجموعة IP (TCP و UDP). الثلاثة الأخيرة أكثر ندرة ولذلك قد لا يتم دعمها دائمًا.

بعد إنشاء المقبس ، نحتاج بعد ذلك إلى ضبط خيارات المقبس. لأي كائن مأخذ توصيل ، يمكنك تعيين خيارات مأخذ التوصيل باستخدام طريقة setsockopt (). بناء الجملة كالتالي:

إذا كنا نريد تقديم ملاحظات إلى الشخص الذي يتصل بالخادم ، فيمكننا الآن إدخال أمر طباعة لتأكيد أن الخادم يعمل.

بعد إعداد الخادم ، نحتاج الآن إلى معرفة ذلك بيثون ماذا تفعل عندما يتم تقديم طلب على المنفذ المحدد. لهذا ، نشير إلى الطلب حسب قيمته ونستخدمه كحجة حلقة مستمرة.

عند تقديم طلب ، يجب على الخادم قبول الطلب وإنشاء كائن ملف للتفاعل معه.

في هذه الحالة ، يستخدم الخادم نفس المنفذ للقراءة والكتابة. لذلك ، يتم إعطاء أسلوب makefile وسيطة 'rw'. طول فارغة حجم المخزن المؤقت ببساطة يترك هذا الجزء من الملف ليتم تحديدها بشكل حيوي.

ما لم نرغب في إنشاء خادم أحادي الإجراء ، فإن الخطوة التالية هي قراءة الإدخال من كائن الملف. عندما نفعل ذلك ، يجب أن نكون حريصين على تجريد تلك المدخلات من مسافة بيضاء زائدة.

سيأتي الطلب في شكل إجراء ، متبوعًا بصفحة وبروتوكول وإصدار البروتوكول الذي يتم استخدامه. إذا أراد المرء عرض صفحة ويب ، فيقسم هذا الإدخال هذا لاسترداد الصفحة المطلوبة ثم يقرأ تلك الصفحة في متغير يتم كتابتها بعد ذلك إلى كائن ملف مأخذ التوصيل. يمكن العثور على وظيفة لقراءة ملف في القاموس في المدونة.

من أجل جعل هذا البرنامج التعليمي أكثر توضيحية قليلاً لما يمكن للمرء فعله باستخدام وحدة المقابس ، سنتنازل عن هذا الجزء من الخادم ونظهر بدلاً من ذلك كيف يمكن للمرء أن يعزز دقة عرض البيانات. أدخل الأسطر القليلة التالية في برنامج.

إذا كان هناك من يرسل صفحة ويب ، فإن السطر الأول هو وسيلة لطيفة لإدخال البيانات إلى متصفح الويب. إذا تم استبعادها ، فستتوقف معظم متصفحات الويب عن العرض لغة البرمجة. ومع ذلك ، إذا تضمن ذلك ، يجب أن يتبع "موافق" اثنان شخصيات سطر جديد. هذه تستخدم لتمييز معلومات البروتوكول عن محتوى الصفحة.

بناء الجملة في السطر الأول ، كما يمكنك على الأرجح ، هو البروتوكول وإصدار البروتوكول ورقم الرسالة والحالة. إذا ذهبت إلى صفحة ويب انتقلت ، فمن المحتمل أنك قد تلقيت خطأ 404. 200 رسالة هنا هي ببساطة رسالة إيجابية.

ما تبقى من الإخراج هو مجرد صفحة ويب مقسمة على عدة خطوط. ستلاحظ أنه يمكن برمجة الخادم لاستخدام بيانات المستخدم في الإخراج. يعكس السطر الأخير طلب الويب حيث تم استلامه بواسطة الخادم.

أخيرًا ، نظرًا لإغلاق الطلب ، نحتاج إلى إغلاق كائن الملف ومأخذ الخادم.

الآن احفظ هذا البرنامج تحت اسم معروف. بعد الاتصال بـ "python program_name.py" ، إذا قمت ببرمجة رسالة لتأكيد أن الخدمة قيد التشغيل ، فيجب أن تتم طباعة هذا على الشاشة. المحطة ثم يبدو أن توقف. كل شيء كما ينبغي أن يكون. افتح متصفح الويب الخاص بك وانتقل إلى المضيف المحلي: 8080. يجب أن ترى بعد ذلك إخراج أوامر الكتابة التي قدمناها. يرجى ملاحظة أنه ، من أجل الفضاء ، لم أطبق معالجة الأخطاء في هذا البرنامج. ومع ذلك ، فإن أي برنامج صدر في "البرية" ينبغي.