حسنا. لذلك كان التشويق، ما هو node.js كما تعلمون عليه اليوم؟ أي شيء؟ نعم؟ كان مثل إطار الكتابة جافا سكريبت تطبيقات على نطاق واسع - موافق >>، الذي يعمل. - أعرف مثل الاستخدامات الشائعة مثل - أو شيء لك يمكن القيام به هو مثل - [ملاحظة غير مسموع] موافق جيدة. نعم، لذلك هو الإطار. انها المحرك الذي كنت يمكن تنفيذ شفرة جافا سكريبت موقع الخادم. هذا يمكن أن يعني أبسط الأشياء مثل كتابة سطر الأوامر النصي ليس في بيثون أو باش أو روبي أو PHP، ولكن فقط في جافا سكريبت نفسها وتنفيذ ذلك في امض موجه الأوامر. أو يمكنك تشغيل فعليا في غضون خادم ويب. في واقع الأمر داخل node.js نفسها، هذا الإطار هو في مجمله مجموعة المكتبات بينها في خادم HTTP مدمج. لذلك، يمكنك الكتابة فعلا الخادم كما سنرى في غضون لحظة، سوبر بسهولة فقط عن طريق لفهم قليلا من HTTP و TCP والموانئ. ويمكنك تفرخ الاستماع خادم الويب اباتشي دون، دون مايكروسوفت IIS. دون أي دولة أخرى تركيب البرمجيات، يمكنك فقط تفرخ هذه والاستماع إلى معظم أي منفذ على النظام الذي كنت سمحت ل. حتى حالة ونقطة، اسمحوا لي ان اذهب وفتح حتى هذا المثال، خادم 0.js. لذلك نلاحظ أن أعلى هذا الملف، مجرد حفنة التعليقات رتيبا، ثم هناك زوجين خطوط ممثل من التعليمات البرمجية أننا سنرى recurringly. لذلك، يحصل فار HTTP تتطلب "HTTP". لذلك المدمج في لnode.js ' البنية التحتية هو في مجمله مجموعة من وحدات والتي هي في الواقع مجرد المكتبات وكل شيء هو نوع مساحة الاسم مع المعرف الفريد هذا مثل واحد هو "HTTP". بحيث كما هو الحال في الكثير من لغات مثل جافا و C + + وC، فقط عند استيراد أو تضمين أو عقدة في الكلام يتطلب وحدة نمطية لا بت فيها. وجميع الذاكرة يتطلب الحصول على تحميلها في ذاكرة الوصول العشوائي، وبالتالي استخدامها. لذلك، يمكنك تحميل هذا النوع من المكتبات أو وحدات على الطلب. هذا يعني المضي قدما وتتطلب لهذا البرنامج مكتبة HTTP، وتشير إلى أن المكتبة عن طريق طريقة متغير يسمى HTTP. ولكن هذا الرمز الأيسر يمكن وقد تم استدعاء أي شيء، فو، بار، الباز، لا يهم. ذلك خلافا C + + وجافا و C حيث تتطلب عند أو استيراد مكتبة، انها مجرد نوع من يصبح الوصول إليها عالميا، وحدات هي node.js أكثر إحكاما مساحة الاسم. بحيث الخاصة - أن وظيفة يمكن الوصول إليها إلا في لحظة عن طريق هذا اسم متغير. لا يمكنك بدء فقط أساليب الكتابة التي توجد في ذلك الحق وسيلة والتي ربما تكون جيدة، لأن ثم مساحة الاسم الخاصة بك لا تحصل على ما يقرب من تشوش كما كما هو الحال في الكثير من اللغات. كل الحق، وحتى الآن باسم المشترك أقترح، إنشاء ملقم HTTP كما جوناثان [يفترض الإملاء] كان من الممكن حرفيا بسيطة مثل استدعاء خلق أسلوب الخادم داخل وحدة HTTP. لذلك، وهذا يعود المرجع إلى نوع من خادم ويب. انه جاء لأباتشي، وليس الوزن بالضرورة الثقيلة. هذا واحد من أبسط قليلا. والآن، لا بد لي فقط ببساطة القيام ببعض الامور. لذلك الأولى، اسمحوا لي أن انتقل إلى أسفل هنا وتخطي معالج طريقة للحظة. ولاحظ هذا السطر من التعليمات البرمجية، الذي هو server.on يعني أساسا الخادم - الاستماع مثل في التعليمات البرمجية مسج، الاستماع لحدث دعا الطلب وتأخذ مجرد تخمين ماذا علي أن أفعل عندما حدث الطلب حرائق في الخادم. نعم؟ اتصل معالج ظيفة. اتصل معالج ظيفة. لذلك، تنفيذ حرفيا التعليمات البرمجية التي هو المشار إليه بواسطة هذا المتغير والواقع لا متغير لرمز هنا، ما هو هذا الرمز في اشارة الى؟ حسنا، هذا الاسم من تعمل هنا وعلى ما يبدو معالج يأخذ اثنين من الحجج. لماذا اثنين؟ حسنا، إذا كنت فقط قراءة أية وثائق لهذه الوحدة على وجه الخصوص، كنت سوف يقال أن معالج التي سيتم استدعاؤه سيكون مرت سنتين على الأقل الحجج، إشارة إلى الطلب، وداخل هذا الطلب نحن يعني حرفيا طلب HTTP. لذلك، كل تلك الرؤوس HTTP التي قد يتذكر من بداية الفصل الدراسي أو بعض الطبقة السابقة أو الخبرة مثل الحصول على خط وخط المضيف وخط عامل المستخدم، كل ذلك يتم تغليف وأكثر من ذلك داخل من هذا الكائن الطلب. والكائن الاستجابة فرز للبيانات الصادرة. لذلك، لديك مرجع ل الاعتراض أن يحدث للسماح لك لإرسال المعلومات إلى المستعرض عن طريق استدعاء أساليب على أن هذه الحجة الأخيرة دعا الدقة للاستجابة. ولكن هذا يمكن أن يسمى أو فو منع، وهذا هي الاتفاقيات فقط. وحتى الآن، ماذا أفعل؟ حسنا، يبدو أن الداخل هذا خادم الويب السوبر بسيطة انني تنفيذ، وأنا ذاهب الى القيام بما يلي. انا ذاهب الى كتابة رسالة HTTP رأس مع رمز الحالة 200، 200 معنى موافق، كل شيء على ما يرام. وبعد ذلك، انا ذاهب لتمر على ما يبدو. ما هو نوع بيانات الحجة الثانية لرئيس أليس كذلك؟ انها كائن؟ انها كائن مع كيف العديد من المفاتيح والقيم؟ مجرد واحدة من كل، والحق، واحد من زوج قيمة المفتاح. لذلك، 'نوع المحتوى'. والسبب الوحيد أنا هنا هو نقلا عن لأن الواصلة قد يكون خلط للعلامة ناقص أو شيء من هذا القبيل. لذلك، لا بد لي أن أقتبس هنا، سفعة أو علامات اقتباس مزدوجة. ولكن النموذج المشترك مرة أخرى في شفرة جافا سكريبت في كثير من الأحيان ونقلت واحدة في هذه الأيام، القولون ومن ثم القيمة. لذلك، وهذا هو مجرد يسمى نوع العقل. هذا هو رأس HTTP ما يجري حرفيا أن يكون مضمون نوع اصلة القولون النص مائل عادي أن يحدث ليتم إرسالها من الخادم إلى المتصفح بحيث يعرف المتصفح سواء لتشغيل هذا النص الخام كما أو HTML أو بوصفه صورة أو فيلم أو ملف فلاش أو أي شيء آخر. الآن، أين أريد فعلا لإرسال في نص الصفحة؟ حسنا، فقط عن طريق القراءة وثائق لكائن استجابة داخل هذه المكتبة. أرى أن هناك حق طريقة والتي تأخذ سلسلة، وربما أشياء أخرى ولكن الحد الأدنى من سلسلة. والسلسلة ما هو بصق إلى المستعرض. في هذه الحالة عظمى لها بسيط، العالم مرحبا به، ولكن يمكن أن يكون opne قوس، أتش تي أم أل، وقوس وثيق، رئيس قوس مفتوح، على مقربة قوس وهكذا دواليك، هذا يمكن أن يكون أتش تي أم أل الخام. لكننا الحفاظ على سبيل المثال بسيطة فقط عن طريق البصق من أبسط أنواع العقل والتي يمكن القول نص / عادي. ثم response.end فقط يعني إغلاق الاتصال وترسل كل ما أملك نوع من مخزنة داخل هذا الكائن مرة أخرى إلى المستعرض. انتهيت. حسنا. لذلك، وآخر شيء أفعله أسفل هنا وهذا هو إلى حد ما التعسفي والمفترض أن تكون باردة، وأنا أقول خادم أخيرا للاستماع على TCP معينة بواسطة المنفذ الافتراضي. أذكر من البداية الطبقة أن الخدمات - أو كنت عادة فريد التعرف عليه من خلال الأرقام، م هو على شبكة الإنترنت، ويستند إلى HTTP 443 المواقع، 22 هو SSH، FTP هو 21 و 1337 هو مجرد التعسفي لكنه أعلى من 1024 وهو ما يعني في معظم نظم، وأنا يمكن استخدامه دون الحاجة السوبر امتيازات المستخدم. حتى انها مجرد مريحة. ولكن في 8080 قبالة - مشترك واحد، 8088، حقا شيء كبير في الآلاف كما هو شائع ولكن هذا هو مجرد مزيد من النخبة. كل الحق، لذلك ما يحدث عندما كنت فعلا تشغيل هذا؟ حسنا، أنا لا مجرد زيارة الصفحة في المتصفح. ويسمى هذا الملف خادم 0.js. لأن مرة أخرى، هو اباتشي الآن خارج الصورة في النصف الأخير من الدورة. إذا كنت ترغب في شبكة الإنترنت الخادم، ولست بحاجة لكتابة ثم قم بتشغيل ملقم ويب هذا. ولكن اتضح أن جافا سكريبت سواء على جانب العميل وجانب الملقم لغة تفسيرها. لذلك، كل ما تحتاجه هو مترجم. ذلك هو - إذا تصر على تشغيل عقدة ثم خادم 0.js، أنا قد أو قد لا ترى بعض الانتاج تبعا على ما مكتبات لقد تضمنت، لا شيء يبدو أن يحدث. ولكن اسمحوا لي أن انتقل إلى المتصفح واسمحوا لي ان اذهب إلى عنوان IP نفسه من موكلي CS50. ولكن هذا يمكن فقط يكون كذلك بلدي ماك أو جهاز الكمبيوتر ومن ثم تصل إلى تدخل. التي تبدو فعلا مثل اباتشي. هذا هو مثل الدليل ادراج نظرنا في في النصف الأول. لذلك، ماذا أفعل الخطأ؟ نعم. [ملاحظة غير مسموع] بالضبط، أليس كذلك؟ لذلك، لا يزال الاستماع اباتشي على المنفذ الافتراضي 80. على الرغم من أنني يمكن تغيير ذلك، أنا يمكن إيقافها جميعا لكنه لا يزال قيد التشغيل. ولكن هؤلاء الرجال يمكن تتعايش بالتأكيد. أنا ببساطة أن تضع القولون 1337 وربما بعد ذلك أو ربما لا مائل في نهاية الوصول إلى هذا المنفذ أن هذا الخادم يعمل على. والآن أرى أن مرحبا، عاد العالم. وأنا يمكن أن تصل تحديث الصفحة كما مرات عديدة كما أريد، انها لا تزال تخدم ما يصل صفحة. في الواقع إذا كنت تفتح كروم مفتش، انتقل إلى الشبكة ومن ثم إعادة تحميل الصفحة بأكملها، نلاحظ في الواقع أن هذا كان طلب التي تم إرسالها. إذا ألقي نظرة على مصدر الخام، إشعار يرسل متصفحي كل تلك الأشياء. ومن ثم الاستجابة من وكان خادم السوبر بسيطة. هناك 200. إذا لم تكن منخفضة جدا على الشاشة، هناك نوع المحتوى. وnode.js ثم نوع من تلقائيا بالنسبة لي واضاف التاريخ و كل الأشياء الأخرى أن المتصفحات نتوقع عادة. لذلك، دعونا نرى مجرد القليل الاختيار التعقل. اسمحوا لي أن أعود إلى رمز في 0.js الخادم واسمحوا لي - في كل مرة أذهب إلى معالج، اسمحوا لي أن أقول console.log. ('كان لدينا زائر!'). ولست بحاجة إلى إعادة ترجمة أو أي شيء من هذا القبيل، انها لغة تفسيرها. وحتى الآن، واسمحوا لي أن أعود إلى الصفحة تحميل واحد، اثنان، ثلاث مرات وتذهب عد إلى نافذتي. والآن أرى هذا. جيدا أن من الغريب، أرى ستة خطوط. اهتمام التوافه على شبكة الإنترنت، لماذا فعلت أحصل على ستة الطلب ليس ثلاثة؟ نعم؟ [ملاحظة غير مسموع] نعم. لذا، وكما تعلمون ل يذكر رمز الغباء في أعلى من شريط المتصفح أن الكثير من المواقع تستخدم القوة تكون قمة جامعة هارفارد، قد يكون شعار الشركة أو أي شيء من هذا القبيل. لذلك، في هذه الأيام نوع المتصفحات جعل من بوقاحة و طلب HTTP إضافية إلى كل موقع تقريبا أن لك زيارة فحص ما إذا كان هناك افتراضيا ملف دعا favicon.ico في نفس الدليل ك الملف المطلوب. وإذا كان الأمر كذلك، فإنه يضع رمز هناك. لذلك كل نشهده هو هذا بالضبط. في واقع الأمر، دعونا نرى ما اذا كنا يمكن أن نرى هذا بدلا من نوع خارج للتو، "كان لدينا زائر". اسمحوا لي أن تمضي قدما والإخراج. وأعرف أن هذا فقط من تبحث في الوثائق. هناك خاصية داخل الكائن طلب يسمى URL والذي يحدث أن يكون المسار وطلب أن في URL الفعلي. لذلك، إذا كنت إعادة تشغيل الملقم ببساطة عن طريق ريرونينج عقدة على خادم 0.js و الآن لا هذا واحد، اثنين، ثلاثة وأعود هنا. هناك هو عليه. الخط المائل هو ما - البشرية المطلوبة في favicon.ico هو ما هو المتصفح يطلب بوقاحة. ولكن النقطة ليست الكثير من الاشياء فافيكون ولكن كيف يتم تشغيل الخادم. نعم؟ لماذا التي لديها أن تكون بعض الطلب؟ لماذا التي لديها ل- حسب طبيعة كيف يعمل HTTP. لذلك، يمكن طلب HTTP فقط ملف واحد في وقت واحد. يمكن المتصفحات تكون ذكية في هذه الأيام والحفاظ على TCP اتصال مفتوحة. إذا كنت أخذت CS143 أو عموما دراية الشبكات، حتى تتمكن من الحصول على مكاسب الكفاءة عن طريق الحفاظ على الشبكة مأخذ المفتوحة في صنع HTTP متعددة طلبات متسلسل أكثر من ذلك ولكنهم ملف واحد في الطلب. لذلك، إذا قمت بزيارة شيء من هذا القبيل - أعني أننا يمكن أن تذهب ل أكثر من أي المواقع. إذا ذهبت إلى - دعونا سحب ما يصل مفتش كروم هنا. قد تحصل على ملء معظم من الصفحة. انتقل إلى علامة التبويب الشبكة وانتقل إلى www.cnn.com. وعند زيارة cnn.com، صفحته الرئيسية - متصفحك بدلا بوحشية يجعل - لا يزال العد. موافق. ما لا يقل عن 289 HTTP طلبات مرارا وتكرارا. وهذا هو السبب عند زيارة المواقع المتضخمة بشكل خاص، انهم بطيئة لتحميل بسبب كل للموجودات انهم تحميل. لذلك، فإنه يبدو وكأنه 298. قد يكون هناك بعض اياكس يجري في هذه النقطة أو بعض الأصول هي منخفضة فقط. لذلك، كل تلك هي طلب الفردية تعود وإيابا، ذهابا وإيابا. وهذا هو السبب في وقت سابق، حتى على الرغم من أننا نوع من تحدث عن ذلك إلى حد ما هميا حيث يمكنك وضع علامة النصي، يجعل الاطلاق الفرق عندما يكون لديك - أن تبدأ لديهم الكثير من حركة المرور والكثير الملفات المطلوبة. ولكل من هذه تمثل ربما صورة، ملف وسائط، ملف جافا سكريبت، ملف CSS أو ما شابه ذلك. لذلك، نحن بالفعل ل بعض 4 ميغا بايت فقط للنظر في أخبار اليوم. سؤال جيد. حسنا. الأمر كذلك، فما هي بعض من وعلى الرغم من الإيجابيات؟ الحق، ونحن نعرف كيفية جعل بالفعل مع صفحات الويب PHP. والعديد منكم جاء في ل الطبقة معرفة جانغو وبيثون أو القضبان مع روبي. لذلك، لماذا نحن بحاجة إلى بعد آخر اللغة والبنية التحتية؟ ما هو node.js ولا سيما جيدة في إذا كنت تعرف؟ [وقفة] بعض الشيء؟ لا؟ نعم؟ ترحيل الرسائل. لذلك >>، ترحيل الرسائل. ذلك أن هذا صحيح وهذا صحيح لسبب أكثر تقنية وأن node.js وحقا جافا سكريبت بشكل خاص مناسبة تماما لغير متزامن رمز، إذا قمت بإنشاء حيث الوهم للقيام متعددة الأشياء في آن واحد. لذلك، على الرغم من انهم يحدث حقا متسلسل، بل في معظم الحالات، كلا جافا سكريبت العميل وجانب الملقم مترابطة واحد. والتي إذا كنت تتناولين 161 أو حتى 61 يعني أن - هذا البرنامج معرفة، مترجم حرفيا يمكن تفعل شيئا واحدا فقط في آن واحد. ولكن هذا ليست كبيرة ل شيء من هذا القبيل خادم الويب حيث قد يكون لديك العشرات أو مئات أو ربما حتى آلاف من المستخدمين في جميع يحاول للوصول إلى صفحة الويب الخاصة بك في نفس الوقت جدا. وحتى الآن، والتي تشير إلى أن التعامل معها واحدة بعد الآخر بعد الأخرى، خصوصا إذا كان بعض طلب من هؤلاء كما رأينا على CNN قد تتطلب خدمة حتى 300 الملفات قبل حتى تحصل على المستخدم التالي من يريد أن يرى وتقول الأخبار. Node.js هو أكثر ملاءمة لبيئات مثل ذلك. لأن ما يحدث هو أي عملية بطء تشغيل مثل قراءة ملف من القرص أو الاستعلام عن قاعدة بيانات أو التحدث لبعض خادم الشبكة الأخرى، أن يميل إلى أن يكون الكمون، أليس كذلك؟ إذا لم تأخذ 61 أو 161 وخاصة كل من هذا النوع الخدمات الطرفية تميل إلى أن تكون أبطأ بكثير من فعل أي شيء داخل نفس ذاكرة الوصول العشوائي وحدة المعالجة المركزية نفسها يقول في هذه الحالة والخادم الذي يقوم بتشغيل فعلا. ولكن ما هو لطيف حول node.js هو أنه يمكنك - وجافا سكريبت بشكل عام هو أنك تستطيع أن تفعل شيئا ثم يقول: "هم، هذا هو الذهاب أن يأخذني أجزاء قليلة من الثانية أو حتى بضع ثوان. اسمحوا لي نوع من مفترق التي قبالة " ولكنها ليست عملية حقيقية. ومن ثم عندما يكون القيام به القيام عملية التشغيل التي بطيئة مثل الاستيلاء على الصفوف من قاعدة البيانات أو قراءة الملف. أتش تي أم أل من القرص، وسوف العودة الى لي بدلا من لي الحاجة إلى الانتظار لذلك. لذلك، لجعل هذا أكثر وضوحا. هذا هو بلدي وسائل مما يجعل هذا أكثر دراية. كل الحق، لذلك هذا هو يهز شاك في الساحة. هذا هو نوع من نموذج المشتركة لشرح asynchronicity. هذا هو في الواقع جيدة المثال لأن اهتز الكوخ وبرغر لذيذ بشكل ملحوظ لإبطاء ما يفعلونه. ولكن النقطة هي انهم حقا جيدة في أخذ أوامر وأخذ المال الخاص بك بعد الذي انتظر طعامك. لذلك، وهذا هو في الواقع أفضل تصميم من البديل. لنفترض أنك تمشي في متجر مثل هذا وكنت حصلت إلى الجزء الأمامي من خط ولك وضعت طلبك وتريد لبرغر، قدر استطاعتي اقول، فإنه يأخذ ما لا يقل عن خمسة دقائق أو أكثر في الواقع الحصول على برغر. لذلك، سيكون من نوع نموذج الأعمال السيئة إذا بينما كنت في انتظار لجهودكم برغر، أليس [الإملائية يفترض] وبوب [يفترض الإملاء] وشارلي [الإملائية يفترض] والجميع هو يصطفون خلفك وكنت حجب حرفيا خط انتظار الغذاء الخاص بك. لذلك من الواضح، في هز شاك وغيرها من الوجبات السريعة الأماكن لا تفعل هذا، يفعلون شيئا من هذا القبيل. أنها تعطيك الجرس. وأنها نوع من نرسل لك في طريقك. ويسمونه لك مرة أخرى من قبل مما يجعل هذا الشيء يهتز قليلا أو فلاش للحصول على اهتمامكم. لذلك، وهذا هو حرفيا ما؟ شيء من هذا القبيل node.js لا. إذا node.js أو جافا سكريبت بشكل عام يتم استخدامه ومبرمج ذكي بما فيه الكفاية لتحقيق، "أنت تعرف لماذا؟ كل ما يجب أن أفعل الحق هنا يمكن أن يستغرق بعض عدد المللي ثانية أو ثانية. أنت تعرف لماذا؟ اسمحوا لي المضي قدما وليس نسميها بشكل متزامن - "هذا هو الرجل الحجب الجميع في خط "- اسمحوا لي أن تمضي قدما و نوع من التنحي وببساطة أدعو نفسي مرة أخرى عند ذلك منذ فترة طويلة اكتمال العملية ". وندعو مرة أخرى بطبيعة الحال ومنوها في هذه الحالة إلى وظيفة رد الاتصال، و إشارة إلى ظرف من التعليمات البرمجية التي من شأنها الحصول على تنفيذها عندما برغر جاهز، مثل الكثير من هذا الشيء يكون بعض النوع من الوظائف المدمج في أنه يبدأ تهتز أو الأز عندما حان الوقت بالنسبة لك ليتم استدعاؤها مرة أخرى إلى الجزء الأمامي من على خط المرمى. لذلك، ما معنى هذا يعني من حيث القيمة الحقيقية؟ كذلك، لدينا ل العمل طريقنا. لذلك، اسمحوا لي أن المضي قدما والقيام بذلك أولا. في خادم 1.js، اسمحوا لي أول تبسيط رمز حتى نتمكن من اتخاذ خطوات الطفل نحو مشكلة أكثر إلحاحا. هذا هو بالضبط نفس البرنامج الذي كتبت من قبل. ولكن ما تم تغيير؟ هناك نوع من طفيف الفرق النحوية بين هذا و نسخة 0 قبل لحظة. ما يقفز في إذا كنت أذكر؟ نعم سينثيا [يفترض الإملائية]؟ [ملاحظة غير مسموع] نعم. وحتى الآن، لدينا خط وظيفة يجري تمريره. لقد تخلصت من هذا القبيل من اسمه دون جدوى دالة معالج. غير مجدية فقط في أنه قبل حتى الدعوة في مكان واحد، أنا لا حقا بحاجة ل إضاعة الوقت ويعطيها اسما ومما يجعل من الصعب قراءة رمز أعلى إلى أسفل. لذلك، دعونا فقط تعلن مضمنة هي وظيفة مجهول. وأنا أفعل شيئين الأخرى. أنا صنع أفضل استخدام التدوين نقطة. مثل ذلك في مسج، والكثير من العقدة طرق يمكن بالسلاسل معا. ذلك أنه بمجرد الانتهاء من ذلك يدعو شيء ما، لم يكن لديك إلى الانتظار إلى سطر جديد وندعو طريقة أخرى، يمكنك سلسلة فقط معا. وحتى في هذه الطريقة، نستطيع تشديد حقا هذا الأمر. لذلك، وهذا هو حرفيا خادم الويب في خمسة أسطر من إجمالي كود عكس - على عكس ما كنت قد عادة عليك القيام به لوضع شيء ما. إذا ذهبت إلى الخادم 2 الآن، دعونا نفعل ذلك. في خادم 2 - فعلا دعونا أعود إلى ذلك الخادم 2. دعونا الآن فتح المتزامن-0.js و معالجة هذه المشكلة في متناول اليد. لذلك أولا، دعونا نذهب إلى الأمام ومفتوحة حتى المتزامن-0.js في المستعرض. حتى المتزامن-0، اسمحوا لي ان اذهب عودة إلى المتصفح. تحديث الصفحة ضرب. والآن، وهذا هو النوع رسالة الخطأ. بل اراه 500 في مفتش كروم. ولكن اسمحوا لي بدقة أكثر طلب hello.txt. موافق. لذلك، يبدو أن هذا العمل. لذلك لا يبدو المتزامن-0.js ل تخدم حتى شيء للمائلة. انه ليس لديها دعم ملف افتراضي. ولكن إذا أنا صراحة طلب hello.txt، الذي يبدو أنه دعم. لماذا؟ حسنا، ما كنت قد ذهبت هنا ويفعل وينفذ خادم الويب السوبر بسيطة حيث يوضح asynchronicity يمكن أن تكون مفيدة. والتي يتم تنفيذها على النحو التالي. أولا، أنا باستخدام وحدة HTTP مرة أخرى، ولكن أيضا FS التي ربما تقف على؟ بشكل عام في CS، نظام الملفات. نظام الملفات موافق. وبالتالي عليها FS، نظام الملفات. كل الحق، وذلك ما يعني هذا أن تعطيني؟ وظائف ذات الصلة الملفات مثل الحصول على تمريرها، فتح الملفات والكتابة الدلائل والأدلة القراءة وجميع هذا النوع من الاشياء. وحتى الآن لاحظت، هذا الرمز هو نفسه كما كان من قبل، إنشاء الملقم، ويمر في دالة المجهول. هذا هو نوع من التعسفي. هذه ليست غاية آمنة خادم الويب. في الواقع، هل يمكن الوصول معظم أي ملف على القرص الصلب الخاص بي أو على ملقم الصعب دفع عن طريق تنفيذ هذه التعليمات البرمجية لأنني مجرد عمياء على افتراض أن سأشارك للاستيلاء على كل ما المستخدم المطلوب في عنوان URL. وانا ذاهب الى بادئة مع نقطة بحيث أنا هامشي كونها آمنة بالقول مهما ملف ما في وسعهم طلب لابد أن يبدأ على الأقل في الدليل الحالي. بالطبع هناك تهديدا هنا. 'السبب إذا كانت بدلا من ذلك وتشمل ماذا؟ في طريقها، فإنها يمكن أن النوع من كمحاولة للتغلب على ذلك أيضا. نقطة، نقطة، أليس كذلك؟ لذلك، إذا كان المستخدم فقط وضعت نقطة، نقطة في URL، من الناحية النظرية، يمكنهم البدء في الحصول على بلدي - ويقول ملف كلمة السر. لذلك، وهذا لا يعني لتأمينها، انها من المفترض أن تكون بسيطة. حتى هنا، ولدي متغير الذي هو سلسلة من نقطة وهو الدليل الحالي وطلب URL الذي رأيناه قبل غير مثل خفض أو / hello.txt. وحتى الآن، فإنه يحصل على قليلا أكثر إثارة للاهتمام. أولا، لاحظ أسفل. أنا الاستماع على نفس المنفذ كما كان من قبل. وبالتالي فإن اهتمام حقيقي العمل هو داخل هنا. في كل مرة طلب يأتي في بطبيعته من هذا الرمز، ماذا أفعل؟ ادعو الملف طريقة قراءة ملف نظام، يمر في مسار أن أريد أن أقرأ. والآن، وهذا هو ما هو مثير للاهتمام هنا، هذا هو من خلال تنفيذ في طريقة غير متزامن. لا يمكنك الحصول على عائد قيمة من ملف القراءة. في إشعار الواقع، هناك التعبير ولم يبق اليد إلى اليسار من ملف القراءة. أنها لا ترجع قيمة. بدلا من ذلك، فإنه يستدعي رد اتصال تعمل عندما يكون جاهزا لتعطيك الظهر جوابا. ذلك مرة أخرى أن تكون واضحة، في حين أنه في الأمس، في كثير البرمجة اللغات، إذا أردت لقراءة ملف القضية في نقطة PHP، ملف تسطير الحصول على تؤكد المحتويات، لديك تعبير الأيسر في جميع القيمة بعد - قبل علامة المساواة، وهذا يعني انك كنت تعيين لهذا المتغير عودة قيمة تلك الوظيفة. يمكنك أن تفعل ذلك في node.js، ولكن لديك عادة لاستدعاء متزامن صراحة إصدارات وظائف تريد، أعتقد أنها قراءة متزامنة ملف أو متزامنة قراءة الملف. لقد نسيت كيف أطلق عليها اسم. والتي من شأنها أن تعطي لك قيمة الإرجاع. ولكن إذا كان هذا الملف على بعض نظام الملفات عن بعد أو القرص هو مجرد بطيئة بشكل طبيعي، ان الامر قد يستغرق 10 ميلي ثانية أو 2 ثانية عن هذا الملف ليأتي في الواقع مرة أخرى. وفي الوقت نفسه، لا ويب أخرى ويتم تخديمها الزوار بواسطة موقع بلدكم. كنت الحجب. وهذا ما يسمى حجب IO الإدخال / الإخراج. حتى هنا، وهذا هو أذكى من ذلك بكثير. لأن ما يجري node.js يجب فعله عند تفسير هو ما يلي، انها تسير للاتصال طريقة قراءة الملف، محاولة واحدة حتى الملف الذي حصلت مسار المحدد بواسطة قيمة P. ثم إذا وعندما يكون جاهزا لتعطيك الظهر محتويات ملف P، فإنه سيتم استدعاء وظيفة الذي هو التوقيع بواسطة الاتفاقية ما يلي. حجتين، الأولى من وهو ربما كائن خطأ، E العاصمة، انها كائن دعا خطأ أو خالية اذا لم يكن هناك مثل هذا الخطأ. والحجة الثانية - اتخاذ تخمين - ستكون ماذا؟ انه دعا البيانات الواضح ولكن ما هي البيانات بشكل ملموس؟ المحتويات >>؟ محتويات hello.txt في المثال أنا سحبت حتى في متصفحي قبل لحظة. لذلك وبعبارة أخرى لقراءة ملف والعديد من وظائف node.js مثل في عدم عودة القيم. يسمونه الاسترجاعات وتمرير لتلك الاسترجاعات ما من شأنه تقليديا العودة القيمة. الاتجاه الصعودي لهذا النهج هو التي يمكن أن نسميه قراءة الملف على T0. وظيفة رد الاتصال القوة لا يمكن استدعاء في وقت لاحق القراد واحد إذا جاز التعبير في خميس، فإنه يمكن تسميته T1000، ألف القراد في وقت لاحق. ولكن النقطة هي أن بقية التعليمات البرمجية في هذا الملف، إن وجدت سوف فورا يتم تنفيذها في حين node.js وعلى الرغم من نظام الملفات الأرقام على كيفية قراءة هذا الملف والحصول على مرة أخرى لك. لذلك قمت بإنشاء هذا - بذلك على نحو فعال الوهم التوازي مع السماح عمليات تشغيل أبطأ ليس منع الاشياء الهامة، الجزء الذي يخدم المستخدمين. لذلك، كيف يمكننا التعامل مع هذا؟ هذا هو شائع جدا نموذج node.js. وهناك طريقة فقط لتبسيط هذا هو سنرى قبل على طول. أنا أول فحص إذا الخطأ هو غير فارغة. لذلك، إذا لم يكن كاذبة بعد ذلك كان هناك خطأ. أنا لا أعرف ما هي، ربما لا وجود الملف. لم يكن لدي الأذونات. اسم المسار غير صحيح. أي عدد من الأمور يمكن ان تذهب الخطأ. الآن، انا ذاهب الى العودة تعسفي 500 وهو خطأ خادم داخلي. ذهب شيئا خاطئا. لا يهمني حقا لتشخيص ذلك. لذلك، دعونا نقول فقط المستخدم كسرها. وبعد ذلك، انا ذاهب للقيام res.end، وهذا هو منهج الاختزال. نذكر بأن مشاركة مرة فعلت res.write ثم فعلت res.end. إذا كنت تريد فقط ل إرسال سطر واحد من الإخراج، يمكنك أن تفعل كل ذلك فقط في آن واحد مع res.end مع وسيطة، والذي يحدث لإرسال مهما كانت رسالة الخطأ داخل هذا الكائن إلى المستعرض. انها جميلة الانحناء أذكر قبل لحظة. ليس لدي أي فكرة عما هذه يعني لأول وهلة. ولكن عندما طلب الملفات التي لم تكن موجودة - عفوا، ونحن بحاجة إلى تشغيل الخادم مرة أخرى. عندما طلبت ملف التي لم تكن موجودة، EISDIR، حتى شيئا عن كونها الدليل، إذا كنت تفعل بعض عشوائي سلسلة هناك، يبدو أن يعني لا توجد حتى الملف. وذلك لأن قانون بلدي هو ببساطة قائلا لكتابة أيا كان أصل الخام رسالة الخطأ، مستخدم بحيث لا ودية للغاية ولكن على الأقل أنا التعامل مع الامر. آخر، إذا لم يكن ل خطأ ماذا أفعل؟ الشيء نفسه كما كان من قبل يبصقون من 200 موافق، سهل - نص / عادي نوع العقل و ثم بصق البيانات. وهذا هو السبب في انني اتلقى محتويات hello.txt التي فقط للتأكد مما اذا نظرت في hello.txt، انها حرفيا فقط مرحبا، العالم. وإذا غيرت هذه مرحبا، العالم، حفظ الملف، إعادة تشغيل الخادم، إعادة تحميل الصفحة. الآن، أحصل على هذا الإصدار. لذلك، لقد حقا فقط ل Reimplemented خادم الويب كما هو موجود بالنسبة للعديد من سنوات ولكن باستخدام node.js. ولكن يمكننا أن نفعل هذا حتى أكثر نظافة. اسمحوا لي أن فتح المتزامن-1.js. الآن، لاحظ أنا مضيفا وحدة نمطية أخرى هذه المرة، ويبدو أن وحدة المسار. الآن، وهذا هو جيدة فرصة للنظر في ما وثائق يبدو. Node.js هو التوثيق. مثل PHP أعتقد هو في الواقع جيدة جدا ومباشرة إلى الأمام. اذا ذهبت الى node.js وجوجل والبحث عن مسار node.js، ما سترى عادة هو وجود صلة مباشرة إلى عنوان URL أن أضع هنا قبل لحظة. لذلك / API هو المكان الرسمي للذهاب للتوثيق. وماذا سترى في أعلى الوثائق الرسمية عقدة هو كل الطرق و أو خصائص داخل هذه الوحدة على وجه الخصوص، واحد وهو ما يسمى الانضمام. والانضمام هي وظيفة مساعد وهذا سوف يسمح لي أن لا تهتم كل الإيجابيات. وفقد المضافة مكافأة كما سترى من الاحواض هو أيضا تطبيع مسار الناتجة عن ذلك. لذلك، إذا كان المستخدم أو لديك النقاط أو نقطة نقطة أو أي مزيج من تلك الأنواع من النسبية مسارات، بين الإيجابيات الأسلوب هو أن انضم انها تسير لتنظيف كل ما يصل وأعطيك الكنسي الطريق دون أي هذه النقاط أو نقطة نقطة. لذلك، فإنه أمر جيد في العامة للأمن على الأقل إذا كنت فحص العودة القيمة التي لست في هذه الحالة بسيطة معينة. لكنني لم ترغب في استخدامه. لذلك، وأنا الآن إنشاء مسار ل أكثر قليلا برمجيا مع path.join بدلا من سلسلة الخام. لذلك، وهذا هو القليل أنظف من قبل. والآن لاحظ أنا كونه قليلا أكثر ذكاء بدلا من مجرد عمياء محاولة لقراءة الملف، انا ذاهب الى الواقع استدعاء fs.stat. لذلك، إذا كنت على دراية مع مستوى منخفض C وظائف وC، حتى PHP. وهناك الكثير من المكتبات هذه الدالة تقوم بإرجاع القانون الأساسي إحصاءات أساسا على الملف، حجم الملف، الأذونات، واسم وأشياء من هذا القبيل، وأيضا إذا ضمنا كان الملف موجودا أم لا، واذا كان ملف أو دليل أو ارتباط رمزي أو أي شيء آخر. وحتى الآن لاحظت، وأنا داعيا fs.stat. ومن ثم يبدو وفقا إلى الوثائق، أود أن أعود في الكائن خطأ أو خالية يتبع بواسطة كائن احصائيات. ولكن دعونا تحقق من ذلك، node.js.fs. هنا هو الملف وثائق النظام. اسمحوا لي أن ننظر للاحصائيات. هناك الكثير من من وظائف هنا. عفوا، أن تزامن القانون الأساسي، fs.stat. حتى هنا، انها غير متزامن احصائيات (2). وهذا مما يعني إذا كنت تذكر من الصفحات الرئيسية، الفصل 2 من الصفحة الرئيسية، وهذا يعني هذا هو حرفيا مجرد تنفيذ عقدة من مستوى منخفض وظيفة نظام القانون الأساسي. مع ذلك، فإن رد يحصل على اثنين الحجج، الخطأ والقانون الأساسي حيث الرقم هو يعترض fs.stats. لذلك دعونا نرى ما هذا الكائن يفترض أن تبدو. دعونا فوق الارتباط التشعبي وأنا أرى ذلك. يحتوي الكائن احصائيات على ما يبدو بعض أسلوب مساعد، والملف، هو الدليل، هو حفنة من الأشياء الأخرى. انها "هو" الملف الذي يهمني حول في هذه الحالة بالذات. حتى هنا وأنا أذهب. إذا كان هناك خطأ، ثم اسمحوا لي أن إنقاذ هذه المرة وتحمل. إذا كان هناك خطأ، وكان ربما لم يتم العثور على ملف 404. يمكن أن يكون شيئا آخر ولكن أنا يجري قليلا كسول هنا فقط للتركيز على تفاصيل أكثر إثارة للاهتمام. ولكن بالنسبة للمستخدم الأغراض، لم يتم العثور على الملف، إذا كان هناك أي خطأ مشيرا الملف. خلاف ذلك، واسمحوا لي معرفة ما اذا كان الملف هو في الواقع ملف الفعلية. حتى إذا لم يكن ل الملف كان موجودا. هناك شيء هناك ولكن انها على الارجح دليل أو ربما ارتباط رمزي أو أي شيء آخر وهذا غير تقليدي على نظام الملفات. وفي كلتا الحالتين، فإن المستخدم يجب أن لا نرى ذلك. وحتى الآن، وأنا ذاهب لمجرد البصق من التقليدية غير المصرح به 403. ولكن مرة أخرى مجرد اتفاقية، كان يمكن أن تستخدم شيء آخر من الناحية النظرية. ثم أخيرا، اسمحوا لي محاولة قراءة الملف. لذلك، اسمحوا لي أن انتقل لأسفل. والآن لاحظ هذا هو المكان رمز يمكن الحصول على القليل من الفوضى، تلاحظ أن ادعو fs.readFile عابرة في نفس المسار، نفس إعادة النداء كما في المرة السابقة، لذلك الإصدار السابق. ثم إذا كنت تجد - إذا أنا لا أجد ذلك، أبصق من أصل 500. وإذا كنت لا تجد ذلك، ما خط نحن ذاهبون لنرى هنا؟ ونحن في طريقنا لرؤية خ إرسال رأس 200 ربما وres.end إرسال البيانات الفعلية. ولكن لاحظ هذا. وهذه ليست برهانية سيناريو أسوأ الحالات. ولكن لدي هذه الدعوة القانون الأساسي من هنا لدي بعض الاشياء. ثم، ولدي آخر استدعاء غير متزامن هنا، أكثر من ذلك المسافة البادئة. لذلك، مجرد نوع من استقراء إذا كنت يمكن من هنا. ما المشكلة يميل إلى تنشأ مع اللغة مثل جافا سكريبت في هذه البيئة حيث لم يكن لديك قيم الإرجاع بل لديك هذه الاسترجاعات. وبطبيعة الحال، وهذا هو فقط شيء الأسلوبية حقيقة أن أظل الطعج. ولكن اتخاذ هذا إلى الخطوة التالية المنطقية. لنفترض أن هناك واحد أو اثنين أو ثلاثة وظائف أخرى أنني اللازمة لتنفيذ ذلك وكانت من قبل غير متزامن الطبيعة، وبالتالي كنت مجرد نوع من إبقاء الطعج التعامل معها، التعامل معها، التعامل معها. تحصل نوع من رد الجحيم كما يطلق عليه الناس حيث يبدأ التعليمات البرمجية للحصول على نطاق واسع جدا وبصراحة من الصعب حقا للقراءة. كما هو، أستطيع بالكاد نوع من أقول أن هذا هو نوع من تدفق يحتوي هذا النوع من الزاوية أسلوبيا الشيء يحدث هنا. لذلك، هذه ليست مثالية ل هذا يمكن أن تصبح بسرعة كبيرة غير عملي، على الرغم من اثنين غير المتزامن لا يدعو مثل هذه الصفقة الكبيرة. لذلك، فإننا لا يمكن تجنب هذا، أليس كذلك؟ كنت قد لمحت أن أنا misclicked قبل لحظة. في الوثائق، كما تعلمون، يبدو أن هناك statSync. وstatSync لا يأخذ رد اتصال كوسيطة. فإنه يأخذ فقط الطريق ل يبدو أنه يفعل ما؟ فإنها ترجع مثيل من fs.stats. ولذلك فإن هذا قد يكون لديك الغريزة الأولى، أليس كذلك؟ خاصة إذا وظائف رد الاتصال وasynchronicity هو جديدة القليل لكم، بصراحة، أسهل النهج هو على الارجح فقط تجنب كل المشكلة معا، والعودة لفرز البرمجة نمط CS101 حيث يمكنك استدعاء وظيفة أو الأسلوب، بإرجاع القيمة، استدعاء وظيفة، والعودة قيمة، وظيفة، وإرجاع القيمة. وبالتالي أتمكن من استخدام fs.statSync الذي هو حرفيا نفس لكنه نسخة متزامن مما يعني أنه يعود القيمة. فإنه لا يمر نقدر لمعاودة الاتصال بكم. ولكن لماذا هذا ربما يكون الحل الأمثل اللجوء إلى وظائف متزامن؟ نعم؟ [ملاحظة غير مسموع] بالضبط، فإنه يأخذ وقتا طويلا. كنت مجرد تباطؤ كل شيء إلى أسفل. لأن مثل الكثير اهتز الكوخ أو برغر لذيذ، إذا كانوا تخلصوا تلك بوزيرس وجعلناكم، العميل الوقوف في الجبهة من الخط حتى الطعام جاهز حتى قبل أخذ النظام الشخص وراء كنت الواضح من خلال وضع يبطئ. يبدأ الناس في مغادرته، كنت نوعا من رسم الحزم. يمكنك جعل أي عدد من القياس هنا. ولكن باختصار، انها ربما لا شيء جيد للعمل أو للملقم. كود غير متزامن وذلك هو عادة ما لا يقل عن جيد في هذه الحالة، لكنها بالتأكيد يبدأ يسبب بعض القلق. في واقع الأمر أجرؤ على القول عندما كتابة أول هذه الاشياء، وسوف يستغرق قليلا قليلا من التعود. لذلك، دعونا نبدأ لتجهيز كنت مع بعض المكتبات وتقنيات لجعل هذا أسهل قليلا. لذلك، واحدة من الأكثر شيوعا المكتبات هي مكتبات شعبية في هذه الأيام، وهذا واحد يسمى async.js. ومثل الكثير من node.js المكتبات أو وحدات، هذه كلها مفتوحة المصدر. أنهم جميعا تقريبا نعيش والحصول على مستودعات المركز الذي هو نوع من أصبح بحكم الأمر الواقع وضع لتخزين هذه الأشياء. ثم هناك البنية التحتية كلها لتثبيت هذه الأشياء دعا الآلية الوقائية الوطنية، عقدة إدارة الحزم والتي إذا كنت على دراية مع EvanTube هو نوع من مثل التطبيق أو التطبيق الحصول عليها. إذا كنت على دراية مع ريد هات وفيدورا كما هو الحال في الأجهزة، انها مثل لذيذ. لكنها عقدة - انها مدير حزمة فقط لهذا بيئة معينة. لذلك، لا يمكننا تحميل وتثبيت أشياء مثل المكتبة المتزامن وأيضا واحدة أخرى تسمى تؤكد مكتبة أو وحدة نمطية. ولكن هذه FS بقدر، HTTP، المسار، تلك كلها تأتي بنيت في لعقدة. لذلك إذا نذهب إلى مستندات API، سترى في الواقع أن يبنى في عقدة تحصل مجانا مجموعة كاملة من وحدات. ولكن الكثير من الناس لطيفة على جعلت الإنترنت العشرات إن لم يكن المئات من مكتبات أخرى أن تفعل أشياء أفضل أو مختلف. لذلك، دعونا نلقي نظرة على كيف تعمل هذه المكتبة. لذلك، فإن معظم هذا الرمز هو متطابقة في الوقت الراهن. لدي مسار يجري خلقت حتى أعلى. والآن ادعو async.series. وبالتالي فإن مكتبة المتزامن، انها مجرد المكتبة التي تسمح لك لتمرير أو رفع عادة من وظائف للحصول على واحدة تسمى بعد الآخر لمجرد نوع من تجنب هذه المسألة المسافة البادئة، وحقا مجرد العقلية القلق التي ستنشأ دائما على الأقل عند أول الغوص في هذا بنفسك مع البرمجة بشكل غير متزامن. كما هو الحال في جانبا، إذا كنت قد اتخذت 161 وكنت قد تعاملت مع قفل ورفع الشروط وجميع لذلك، رمز غير متزامن وبيئة مثل node.js هو في الواقع بكثير، أبسط من ذلك بكثير يمكن القول من الكتابة فعلا كود مؤشرات. في أي وقت لديك كود مؤشرات، لديك شروط رفع. لديك ما يدعو للقلق اثنين من المواضيع التي تحتوي على على نفس الموارد القرص أو الذاكرة. جمال جافا سكريبت في node.js هو هناك حرفيا مؤشر واحد فقط، مما يعني أن المتصفح أو يمكن للخادم فقط تفعل شيئا واحدا في وقت واحد. انها مجرد متروك لكم، مبرمج للحفاظ على نموذج العقلية لل كيف النوع من الأشياء الانتظار ومعرفة كيفية أن تأمر التعليمات البرمجية. ولكن كنت لا داعي للقلق حول رفع الشروط في تماما بنفس الطريقة في الأقل مع رمز الخام من هذا القبيل. لذلك، انها قليلا من الصعب grack هنا. ولكن - لذلك اسمحوا لي فتح مستندات لمجرد لحظة. مكتبة async.js التي هو بالمثل googleable جدا، أنه يعيش في جيثب تقرير ل مثل الكثير منهم. لا أعتقد أنه من واضحة، انها ليست. اسمحوا لي أن انتقل لأسفل لقراءة البيانات هنا. لذا، فإن مكتبة المتزامن يوفر مجموعة كاملة طرق داخل منه. على سبيل المثال، هناك طريقة تسمى كل، والتي إذا أنا فوق هذا فقط لمعرفة مستندات لها لحظة، هذه هي وظيفة أو الأسلوب أن يسمح لك أن تفعل شيئا مثل كل أربعة ولكن في نفس الوقت. انهم جميعا سوف يحدث يحتمل أن تكون في نفس الوقت. وطريقة كل واحد فقط سوف تعود عليك عند كل من التكرارات كاملة. ولذلك ربما يكون حدوثها واحدا بعد الآخر. من الناحية المثالية، حدوثها أساسا بالتوازي. ولكن الأسلوب لا ندعو لكم مرة أخرى. فإنه لا الطنانة الخاصة بك الجرس حتى كل من العناصر لديك كرر على الانتهاء. لذلك، انها مجرد وسيلة لطيفة تجنب استخدام حلقة أربعة بسيطة لكنه لا يفعل فعلا شيء بشكل غير متزامن. ولكن الآن أكثر مباشرة المتعلقة هذا المثال، تلاحظ هناك هذا طريقة السلسلة. واسمحوا لي فقط سحب ما يصل إلى المثال الكنسي بسيطة. وبالتالي فإن المكتبات المتزامن، سلسلة طريقة يأخذ في مثل ضمنية من بين معقوفتين في صفيف. ما هي البيانات أنواع العناصر في هذه المجموعة على أساس على سبيل المثال بسيطة؟ هذا هو مجموعة من الوظائف. حتى في C، يمكن أن أسميه منهم يعمل المؤشرات. في جافا سكريبت، وهناك المزيد يشير بشكل صحيح إلى وظائف أو وظائف المجهول. وهذا يعني فقط، صفائف وبطبيعة الحال يتم ترتيب من صفر على ما يصل. لذلك، فقد حافظت أمر وهو أمر جيد لسلسلة، 'سبب سلسلة بالطبع الوسائل تفعل شيئا لكي لا بالتوازي. لذلك، هذا يعني فقط أن هذا سوف تحصل على وظيفة تنفيذها، ثم هذه واحدة، ثم وهذا واحد، هذا واحد، ثم وهذا واحد، ولكن العديد من هناك حتى أخيرا اختياري ويسمى رد. لذلك، لاحظ النموذج هنا. وعلى الرغم من هذا هو الرجل مكتبة واحدة، انها ممثل نموذج جافا سكريبت شائع جدا من مرة أخرى باستخدام عمليات الاسترجاعات. لذلك، لاحظ ما تفعله هنا. في وظيفة أولها مرت عبر في هذه المجموعة، قمت بتعريفه مجهول وظيفة فقط مع وظيفة. ولكن لاحظ أن يبدو وفقا لهذه الوثائق، ينبغي أن وظيفة مجهول اتخاذ رد الحجة. التي ستكون مؤشر أو إشارة إلى وظيفة التي يجب أن استدعاء عندما الخاص بك كود مستعدة لإرجاع قيمة. ذلك مرة أخرى، وخلافا للتو البرمجة الإجرائية عادة حيث كنت تستخدم ل عودة القيم على الفور أن فارق واحد مع باستخدام مكتبة من هذا القبيل في البرمجة غير المتزامنة أكثر عموما، هو عندما كنت على استعداد لإرجاع قيمة من قاعدة بيانات، من ملف، من الحساب التعبير، والامر متروك لك لاستدعاء الدالة رد الاتصال. والشيء الجميل حول هذه المكتبة اذا قرأنا مستندات أكثر بعناية ذلك، إذا وفقط إذا كان كل من منطقة الاسترجاعات يسمى دون كائن خطأ، سوف تنجح كل شيء؟ لذلك وبعبارة أخرى، إذا كان هناك 2، إذا كان هناك 10 المجهول وظائف في هذه المجموعة وبالتالي في هذه السلسلة، فقط إذا كان كل منهم النجاح، سوف الاستدعاء اختياري النهائي تعتبر ناجحة؟ إذا كان أي شخص منهم فشل كل وظيفة بعد ذلك سوف لا حتى يتم تنفيذها. لذلك، انها طريقة لطيفة من نوع وجود سلسلة ديزي أن إحباط قبل الأوان إذا كان هناك شيء يذهب على نحو خاطئ. ذلك أن نرى هذا في السياق، وهنا هو كيف يمكننا إعادة تنفيذ هذا البرنامج السابقة. أحصل على مسار كما كان من قبل، لذلك هذا هو الجزء السهل. أنا نسخ لصق هذا الرمز هيكل عظمي من وثائق هناك async.series قوس فتح، فتح قوس مربع. والآن لاحظت أنا واحد وظيفة في هذه البداية من الثانية، وسنرى أين نذهب من هذا. وتلاحظ الآن، انها معقدة قليلا في البداية ولكن التركيز فقط على ذلك سطرا سطرا. Fs.stat يعني الحصول على إحصاءات أو ما لا من هذا الطريق. نسمي هذا الاستدعاء عندما تصبح جاهزة. هذا الرمز هو نفسه كما كان من قبل. إذا كان هناك خطأ، هناك فارق واحد الآن. مرة أخرى، النموذج شائع جدا في البرمجة هو node.js إذا كان هناك شيء يذهب على نحو خاطئ و رد اتصال يحتاج إلى معرفة أنه من خلال الاتفاقية، أول يجري الحجة إلى رد ليكون هناك، إذا كان كل شيء على ما يرام أو مرجع إلى كائن خطأ، العاصمة E. انها مثل خطأ الطبقة التي توجد على الصعيد العالمي ولكن أكثر على ذلك بعض وقت آخر. ذلك عن طريق القيام بذلك، إذا كان هناك ل خطأ، ما هو ضمنا؟ يستند جيدا على ما وقال سلسلة يفعل، هو إذا كل شيء مباح خاطئ، ونحن نريد فقط نوع من لإحباط سلسلة كاملة تدعو ظيفة مجهول. لذلك، فإنه يكفي بالنسبة لي ل والعودة فقط رد عابرة في كائن خطأ. لأنه إذا أعطى القانون الأساسي لي عودة خطأ، أنا يمكن أن يخلق جديدة كائن خطأ من بلدي، ولكن لا يهمني حقا ل، أريد فقط أن يمر أيا كانت الخطأ هو أن يحدث في الواقع حتى أتمكن من نقله لهذا الاستدعاء. ومجرد أن يكون واضحا، و المقابل ليس ضروريا تماما. أريد أساسا للقيام بذلك ولكن أردت الآن لا "العودة؛ / / بحيث لا يزيد الرمز هنا ينفذ ". ذلك مرة أخرى أخرى مشتركة الاتفاقية في جافا سكريبت، حتى لو كنت لا إرجاع قيمة في حد ذاتها، تريد تمرير قيمة إلى وظيفة رد الاتصال ولكن بعد ذلك تريد لوقف التنفيذ وظيفة كنت في وسيلة تافهة للقيام بذلك هو فقط لدعوة العودة هنا. ولكن هناك شيء خاطئ، نحن مجرد القيام عودة الاستدعاء الخطأ على الرغم من انها تسير للعودة في القيمة غير معروف. كل الحق، وهذا لا إرجاع القيمة الأكثر احتمالا. كل ما يهمني هو مزيد من الصعود التنفيذ. لذلك، يا الخلط بين هذه سطرين هو مجرد حلاق إلى اتفاقية عادلة ل لديها عدد من خط من التعليمات البرمجية كتبت فقط 2-1. لذلك ماذا؟ إذا كان هناك ليس خطأ - في الواقع أن تكون واضحة أنا يمكن تجنب أيضا أنه من خلال القيام إذا آخر. ولكن مرة أخرى، وآخر نموذج شيوعا هو الاختيار عن الأخطاء الخاصة بك حتى أعلى ثم والعودة فقط بدلا من الاستمرار بمحاذاة أطراف التعليمات البرمجية مع إلسس وإلسس وإلسس. حتى إذا لم يكن ل ملف، الآن، كما تعلمون، أريد أن التعامل مع هذا قليلا خصيصا. حتى هنا في مثل Java أو C + + أو عدد قليل من لغات أخرى، وهنا كيف يمكن إنشاء مثيل الاعتراض على الخطأ اكتب عابرة في رسالة الافتراضي لا ملف وهذا هو مجرد تعسفية إلى حد ما. ولكن أنا إشارات خطأ من بلدي. وهذا ما يفعله مشاركة خط دلالة المفترض؟ كل شيء على ما يرام. إذا كنت تمر في فارغة لل المعلمة الخطأ، وهذا يعني فقط قبل الاتفاقية كل شيء على ما يرام. لذلك، وهذا يعني ما سيحدث منطقيا؟ إذا كان يتم تمرير فارغة إلى رد أن يعني ذلك المجهول نجحت ظيفة إذا جاز التعبير. لذلك، ما ينبغي سلسلة تسبق الأسلوب والآن لا يستند على بلدي تعريف اللفظي في وقت سابق؟ [ملاحظة غير مسموع] ننتقل إلى المرحلة التالية، أليس كذلك؟ إذا كان قد عاد غير خالية القيمة، فإنه يجهض فقط وليس أكثر من مجهول أن وظيفة الحصول على استدعاء. ولكن لأنه لم يكن، ثم هذا وسوف الحصول على استدعاء المقبل. مع ذلك، فإن المنطق هنا هو الى حد كبير نفس كما كان من قبل وسنرى كيفية تنظيف هذا الأمر أكثر في لحظة. وأنا أدرك هذا هو نوع من الكثير لاستيعاب جميع فظيا وبصريا. ولكن الآن لاحظت، والثاني وظيفة المجهول الذي أريد لتنفيذ في سلسلة هي في محاولة لقراءة الملف. نسمي هذا الاستدعاء عندما تكون مستعدا. إذا كان هناك خطأ، فقط إشارة ذلك عن طريق الاستدعاء بحيث بقية إحباط هذه الاشياء. آخر اغية العودة. ولكن لماذا أنا يمر في اثنين من الحجج؟ جيدا هذه المرة إذا قرأت ملف والعودة كمتغير دعا البيانات، أريد للدلالة ليس فقط كل شيء على ما يرام من خلال العودة فارغة الوسيطة الأولى. أريد أن أعود الفعلية بيانات كوسيطة الثاني. لأنه إذا قرأت المزيد في الوثائق، تلاحظ هذا جزء الأخير من التعليمات البرمجية قوس مربع يعني هذا هو نهاية المسلسل. كان هناك اثنان فقط المجهول وظائف في هذه السلسلة. إذا كان هناك خطأ هنا، ثم وأنا أعلم أن واحدا من الروابط في هذه السلسلة حتى فشل في الكلام. لذلك وبعبارة أخرى، فإن هذا الخطأ ستكون كائن خطأ هذا هو لاغية إن وجدت من فشل هؤلاء الرجال. وإذا كان هذا هو الحال، أنا فقط الذهاب لإنقاذ وانا ذاهب القول 400 والتي يعني فشل الطلب، هذا هو عام جدا رسالة خطأ. وبعد ذلك، انا ذاهب الى طباعة رسالة الخطأ. لذلك، أنا لا يكلف نفسه عناء يكون الشرج السوبر هذا الوقت، أنا لا أذهب للتمييز ما بين 500 و 404 و 403، أنا مجرد نوع من موجة عمياء يدي ويقول حدث خطأ ما. ولكن كأن شيئا لم تخطئ، أنا ذاهب لإرسال هذا res.end تمرير هذه البيانات. الآن هذا يبدو خفي قليلا. ولكن مرة أخرى إذا قرأت وثائق، الحجة الثانية ل هذا النهائي، رد النهائية، الرجل الذي أعدم هو فقط وبمجرد الانتهاء من سلسلة تنفيذ أو جزء هناك من، وهذا سيكون مجموعة جميع الحجج الثاني التي صدرت إلى رد الاتصال. الآن، اتضح أن ربط فقط في هذه السلسلة التي ترجع في الواقع إلى المركز الثاني الحجة هي هذه واحدة هنا. لذلك أنا ذاهب لفرز من على قفزة الإيمان ببساطة استخدام افترض لحظة أن الأخير هو الأسلوب التي تمنحك مشاركة عناصر صفيف. لأن هذه المجموعة وهذا ما يتم تمريرها بالنسبة لي فقد اثنين من indicies، صفر واحد. انها مجرد صفر لا قيمة له لأن يعود هذا الرجل - لا يمر في الثانية ولكن هذا الرجل لا حجة. حتى النتائج قوس الصفر هو لا شيء، النتائج قوس واحد يحتوي ما، إذا كنت قد تم بعد طول يصل إلى هذه النقطة؟ الملف، مرحبا، المحتويات العالم المفترض، لذلك كيف لي ان الواقع طباعته. واسمحوا لي أن أنهي واحد من التفصيل هنا. إذا كنت تفعل هذا النوع من القديمة المدرسة، وإذا كنت ترغب في الحصول على في عناصر الماضي، إذا لم أستطع القيام نتائج [results.length-1]، وهذا النوع من طريقة المدرسة القديمة للوصول إلى عناصر مشاركة في - أو مؤشر مجموعة الصفر. ولكن كما هو الحال في الجانب، وأذكر ان كان لي هذه المكتبة هنا تسطير التي كتبها ويطلق اصطلاح فقط حرفيا تسطير الحرف التي ليست خاصة، يبدو تماما مثل بارد علامة الدولار لا للمسج. هذا هو مجرد مساعد طريقة تؤكد دوت مشاركة أن يفعل بالضبط نفس الشيء. وإذا كنت قد استخدمت أبدا قبل تأكيد JS كلا لجانب العميل الترميز وجانب الخادم هو مكتبة رائعة مفيدة أن أكبر عدد من الناس وصفها انها ترغب مسج يحتوي على جميع من الأساليب، تمنى الناس جاء مع جافا سكريبت نفسها. موافق. لذلك >>، مثل جدا بالنسبة لي و كنت اشاهد في هذه السلسلة، لديك مثل رد كحجة؟ نعم >>. مثل ذلك عند الواقع أنه في دفع مثل، ومثل ما تقوم به يعني عندما يكون لديك فقط مثل إعادة النداء ثم تفعل مثل - [ملاحظة غير مسموع] موافق، سؤال جيد. لذلك، اسمحوا لي أن سحب ما يصل إلى الصفحة الرئيسية المتزامن هنا أو وثائق على GetHub. لذلك هذا هو الكنسي هيكل. إذا كنت مكالمة باستخدام هذا خاصة سلسلة الأسلوب، هناك قسمين كبيرة لذلك. واحد هو مجموعة من وظائف المجهول وهما عبارة عن رد النهائية وهذا في الواقع وظيفة أعدم في غاية نهاية المسلسل. الآن، إذا كنا في التكبير أقرب قليلا على الأولى من تلك الأشياء الكبيرة، و مجموعة من وظائف المجهول من قبل الشرط من هذا وثائق الرجل لديه أن يكون مجهول دالة التي تأخذ في واحدة تسمى حجة رد أو فو أو شريط، لا يهم لكنه اصفا اياه بانه رد. وهذا هو نوع من الجرس الخاص التي اهتز الكوخ يد لك. هذه هي الوسائل التي يمكنك إرجاع قيمة للعميل لأنك لا يمكن فقط لا العودة حرفيا. ما عليك القيام به من قبل طريق هذا الاستدعاء. لأنه إذا كان داخل هذا وظيفة بعض بطء تشغيل كود مثل قاعدة بيانات الاستعلام، وقراءة الملف من نظام الملفات، كنت لا تريد الانتظار هناك ومنع أي شخص آخر، تريد استدعاء رد الاتصال. لذلك، وهذا هو حرفيا اسم الحجة. ولكن مثل في C، كنت لديهم مؤشرات الدالة. في جاوة لديك أساليب نظام مرجعي ونفس هنا في جافا سكريبت. هذا هو متغير ولكن نوعه هو وظيفة. ذلك ببساطة عن طريق كتابة اسمها ما إذا كان رد أو فو أو شريط، ثم قوس فتح وقوس إغلاق، كنت تنفيذ ذلك على أن وظيفة. وتمرير فارغة والتي يعني الخطأ اغية واحد مما يعني هذا هو البيانات التي أريد أن تمر فيها. ثم قسما أن تكون واضحة، هذا هو رد آخر. وانها لا يسمى الاستدعاء، انها مجرد المفاهيمية و أسلوب رد اتصال ظيفة لأن يطلق عليه بحكم التعريف من مكتبة هذا الكاتب عندما اكتمال سلسلة كاملة أو مجموعة فرعية منها إذا كان حدث خطأ عاجلا. لذلك، اسم وظيفة رد الاتصال، استدعاء الدالة رد الاتصال، اسم وظيفة رد الاتصال، استدعاء الدالة رد الاتصال، رد المختلفة يعمل كل ذلك معا. لدينا الآن مثل تعريف الاستدعاء؟ لا، لأن هذا الرجل سوف تنتقل إلى مجموعة الخاصة بك وظائف من المجهول، مؤشر إلى رمز انه يريد لتنفيذه. بالضبط، كل الحق. لذلك، يرجى القول بأن كود يحصل أبسط قليلا. لذلك، فإنه يمكن. وإذا كنت مثلي، واتخاذ الراحة في معرفة على الأقل، يستغرق بعض الوقت ل تعتاد على ذلك. لكننا يمكن تنظيف هذا الأمر قليلا، وليس لرمي الكثير في لك ولكن هنا اختلاف آخر ولها باستخدام طريقة أخرى في نفس المكتبة دعا الشلال. الاتجاه الصاعد الذي هو خلافا لسلسلة حيث كل تلك مجهول وظائف تنفيذها أساسا بشكل مستقل عن كل من الآخرين. شلال مثل يوحي الاسم يسمح وظائف العلوي لتمرير نوع من القيم في إلى وظيفة أقل، نوع من مثل شلال من الماء. وبالتالي فإن الاتجاه الصعودي لهذا هو أن أستطيع النوع من استخدام هذا لمصلحتي. في async.waterfall، لاحظ ما يلي. ويمكنني أن مجرد دعوة fs.stat يمر في مسار أن أريد الحصول على إحصاءات عن. ثم تذكر قبل أن كان لها وظيفة مجهول التي كان حجتين يخطئ، esults ثم دعوت وظيفة رد الاتصال يدويا؟ في كلمة والآخر هو لمجرد أن يكون واضحة، وأذكر أنه في وقت سابق في المتزامن 2، فعلت كل هذا العمل سيئة. دعوت مرت fs.stat في P، أعلن بلدي المجهول وظيفة. وبعد ذلك فحص إذا الخطأ غير فارغة ثم أنا فعلت هذا، آخر فعلت ذلك، وكلها جمال الاتفاقيات التالية كما هو الحال في node.js هو أن رد وتهدف وظائف في العام أن تأخذ وسيطة واحدة على الأقل، كائن خطأ تليها الصفر أو قيم أكثر فائدة. حتى إشعار النموذج هنا، هذه وظيفة رد الاتصال أنا معلنا يلي بالضبط النموذج أن هذا الرجل لا مكتبة المتزامن. وهو يقول هذا، لماذا أنا أنا بلدي تنفيذ الاستدعاء الخاصة الأسلوب عندما صاحب هذا مكتبة هو تسليم لي حرفيا على طبق إذا جاز التعبير، و وظيفة رد الاتصال يمكنني استخدامها؟ لذلك، وأنا يمكن أن تمر فقط في مرجع انه اعطاني بحيث فورا، بلدي عدة أسطر من التعليمات البرمجية تصبح سطر واحد من التعليمات البرمجية. الآن، أين نذهب مع هذا؟ وظيفة التالية التي أريد أن تنفيذ، المجهول القادم وظيفة في هذه المجموعة وظائف يفعل ما يلي. الإشعار الأول هو القانون الأساسي الوسيطة الأولى. لذلك لديه شيء تغيرت بالفعل. الآن، هذا الرجل الذي كتب المكتبة - وأنا أقول الرجل لأنه هو الرجل. هذا الرجل الذي كتب هذه المكتبة هو ضمانات الوثائق أنه إذا كان هذا وظيفة هنا يمر بي مرة أخرى كائن خطأ أو يتبع فارغة من قبل غيبوبة قائمة فصل من القيم الأخرى، وقال انه سوف نتأكد من أن تلك القيم الأخرى هي الوفاض لهذه الوظيفة المجهول بالترتيب من اليسار إلى اليمين. وما كان ليكون مجرد وظيفة رد الاتصال وحدها ببساطة يصبح مثل الوسيطة الأخيرة. الآن، وأنا لا أعرف من أنا التركيز على مجرد تعلمون. ولكن الآن، ما هو يسلب هنا؟ لذلك، ونحن نعرف من وثائق أو زوجين من الأمثلة السابقة أن تتوقع نهاية المطاف fs.stat رد اتصال مع اثنين من الحجج، الكائن خطأ وهو وجوه الخطأ أو فارغة يتبع بالإشارة إلى الاعتراض احصائيات. حتى لو كنت تفكر في ذلك، الشيء الشيء الخطأ احصائيات غيبوبة، التي تناسبها في النموذج من مكتبة هذا الشخص. لذلك، أستطيع أن أقول ببساطة لأن أنا لا الوسيطة الثانية انه - وهذا يحدث لتمريرها من قبل fs.stat إلى رد الاتصال هو يخطئ، احصائيات بواسطة تعريف هذه المكتبة، يمكن أن أضع ثاني اسم الحجة هنا أو ما يمكنني تسميته إذا أريد يتبع قبل الاستدعاء هنا. لذلك، وأنا يمكن أن تمر واحدة نقدر من هنا إلى هنا. الآن، كل هذا على الرغم من التعليمات البرمجية من المسلم به إلى حد ما خفي هو على الأقل نسخ لصق ل للجزء الأكبر من قبل. والفرق الوحيد هو إشعار هنا أنا معلنا خطأ الاعتراض والآن أريد للحصول على مربي الحيوانات قليلا. أنا فعلا أريد أن أعرف ما الخطأ كان، لذلك أنا ذاهب لزمة داخل هذا الكائن خاصية تسمى تعسفا كود حتى وأنا أعرف أن هذا ليس ملف التي ينبغي أن تكون غير المصرح به، انها HTTP 403. اسمحوا لي أن نتذكر أنه قبل أمرر الكائن خطأ إلى رد الاتصال. ثم حاول أخيرا لقراءة الملف، لذلك في هذه الحالة، الشلال، لقد كسر رمز من خطوتين كبيرة في ثلاث خطوات أصغر. لاحظ الجمال هنا، يمكن أن أدعو fs.readFile يمر في المسار. ثم الجزء الصعب عقليا، وأنا فقط تمر في رد على الرجل. الشيء انه تسليم لي، وأنا الذهاب لتمريرها إلى fs.readFile. لأننا جميعا التمسك لنفس الاتفاقيات، الوسيطة الأولى إلى رد الاتصال كائن خطأ أو فارغة يتبع بالإغماء أو المنفصلين قائمة من الاشياء المفيدة. لذلك، ما يعني أن الآن، وإذا كنت قراءة الوثائق أنا أعرف هذا، والاستدعاء الأخيرة جدا، هذا الرجل هنا خارج الأقواس المعقوفة يجري لتمريرها في الكائن خطأ أو فارغة وهو ما يجب أن تحقق ل كما هو الحال دائما مع هذا الرمز هنا. ثم بالتعريف هذا الأسلوب في وثائق الرجل، القيمة الأخيرة عاد من أسلوب مشاركة في بلدي مجموعة مجهولة - بلدي مجموعة من الوظائف المجهول. لذا، ماذا تقرأ ملف العودة وأنا باستخدام العودة فضفاضة الآن. أعني ماذا تقرأ تمرير ملف كوسائط إلى أسلوب رد اتصال لالوفاض؟ حجتين، هو أولا كائن خطأ أو باطل، هذا هو دائما تقريبا سيكون الجواب. والشيء الثاني هو الذهاب ليكون ما لملف قراءة؟ محتويات الملف، البيانات كما أطلق عليها في وقت سابق. لذلك، بمجرد إعلان يخطئ، ويؤدي، وتحقق لهذا الخطأ هو نوع من الممل الآن. آخر، وأنا لا res.end تمر في تلك النتيجة. هذا بلا شك سوف لا مزامنة في تماما حتى كنت في الواقع إرسال بنفسك. لكنه الآن، واتخاذ بعيدا على الأقل حقيقة أن هناك على ما يبدو هذا نموذج شائع، حيث إذا كنا والكتاب من المكتبات كل نوع من عصا مع هذه الاتفاقية أساليب الاستدعاء. والحجة الأولى هي كائن خطأ أو فارغة. والثانية والثالثة والأشياء هي الأشياء الرابعة نحن نهتم ونحن الفرز من اتباع قواعد و الوثائق. بدأنا مع التعليمات البرمجية التي هو بصراحة قبيحة جدا. وعلى الرغم من أن أحدث مثال على ذلك هو بصراحة نوع من الصعب للالتفاف حول عقلك، انها على الأقل بصريا، يبدو انها أكثر صرامة بكثير. وبمجرد الحصول على راحة مع ذلك، انها أسهل بكثير وانها لذلك أقل عرضة بكثير لل البق من أن المثال السابق. لذلك، اسمحوا لي أن تبرهن آخر شيء واحد هنا. هذا هو الإصدار ثلاثة. و- لا، دعونا نترك هذا واحد وحده. اسمحوا لي ان اذهب الى بضعة أشياء أخرى مشاركة كما المضايقون. كل الحق، وذلك في الخادم 2. موافق. الأولى، أي سؤال، أعرف أن هذا هو الكثير ولكن أردت المزيد تعليمات، لذلك؟ هل لا نقول جيدة تعليمات بالضرورة. نعم؟ [ملاحظة غير مسموع] الصحيح، وكنت أساسا متساهلة إلى نظام التشغيل لمعرفة كيفية تزييف كل هذه الكرات في آن واحد، القراءة من ملف، قراءة من قاعدة بيانات. وانها هذا الخادم جافا سكريبت وهذا في حد ذاته مترابطة واحد. وأساسا واقعيا، هناك صورة واحدة لم أكن رمي، وانها ليست بالضرورة كل ما المنير ولكن ربما ستظهر كنت نموذجا العقلية. جافا سكريبت نفسها وعقدة على وجه الخصوص لديه هذا ما يسمى حلقة الحدث. حيث، يمكنك التفكير من node.js، البرنامج، هو حرفيا مثل حلقة لا نهائية. انها مجرد حلقة البرية، والانتظار والانتظار والانتظار، أبحث عن المهام لإكمال. وهذه المهمة يمكن، انتقل جلب شيء من قاعدة بيانات أو هنا قيمة من قاعدة البيانات أو يذهب للحصول على هذا الملف من القرص أو من هنا ل يطلب من المستخدم. أي نوع من الحدث، تماما مثل الحدث المتصفحات مدفوعة، وذلك الخادم حدث جانبي مدفوعة. وأي من تلك الأشياء تشكل الأحداث. حتى شخص ما في node.js، فقط كتب حلقة لا نهائية، حلقة البرية الكبيرة، والانتظار للأشياء أن يحدث. وكما الاشياء لا يحدث، فإنه ينتهي في طابور، أليس كذلك؟ بالتأكيد، قاعدة بيانات قد ترجع قيمة. ونظام الملفات، والتشغيل النظام قد بإرجاع قيمة في نفس الوقت تقريبا ولكن هناك على الارجح أن تكون بعض يأمرون بها. وnode.js هو الذهاب الى يكون أساسا طابور مثل مجموعة كبيرة أو ناقلات، وبعض هياكل البيانات أن جميع مخازن من تلك الأشياء. لأنه يمكن حرفيا فقط التعامل مع واحد منهم في كل مرة. لذلك، عندما كنت، المطور، الكتابة جافا سكريبت غير المتزامنة التعليمات البرمجية باستخدام غير المتزامن وظيفة، وكنت يسمح هذا ما يسمى حلقة الحدث للذهاب لالقراد المقبل، أليس كذلك؟ لذلك، طالما كنت على الفور العودة إلى جميع من هذه الأساليب غير متزامن تفعل مثل ملف القراءة والقانون الأساسي، يعودون على الفور لأن رد في نهاية المطاف يعود. بمجرد العودة، وهذا يعني شخص آخر يمكن الحصول على برزت قبالة الاسهم هنا أو أنه يمكن الحصول على برزت قبالة أمام قائمة الانتظار هنا. وهكذا، هناك في حقيقة التسلسل من كل ما يحدث، على الرغم من كل هذه الاشياء يمكن أن يحدث بالتوازي على نظام مؤشرات. ولكن node.js نفسها و والخادم الذي يقوم بتشغيل كما موضوع واحد. والجانب السلبي لذلك هو ر كنت لا ماكس بالضرورة من جهاز الكمبيوتر الخاص بك القدرة هي على النحو خاصة إذا كان لديك الأساسية أو 16 حتى جهاز كمبيوتر 2 الأساسية وكنت مجرد تشغيل مثيل واحد من العقدة. ولكن إذا قمت مرة أخرى أخذ شيء من هذا القبيل 161، يمكنك تجنب كابوس ضخمة من الصداع عندما يتعلق الأمر على أساس العرق والشروط الأقفال وإشارة والكتابة حقا كود مؤشرات، لذلك إيجابيات وسلبيات. موافق. لذلك، والعودة إلى الرمز هنا، اسمحوا لي أن أقترح أن نبدأ لتبسيط الأمور قليلا. شاهدنا ملقم واحد قليلا قبل والتي بدت مثل هذا. لذلك، وهذا يمكن القول بسيط جدا. ولكن مثلما هو الحال في العالم من PHP، هناك أطر مثل Laravel وهناك أشياء مثل القضبان وجانغو، نفس الشيء في العالم node.js. ونحن سوف تنفق أكثر الوقت على هذا يوم الاربعاء والمشروع المقبل. ولكن إذا ذهبت إلى خادم 2 الدليل، لاحظت وجود نماذج زوجين هنا. لذلك هذا هو - هناك يذهب ليكون مثالا يعادل لكنه باستخدام الإطار دعا express.js، وهو مجاني مفتوح المصدر البرمجيات مثل القضبان وجانغو، مثل Laravel، وهذا مجرد الذهاب في نهاية المطاف أن يكون محل تقدير اليوم 'السبب كنا الكتابة هذه أمثلة بسيطة. ولكن ثق بنا. هذا سوف بسرعة كبيرة يصبح صديقك لأنه سيوفر لك الكثير من التعليمات البرمجية TDS. والنموذج الشائع لل تطبيق express.js هو لديك app.js أو server.js الملف الذي يحتوي على المنطق من البرنامج أو في الأقل نقطة الدخول. هل يمكن أن يكون ملفات متعددة. عقدة وحدة الفرعي التي لديها مكتبات بعد أن قمت بتحميلها مثل المتزامن وتعبر عن نفسها في بلدان أخرى. ثم package.json، package.json يبدو مثل هذا، ويمكنك إنشائه يدويا أو أدوات إنشائه لك وانها حرفيا ملف سلمان والجزء مثيرة للاهتمام هو تبعيات هنا. مثلما هو الحال في Laravel، كنت كان هذا الدليل بائع وكان لديك ما يدعو للقلق حول حزم والقيام - تحديث فعلا مع الحرفي أو أوامر مشابهة و مكتبات لك بتثبيتها، بالمثل مع package.json هنا وعلى إدارة المكتبات والإصدارات أن الذي يهمك. لذلك، إذا كان لدي package.json، يمكنني القيام به ببساطة الآلية الوقائية الوطنية، عقدة حزمة تثبيت المهد، انها سوف ننظر تلقائيا في هذا الملف package.json. ننظر ونرى، هل ديك أحدث إصدار جميع وحدات الباعة في عقدة تؤكد حدات الدليل هنا أو ربما في بعض الوالدين أو الدليل الجد. وإذا لم يكن كذلك، فإنه من الذهاب لتحميلها وسترى مجموعة كاملة من الاشياء تسير HTTP عبر الأسلاك. هكذا على سبيل المثال، واسمحوا لي تظهر لك محتويات من وحدات العقدة فقط للتعبير عنه. اسمحوا لي أن تمضي قدما و حذف بجرأة وحدات عقدة بحيث كل ما لدي الآن هو هذا. وإذا كنت لا تثبيت الآلية، عليك نرى أنه ذاهب الى قراءة هذا الملف package.json و رأيناه الإخراج مشابهة لهذا في العالم Laravel. انها تحميله ككل حفنة من الاشياء وهذا لأن صريح بدورها يعتمد على مجموعة كاملة المكتبات الشعوب الأخرى. لذلك، كل تلك هي نوع من يتم تحميلها بشكل متكرر. حتى الآن، إذا كنت تفعل في LS مرة أخرى، هناك وحدات عقدة بلدي الدليل مرة أخرى والتعبير عن ما يعود. حتى انها مجرد وسيلة ل تبسيط إدارة الحزم. الآن، إذا نظرنا إلى ملف app.js، وهذا يجري أن يكون الارتداد ل أقرب خادم الويب لدينا أين نحن يبصقون فقط خارج "مرحبا، العالم". ولكن لاحظ النماذج هنا، أولا نحن بحاجة إلى التعبير عن وحدة، ثم لدينا هذا الخط من التعليمات البرمجية التي تعرفه من وثائق. لكم حرفيا أن علاج متغير الوحدة النمطية بوصفها وظيفة، وثيقة مفتوحة حتى قوسين قوس يعني تنفيذه. أن يجري على ما يبدو ل العودة شيء ونحن في طريقنا دعوة عامة التطبيق. كيف يعمل؟ أنا لا أعرف حقا. أنا سأترك شخص آخر، كما تعلمون، في العالم صريحة إرسال ذلك. انا ذاهب الى الوقوف الآن على له أو كتفيها وذلك لجعل طلبي تشغيل أبسط قليلا. هنا، وانا ذاهب للاستماع على هذا المنفذ خاص والتي قد تكون معظم أي شيء. وهنا هو رمز هذا ربما أكثر تذكرنا الآن من Laravel وroutes.php. لذلك هذا هو بسيطة العشاء، وأنا مجرد الذهاب لتحديد المسار لنجم خط مائل، لذلك كل شيء سوف يتم استيعابها بواسطة هذا المعالج الطلب. نموذج لطلب معالج هي وظيفتها المجهول مع وسيطة الطلب وكائن استجابة تماما مثل من قبل. وres.send في وسائل التعبير عن قمت بإرسال رمز يتبع بأي كنت تريد إرساله. وبطبيعة الحال، يمكنك تفعل شيئا مربي الحيوانات عن طريق إرسال فعلا ملفات HTML أو أو المولدة ديناميكيا المحتوى. لكنه الآن، كل ما قمنا به وبصق مرحبا، العالم. إذا ذهبنا إلى الخادم الثلاثة، هذا هو حتى مربي الحيوانات فقط لتظهر لك بعض الوظائف. ونحن سوف تظهر لك إصدار أكثر جنسية حتى هذا يوم الاربعاء. ولكن إذا كنت قد سمعت من أي وقت مضى من المقبس IO ربما، وذلك أعتقد جوناثان أو قال أحدهم في وقت سابق، واحدة من الأشياء عقدة معروف حقا عن وقتها الحقيقي السلوك، أليس كذلك؟ التفكير PHP في الخلية، إذا كنت كان لتنفيذ خدمة الدردشة في PHP حيث يمكن شخصين فتح نافذة المتصفح لfoo.com ثم تبدأ يمينغ كل أخرى، أليس في نافذة واحدة، بوب في آخر بحيث كل واحد منهم يرى له أو رسائل لها في النافذة الأخرى. كيف يمكنك أن تفعل هذا في PHP و MySQL؟ استخدام أو عدم استخدام نوع Laravel من غير المادية، ويمكن أن يكون لديك مثل ملف index.php. وكنت حصلت على أن يكون - في بعض الحالات انها حصلت على يبصقون من شكل، لذلك هناك سيكون نموذج HTML التي ربما لا تقدم عبر تقديم النموذج العادي ولكن اياكس ربما، أليس كذلك؟ لذلك، وعلى تقديم معالج، لذلك كنت اكتب في حقل النص، كنت هاهنا ثم فإنه يحصل إرسالها إلى الملقم عبر اياكس. ما يفعله لك، ثم القيام على الخادم؟ لذلك، كنت قد حصلت index.php أو شيء من هذا نقطة PHP تلقت المعلمة في HTTP من المستخدم، أليس أو بوب الرسائل الفورية، ماذا تفعل معها من أجل نشر ذلك لبوب أو أليس، على التوالي؟ أعني لكم حرفيا لديك الأدوات التي للقيام بذلك في دقيقة الخاص بك. لذلك مثل ما كنت ستفعل؟ لديك دقيقة واحدة ل تنفيذ هذا البرنامج. نعم؟ [ملاحظة غير مسموع] الكمال. الحق، لذلك كنت قد حصلت على قاعدة البيانات. نحن نعرف قليلا قليلا عن الخلية. لذلك، لديك جدول هذا الرسائل، ربما هناك مرات الطوابع، هوية المستخدم، في نص الرسالة نفسها التي تم إنشاؤها، محدث وذلك كله. لذلك، يمكنك تخزين في قاعدة بيانات. ونفترض أليس يرسل الرسالة الأولى، كيف يمكن الحصول على بوب هذه الرسالة الآن من قاعدة البيانات؟ قد يكون بعض اياكس الاستجابة التي يجري باستمرار العودة إلى قاعدة البيانات الحصول على أعلى [غير مسموع]. بالضبط. حتى رمز بوب الذي هو متاحة نفس أليس هو مجرد نوع علاقة متماثل، متصفح بوب لديه بعض رمز اياكس وهذا ربما وربما كل 30 ثواني سحب الخادم عبر اياكس متزامنة، هناك رسائل جديدة؟ هناك رسائل جديدة؟ كل 30 ثانية يجري أن يكون نوع من الأمثل لأن لديه للانتظار حتى إذا أليس حرفيا أرسلت للتو رسالة. لذلك، يمكن المتصفح بوب كل ضرب الثاني على الخادم. ولكن هذا يعني أليس المتصفح هو ضرب الخادم كل ثانية. ماذا عن تشارلي [الإملائية يفترض] وديفيد [يفترض الإملاء] وإدوارد [يفترض الإملاء] وكل حرف أخرى من الأبجدية؟ ما هي المشكلة هذا النهج؟ وهناك الكثير من الزيارات المفرطة - أعني كنت مجرد فعال الجرعات بصرك الخاصة أو DDOSing، الموزعة الحرمان من الخدمة الهجوم في الموقع الخاص بك، من خلال وجود جميع من هؤلاء المستخدمين تشغيل الجافا سكريبت التعليمات البرمجية التي مجرد تنفيذ الأمر ping تحدث هيك من الخادم الخاص بك حتى لو كان عدد التعسفي، 80 في المئة من الوقت وقال لا أحد أي شيء في غرفة الدردشة. ولكن كنت مجرد التدقيق للتأكد من هذا القبيل. لذلك PHP في الكثير من لغات ليست فقط جيدة للاتصالات في الوقت الحقيقي. لأنه في PHP أذكر هناك لا توجد ذاكرة المركزية، أليس كذلك؟ لديك كائنات الدورة مما يخلق الوهم التخزين المركزي ولكن وهذا على أساس لكل مستخدم. لم يكن لديك ذاكرة العالمي مثلك في بريمج جافا في مألوفة أو في غيرها الإطار يعمل من هذا القبيل. Node.js الرغم من ذلك، يجب عليك الذاكرة العالمية 'السبب لديك ملقم واحد وهذا يمكن تذكر أي شيء يريد حول جميع المستخدمين. وكنت قد زالت لديها قاعدة بيانات. ولكن الشيء الجميل في node.js هو أيضا أنه من الأفضل بكثير من شيء مثل PHP وخلق الوهم التعامل مع متعددة الأشياء في آن واحد. في واقع الأمر كما هو الحال في جانبا، يمكنك تنفيذ خوادم الدردشة في PHP، ولكن هل تفعل عادة ما يسمى الاقتراع طويلة حيث كنت لا بينغ خادم كل ثانية. تنفيذ الأمر ping الملقم، لم يستجب الخادم لك لتصل إلى أكثر من 30 ثانية، فإنه يجلس حرفيا في حلقة الانتظار والانتظار. ويتحقق الملقم إذا هناك بيانات جديدة في قاعدة البيانات ومرة واحدة فقط هو أنت ترى، "أوه، هنا رسالة من بوب " أنها لا ترد على الخادم بالمشاركه؟ وبالتالي فإن تأثير في متصفحك هو أن أيقونة IE أو موزيلا أو أيا كان يبقى مجرد الغزل لمدة 30 ثانية في كل مرة. ولكن الاتجاه الصعودي هو، أنت لا لديك 30 طلبات الاتصال في 30 ثانية، لديك واحدة. حتى انه دعا الاقتراع طويلة. ولكن حتى أفضل في الويب الحديثة متصفحات هو ما يسمى WebSocket، التي كنت تأخذ CS143، يمكنك جعل فعليا اتصال TCP من عملاء مثل مستعرض إلى ملقم ثم يعلق على ذلك ل دون استخدام ما يقرب من العديد من الموارد كما HTTP قد تفعل عادة. والمقبس هو IO مكتبة node.js أن يجعل من الاسهل بكثير ل جعل اتصالات مأخذ التوصيل أو أوهام هناك في لمتصفحات القديمة بحيث يمكنك تنفيذ هذه وظائف في الوقت الحقيقي. لذلك، وهنا مثال على ذلك. هذه الاشياء حتى يحصل على أعلى أكثر تعقيدا لكنه في الغالب نسخ ولصق من وثائق socket.io 'ق. وهنا الآن أكثر معالج طلب دقيقة. إذا كان المستخدم طلب ل مائل، ملف ما أنا ذاهب أن تكون على ما يبدو تخدم حتى لهم؟ index.html و. وهناك بعض جديدة الاشياء هنا تيار والتي سوف تظهر لك في مجرد لحظة. ولكن هذا هو مجرد وسيلة أخرى من الاستيلاء على ملف و قليلا أكثر كفاءة من مجرد القيام fs.readFile. انها قليلا أكثر ذكاء وخاصة بالنسبة للملفات الكبيرة. قصة قصيرة طويلة، هذه الخطوط فقط لخدمة حتى ملف يسمى index.html و لنفترض الآن والتي تحتوي على شكل HTML الذي أليس وبوب قد يتبادلون التخابر. أخيرا، io.sockets.on، لذلك هذا ويأتي هذا الخط من هنا. لذلك، أنا فقط قراءة وثائق io.socket يعطيني الوصول إلى ما يسمى WebSocket مع مستعرض، بين المتصفح والخادم. أنا أستمع للخاص اتصال الحدث الوسائل التي عندما يقوم المستخدم الأول يضرب الخادم يحاول لفتح هذا الصدد، وأنا سوف نسمي هذا الاتصال مرة أخرى. والآن، انا ذاهب إلى القيام بما يلي. كل خمس ثوان، ما أنا ذاهب الى القيام به؟ انا ذاهب الى تنبعث منها أو بث إذا كنت تتذكر الصفر، لغة رسومية من شأنه أن كتل البث؟ لذلك، وأنت تسير لينبعث أو يتسبب في حدث يسمى تعسفا من الخادم. وانه سيكون ل تحتوي على رسالة بينغ والتاريخ الحالي. لذلك، وهذا هو الفعلي خدمة الدردشة التي أليس وبوب يمكن استخدامها، ولكن هذا النوع من خادم دردشة الآلي حيث الرسائل الأصوات مجرد نوع من السونار. انها حتى الآن فقط في الأوقات التي تكون يتم إرسالها كل خمس ثوان. لذلك، إذا كنت فعلا تشغيل هذا الشيء - وهذا كل شيء. أن تكون واضحة إلى هنا، لاحظ هذا هو مجرد تسجيل هنا. لذلك، اسمحوا لي أن أنتقل ل غضت الطرف عن ذلك. اسمحوا لي أن تفعل عقدة app.js. اسمحوا لي ان اذهب لمتصفحي. تحديث الصفحة الرئيسية هنا. [وقفة] واسمحوا لي أن إغلاق المفتش. كل خمس ثوان، ولدي مظاهرة حتى وإن لم يكن التفاعلية للتنمية البشرية من شيء يحدث بشكل غير متزامن. في الإشعار المتصفح، ليس هناك رمز الغزل. انها تستخدم ميزة مربي الحيوانات من كروم في المتصفحات الحديثة الحفاظ على مأخذ اتصال تحت غطاء محرك السيارة وهذا ما يسمى عموما نموذجا حانة / الفرعية، نشر / الاشتراك النموذج، حيث أننا لم نفعل ان صراحة تماما هنا. ولكن ما هو الجميل في هذا حانة عامة / جنوب النموذج هو أنه يمكن أن يكون ناشر واحد. في هذه الحالة خادم مركزي وجميع للفرد متصفحات عملاء. أليسس والبوب ​​من العالم يمكن الاشتراك بها، حتى تتمكن من نقل رسائل بين أي عدد من المستخدمين. وعلى الرغم من أننا مرة أخرى لا نرى التفاعل، ربما كان لدينا 12 خطوط من رمز فقط للقيام بذلك. وانها ربما لا قفزة تخيل كيف يمكن سوط خارج الملف index.html و الذي يحتوي على شكل HTML صحيح، قليلا من التعليمات البرمجية مع مسج اياكس أن لا يرسل النهار ولكن أيا كان يرسل فقط أليس أو نوع بوب إلى ملقم ثم الخادم وسوف تتابع ذلك. وأعدك أن نلمح في الماضي شيء واحد فقط لندف لكم مع هذا. إذا ذهبنا إلى مجرى صفر واحد، سترى رمز هذا مجرد مختلفة قليلا هنا. فقط حتى كنت قد رأيت ذلك، هذا هو بديل لماذا دعوت fs.readFile طريقة في وقت سابق، حيث، يمكن أن أقول لكم node.js، "الذهاب قراءة هذا الملف في الذاكرة. ولكن إذا انها كبيرة تعطي فقط لي قطعة في وقت واحد ". وكنت قد نعرف من CS165 أو 161 أنظمة الملفات لديك مختلفة خصائص الأداء. قد ترغب في قراءة في كتل 512 بايت أو 2 كيلو بايت أو أيا كان. هذا هو وسيلة الأمثل لل الحصول على العودة من ملف تكراري بحيث يمكنك يبصقون عليه بسرعة أكثر من ذلك بقليل إلى المتصفح أو ل كل من هو العميل النهائي. كمية ضخمة جدا من المحتويات اليوم ونحن في طريقنا للغوص في مزيد من التفاصيل يوم الاربعاء مع تيم [الإملائية يفترض] على وجه الخصوص النظر في الكيفية التي يمكن أن تترجم بعض الأفكار من النصف الأول من بالطبع Laravel ونماذج في مكتبة انه هو نفسه كتب دعا Bookshelf.js الذي صار متزايد شعبية في المجتمع لأنه يتيح لك أكثر من ذلك، إن لم يكن أكثر من وظائف من بليغ الذي أذكر هو أن البصيرة مكتبة Laravel، أكثر من ذلك على ذلك وأكثر كيف لتطوير متكاملة تطبيقات يوم الاربعاء. نحن سترى ذلك الحين.