المتحدث: الآن دعونا الغوص إلى رمز التوزيع ونلقي نظرة على سياق الذي رمز تكتب سوف يتم تشغيل. في نهاية اليوم، وأنت تسير لتنفيذ مجمل خادم الويب. ولكن قدمنا كنت مع هيكل عظمي التعليمات البرمجية التي لديها بعض الوظائف، وخاصة فيما يتصل الشبكات. دعونا نلقي نظرة. حتى هنا نحو الجزء العلوي الملف حفنة من ميزة اختبار متطلبات الكلية. الآن هذا هو مجرد سمة من سمات ج، حيث وفقا لمجموعة من صفحات رجل لديك لتحديد بعض هذه الثوابت ليكون صحيحا أو أن يكون حتى أرقام محددة بحيث لديك حق الوصول إلى وظائف معينة. وإلا فإنها سوف تكون غير معلنة وسوف لا يكون لديك الوصول. حتى لقد فعلت ذلك عن طريق قراءة صفحات الرجل. الآن أسفل أدناه، في خطوط 15 إلى 17، ونحن لدينا مجموعة كاملة من حدود المعلنة. ولقد اقترضت هذه من خادم الويب شعبية تسمى أباتشي. وهذه ليست سوى الأرقام التي تجري للحد من العدد الإجمالي وحدات البايت التي يتم السماح في سياقات مختلفة لطلب HTTP أن يسمح متصفح أن ترسل لي. وبعد ذلك، نحدد الثمانية. الآن الثماني هي مجرد وسيلة الهوى للقول بايت، أو ثمانية بت. تبين في الأمس بايت لم يكن بالضرورة ثمانية بت، حتى الثماني هي دائما ثمانية بت. حتى في هذه الحالة قمنا المعتمدة ما هو شائع في الشبكات العالم من استدعاء ثمانية بايت وثمانية. أنا هنا قمت بتحديدها من شأنها أن الثمانية يكون 512، مثل ذلك كثيرا في الطب الشرعي عندما نقرأ مجموعة من بايت في كل مرة، هنا أيضا، ونحن في طريقنا لقراءة مجموعة من الثمانية في وقت واحد. بجانب مجموعة كاملة من الملفات رأس. كيف أعرف أن تشمل هذه؟ حسنا أنا مجرد قراءة الرجل صفحات لعدد من الوظائف التي سنستخدم في هذا التوزيع رمز وتدرج في تلك كنت تعليمات. والآن لدينا نوع البيانات. لقد أعلن أحد الثماني ليكون شار. وسنرى لاحقا أن هذا المستخدمة في جميع أنحاء التعليمات البرمجية. ولقد أعلن مجمله مجموعة من النماذج، وسنقوم المشي بسرعة من خلال كل من هذه الوظائف. وأخيرا، وربما الأكثر من المهم أن نأخذ في تمانع في هذه المرحلة من القصة، هو أن هناك هي، في الواقع ككل مجموعة من المتغيرات العالمية في الجزء العلوي من الملف، الجذر، CFD، الصندوق الاجتماعي للتنمية، طلب، ملف والجسم. الآن عموما، وذلك باستخدام الكثير العالمية المتغيرات، أو المتغيرات العالمية في كل شيء، ليس ممارسة الظهر. ولكن تبين أننا أيضا باستخدام تقنية تسمى معالجة الإشارات في وقت لاحق في رمز، والذي يسمح لنا ل كشف عندما يقوم المستخدم يضرب شيئا مثل CTRL C واغلاق خادم بأمان. ولكي نفعل ذلك برشاقة وفعلا تحرير الذاكرة، نحن بحاجة إلى الحصول على هذه المتغيرات العالمية. والآن دعونا نلقي نظرة على الرئيسي، الذي يدفع بكامله من هذا البرنامج. أولا، في الجزء العلوي هنا نحن لديك متغير رقم الخطأ الذي يظهر عدم لديها نوع، ولكن هذا لأنه في الواقع المحددة في ملف يسمى الخطأ الذي errno.h يتم تضمين مستوى اعلى. إذا كنت تفعل رجل errno إلى الواقع انظر تعريف لهذا الشيء، سترى أن هذا هو متغير عالمي خاص والتي وضعتها مجموعة كاملة وظائف ليست مكتوبة من قبلنا، ولكن من قبل المؤلفين لينكس وغيرها من النظم لضبط الواقع رقم لهذا المتغير عندما يكون هناك شيء وغني عن الخطأ بحيث يمكنك عالميا معرفة ما فعلت غير ما يرام. الآن أسفل أدناه سترى جديدة تقنية ربما تستخدم getopt، وظيفة التي تساعد على قيادة تحليل وسائط سطر بحيث أننا لا لديك لعناء إضاعة الوقت يحسب من كيفية تحليل شيء من هذا القبيل 8080، أو شرطة ص، أو شرطة ساعة للحصول على مساعدة. getopt يفعل أساسا أن بالنسبة لنا. انظر صفحة الرجل لأكثر من ذلك. المقبل، ونحن تفعل شيئا من الخطأ فحص للتأكد من أن رقم المنفذ هو داخل النطاق المحدد في المواصفات. وبعد ذلك، نرى استدعاء الدالة بدء، الذي سنقوم تعريف ننظر في لحظة، وكما يبدو من اسمها يقترح، وهذا يبدأ خادم الويب. لدينا هنا دعوة إلى وظيفة دعا إشارة الذي يقول: إذا وعندما تسمع تحكم C من لوحة المفاتيح للمستخدم، والمضي قدما والدعوة معالج وظيفة تسمى ما يجري الأشياء لفي نهاية المطاف تنظيف ووقف الخادم. دون ذلك هو ما يبدو أن حلقة لا نهائية، السطر الأول منها بشكل فعال مكالمة لدالة يسمى إعادة تعيين، والتي نحن أنفسنا تنفيذ في وقت لاحق من أجل لتحرير بعض الدول العالمية لدينا. بعد ذلك هو خط التعليمات البرمجية التي مشروط وفحص عودة قيمة اتصال. تبدو الآن وكأنها مرتبطة المسند، وهو الأمر الذي يعود صحيحة أو خاطئة. وفعلت ذلك، ولكن هناك شيء خاص في اتصال في أنه من مكالمة حظر. وسوف الجلوس هناك والانتظار حتى متصفح المستخدم يحاول الاتصال إلى هذه الشبكة الخادم وعندها فقط سوف فإنه العودة صحيحة أو خاطئة حتى يتسنى لنا المضي قدما إلى داخل لو بيان هذا. مرة واحدة هناك، لاحظ هذه الوظيفة إلى وظيفة تسمى تحليل، التي كتبنا، الذي يوزع كل من الثمانية، كل من بايت القادمة من مستعرض إلى الخادم، حتى نتمكن من تسليم لكم مرة أخرى في نهاية المطاف بقيمة واحد من هذه المتغيرات العالمية التي مخازن كل من وحدات البايت في فقط رؤوس من ذلك طلب، وليس الجسم إذا كانت هناك فعلا هيئة لذلك. الآن أسفل أدناه نبدأ تحليل تلك الرؤوس لاستخراج مجموعة فرعية من المعلومات أننا نهتم. على وجه التحديد، في ل مواصفات، علينا أولا أراد أن يطلب الخط، الذي هو مجرد أن السطر الأول جدا أن نأمل يقول شيئا مثل الحصول على خفض أو بعض الطريق ثم HTTP 1.1. نحن نستخدم هذا التشبيه إبرة في كومة قش للبحث عن وجه الخصوص حرف أو عناوين. وبالفعل، هناك عدد من وظائف في التعليمات البرمجية التوزيع لدينا أنك، أيضا، قد تجد مفيدة عندما تبحث عن قيم معينة. في نهاية المطاف، ونحن نسخ هذه بايت إلى متغير يسمى الخط، التي لاحظت، أيضا، لدينا تخصيص على كومة عن طريق مجموعة الحجم بشكل حيوي. ونحن نحاول عمدا لتجنب استدعاء malloc لمرة أخرى، لأن السيطرة C يجري ميزة المحتملة لهذا البرنامج، ونحن لا تريد أن يكون هذا الرمز فجأة توقفت بسبب ضرب المستعمل السيطرة C، والنتيجة التي هو أنني قد لا تكون هناك فرصة لشيء مجانا لقد malloced. لذلك أنا أحاول أن استخدام قدر من المكدس هو يمكنني هنا. يصل المقبل، في مجمله مجموعة من لدوس. سوف اشرح مواصفات على بالضبط ما هو متوقع هنا، لكن التعليقات تعطيك تلميح من ما ينتظرنا في المستقبل. تحتاج أولا إلى تحقق من صحة خط طلب وتأكد من أنه يبدو أن مواصفات النحوي، إذا جاز التعبير، تقول انها ينبغي. ثم تحتاج إلى استخراج شيء دعا الاستعلام، الاشياء بعد علامة استفهام، مثل رأينا مع جوجل سبيل المثال لدينا في تمرير في معلمة HD. نحن بعد ذلك سلسلة معا جذر خادم الويب مع المسار الذي هو في هذا الطلب السطر الأول وتشكيل المسار الكامل لل ملف نريد أن نبحث عن. بعد ذلك، ونحن في طريقنا للتأكد من أن الملف موجود وقابل للقراءة. وبعد ذلك نحن ذاهبون لاستخراج لها ملف التمديد، وهتمل أو فب، أو بعض تمديد هذا هذا في نهاية جدا من السلسلة المطلوبة. يصل المقبل هو ككل مجموعة من التعليمات البرمجية كتبنا لتوليد الواقع PHP المحتوى المقدم لك. باختصار، هذا كود يأخذ في اسم من الملف الذي تريد PHP لتفسير. نحن نمر من قبل ما يسمى أنبوب إلى مترجم PHP و. نعود الاستجابة كما لو كانت استجابة الملف نفسه. وبعد ذلك تكرار عبر ذلك الملف بايت، وسحب كل منهم إلى عازلة واحد لذلك ما في وسعنا في نهاية المطاف طباعتها. في الواقع، كل هذه يدعو هنا إلى dprintf يسمح لنا لطباعة شيء دعا واصف الملف، والذي هو مجرد عدد صحيح الذي يمثل الملف. مشابهة جدا في الروح، ولكن تختلف جوهريا عن ملف مؤشر نجم. لاحظ كيف يمكنك استخدام بناء جملة مثل printf هنا حتى أستطيع أن حيوي إدراج شيء من هذا القبيل طول لقيمة رأس HTTP دعا المحتوى طول. وكنت في نهاية المطاف وظيفة الحق في كتابة الواقع الجسم على الطلب. للأسف، نحن تنفذ فقط دعم حيوي ملفات PHP إنشاؤه. نحن لم تنفذ الدعم ل الملفات الثابتة مثل صور متحركة وصور JPEG، وCSS و HTML الملفات. التي، للأسف، يتم ترك لك للرد على الغرض العميل هذا القيام به. لذلك هناك ستجد أن هناك ليس كثيرا إلهام داخل تلك الكتلة، ولكن إذا كنت أعلى قليلا حتى في كيفية ذهبنا حول تفسير كود PHP، وظائف عليك استخدام تختلف قليلا. في الواقع، يمكنك الاقتراض بعض من وظائف ربما من الطب الشرعي مجموعة مشكلة، لأن في نهاية اليوم كل ما تحتاجه ل القيام به هنا هو بمجرد أن تعرف ما فتح ملف وبمجرد أن تعرف ما يسمى ب عليه نوع MIME أو نوع المحتوى، كنت بحاجة لقراءة في تلك بايت ويبصقون عليهم بطريقة أو بأخرى العودة. والآن جولة في هذا وظائف أخرى الملف. حتى يتم توصيل أولا، والتي ببساطة يعود صحيح عندما يسمع أخيرا اتصال من المستخدم. يصل المقبل هو الخطأ. خطأ، في الوقت نفسه، بوصفها وظيفة نحن كتب للتعامل مع جميع من مختلف 400 والحالة 500 HTTP رموز التي قد ترغب إلى إرسالها مرة أخرى للمستخدم، جنبا إلى جنب مع رسالة القياسية. يصل المقبل هو الحمل، وبشكل خاص وظيفة لحمي، والذي يهدف في الحياة والقراءة من نجم ملف مؤشر ل محتويات الملف إلى منطقة عازلة العالمي أن أعلنا عالميا فوق [؟ الرئيسية. ؟] هذا هو معقد بعض الشيء لأننا لديك لقراءة بايت من الملف ولكن اطمئنان على كل التكرار إذا كنا قد قمت بالفعل ضرب نهاية الملف أو شيء آخر ما خطأ. ونستخدم realloc للتأكد من أن مهما عازلة نستخدمه ينمو والمتنامي والمتزايد ودائما البقاء متقدما على عدد من وحدات البايت أننا بحاجة لتناسب في هناك. معالج، وفي الوقت نفسه، الوظيفة التي يحصل دعا عن طريق وجود مسجلة تحكم C كإشارة أننا نريد أن اعتراض. لاحظ هنا في معالج أنه في نهاية المطاف المكالمات تتوقف، والتي بالطبع توقف خادم الويب. ولسوء الحظ، بحث لم يتم تنفيذ. في الروح، وهذا هو وظيفة بسيطة إلى حد ما. نظرا لامتداد الملف، فإنه يحتاج بالعودة انها ما يسمى MIME نوع أو نوع المحتوى. ونحن في تحديد مواصفات ما يجب أن يكون هذا التعيين. ولكن عليك أن ترجمة انها في نهاية المطاف إلى رمز ج. يصل المقبل هو لدينا وظيفة لحمي بالمثل دعا تحليل، والغرض الذي في الحياة هو قراءة، وليس من ملف، ولكن من اتصال الشبكة. على وجه التحديد، والقراءة وتحليل لل طلب HTTP التي تأتي من متصفح إلى الملقم بحيث في نهاية المطاف نحن يمكن تحليل فقط في رؤوس في الطلب الخط وإعادة هذه لك عن طريق منطقة عازلة العالمي الذي أعلنا فوق [؟ الرئيسية. ؟] إعادة تعيين، وفي الوقت نفسه، هو الوظيفة التي نحدد أن يحصل على استدعاء متكرر داخل من الرئيسي في كل مرة كنت على وشك على استعداد لبدء الاستماع للاتصال جديد لكي نعرف دائما حالة المتغيرات لدينا وذلك بعد أن قمنا أيضا اطلاق سراح أي الذاكرة التي قد تم تخصيصها ل اتصال شبكة السابق. التالي بدء هو، الوظيفة التي كتبنا الذي يحتوي ككل الكثير من التعليمات البرمجية الشبكات الذي يبدأ في نهاية المطاف إلى خادم الويب. حتى الماضي هي وظيفة دعا المحطة، التي يفعل ذلك بالضبط، فإنه توقف خادم الويب. ولكن لأول مرة تحرر أي الذاكرة التي لا تزال تم تخصيص. ولكنه يدعو في نهاية المطاف الخروج دون حتى عودته السيطرة إلى الوظيفة الرئيسية لدينا. في نهاية المطاف، واحدة من معظم التقنيات الهامة عند تنفيذ ملقم ويب هذا غير سيكون قليلا من التجربة والخطأ، وجود نافذة واحدة مفتوحة في الحق ونافذة الصالة في اليسار، وحدة الخوادم النافذة، حتى يتسنى لك يمكنك مشاهدة الرسائل التي هي يتم عرضها على الشاشة. ولكن الأفضل من ذلك أن يكون ثلث النافذة، نافذة محطة الثانية، الذي يتم فيه استخدام Telnet و استخدام التي يشرع في المواصفات. و Telnet هو مجرد جدا برنامج شبكة بسيطة التي تمكنك من التظاهر ل يكون المتصفح في نافذة واحدة بينما كان يتحدث إلى إطار آخر. بهذه الطريقة يمكنك ان ترى بالضبط الأوامر النصية التي يعود من الخادم إلى العميل دون الحاجة إلى بدس حول المطور الكروم ل أدوات في غير ذلك واجهة clunkier.