KEVIN Schmid: Hello semua orang. Selamat datang ke seminar CS50 yang pada Node.js. Nama saya Kevin. Saya TF CS50. Dan saya jenis seperti benar-benar teruja mengenai seminar ini. Saya rasa Node.js adalah sangat sejuk. Saya berharap seminar ini boleh digunakan sebagai yang baik, saya rasa, batu loncatan untuk beberapa projek-projek akhir anda jika anda berminat untuk menggunakan sesuatu seperti Node.js. Kami akan jenis memulakan seminar kira oleh hanya bercakap tentang sedikit daripada jenis berskala latar belakang perspektif Node.js, dan kemudian kami akan berpindah ke beberapa contoh kod. Dan saya akan mempunyai kod di laman web, dan anda boleh melihat kod. Dan selepas seminar itu, saya akan menyusun bercakap tentang bagaimana anda boleh menyediakan Node.js pada komputer anda. OK. Jadi mari kita memulakan. Jadi saya rasa saya hanya mahu bercakap tentang pelayan web, benar-benar, pertama. Dan untuk memulakan perbincangan ini, saya pada dasarnya mempunyai gambarajah yang dari buku teks yang digunakan untuk CS61, yang pada dasarnya menunjukkan interaksi antara proses pelanggan, seperti web anda penyemak imbas atau seperti pelanggan matlamat anda atau sesuatu seperti itu, dan pelayan web. Jadi ini jenis kelihatan serupa dengan gambar yang anda lihat dalam syarahan mengenai Rabu di mana pada asasnya kami mempunyai beberapa proses pelanggan seperti Google Chrome. Dan kemudian satu langkah adalah pelanggan menghantar permintaan. Jadi yang boleh menjadi sesuatu yang seperti juga mari kita melawat, saya tidak tahu, CS50.net. Oleh itu, kita mengeluarkan permintaan itu. Dan adakah sesiapa ingat nama protokol yang menentukan cara yang permintaan hendaklah distrukturkan? Yep. PENONTON: [didengar]. KEVIN Schmid: Tepat sekali. Jadi ia seperti HTTP, bukan? Jadi, pada asasnya spesifikasi untuk bagaimana permintaan yang benar-benar perlu dibentangkan keluar, kerana pada akhir hari, permintaan yang benar-benar sama seperti yang tali yang pada dasarnya kata saya mahu ini. Dan spesifikasi yang untuk yang HTTP. Jadi itu seperti protokol. Demikian maka server menerima permintaan itu. Jadi anda lelaki itu mempunyai pelayan web dipasang perkakas CS50 itu. Ia Apache. Dan minggu ini apabila anda bekerja pada masalah ditetapkan tujuh, anda akan benar-benar bekerja dengan pelayan web. Jadi server menerima permintaan itu, dan maka ia perlu jenis calar yang kepala dan berkata seperti juga apa yang yang saya lakukan dengan ini? Jadi berdasarkan apa yang ia memutuskan untuk berbuat demikian, maka ia mungkin perlu menghubungi beberapa jenis sumber. Dan sumber yang boleh menjadi banyak perkara yang berbeza. Untuk satu, ia boleh menjadi hanya seperti fail HTML statik. Jadi ia hanya boleh menjadi seperti beberapa HTML yang seperti untuk laman web peribadi anda. Ia boleh menjadi fail statik seperti imej atau seperti sebuah filem yang anda ada. Ia juga boleh perlu bercakap untuk beberapa jenis pangkalan data seperti pangkalan data MySQL. Jadi ia tidak sentiasa perlu berkomunikasi dengan sumber, tetapi dalam beberapa kes, ia boleh. Jadi maka apa yang ia akan lakukan selepas itu ia akan menghantar kembali sambutan. Dan tindak balas ini adalah juga dinyatakan oleh HTTP. Demikian maka pelanggan boleh menerimanya. Ia boleh pemedih mata selain ia dan memprosesnya. Dan kemudian anda mendapatkan laman web seperti Google atau CS50.net atau apa sahaja yang anda pergi ke. OK? Jadi ini adalah interaksi asas yang kita akan berurusan dengan. Dan kita cukup banyak akan menjadi memberi tumpuan kepada bahagian ini interaksi, pelayan. OK. Sejuk. Sesiapa mempunyai sebarang soalan setakat ini? OK. Jadi seperti yang kita kata, pelayan web itu menerima permintaan HTTP ini dan kemudian mengeluarkan ini Sambutan HTTP. Dan seperti yang kita bercakap tentang sebelum ini, Perkakas CS50 web server Apache. Oleh itu, apabila anda semua bekerja di P ditetapkan tujuh, anda akan bekerja dengan Web server Apache. Anda tidak akan mempunyai untuk benar-benar berkesan dengan Apache secara langsung terlalu banyak. Anda jenis konfigurasi Apache sedikit apabila anda menentukan tuan rumah maya atau tuan rumah v, dan kami akan mendapat dengan dalam sedikit. Tetapi pada dasarnya, web server Apache ditubuhkan untuk bekerja dengan PHP jenis keluar dari kotak. Jadi apa yang sebenarnya berlaku ialah apabila anda pergi untuk salah satu laman web anda seperti, katakan, tuan rumah tempatan slash index.php atau sesuatu, adalah pelayar anda menghantar yang permintaan, dan kemudian Apache sedang duduk sana dan angka kaitan dengan ia. Dan tindakan ini adalah untuk melaksanakan kod yang di index.php dan kemudian hantar dari belakang. Jadi ada itu. Oleh itu, kita semacam bercakap tentang perkara ini. Jadi ia hanya boleh menyampaikan suatu fail statik atau menjalankan beberapa kod PHP dan kemudian isu sambutan. Jadi maka soalan yang sama yang boleh datang up adalah dengan baik, bagaimana kita benar-benar menangani dengan mempunyai beberapa pengguna pada masa yang sama? Jadi bayangkan jika anda telah menulis web pelayan, jika anda mempunyai pelayan web yang anda cuba untuk menulis dalam sesuatu seperti C atau sesuatu seperti itu, pada dasarnya anda boleh berfikir tentang bagaimana ada boleh menjadi beberapa jenis kod yang akan menerima permintaan itu, tetapi kemudian ia melakukan semua kerja ini di atasnya. Ia mungkin perlu, contohnya, hubungi pangkalan data atau sesuatu seperti itu. Betul? Dan kemudian ia akan melakukan apa yang pemprosesan dan kemudian dihantar pulang sambutan. Jadi itu seperti yang tinggi gambaran tahap. Tetapi ia tidak segera jelas bagaimana anda boleh berbuat demikian supaya dua orang atau walaupun 1,000 orang boleh bekerja dengan anda pelayan web pada masa yang sama. Jadi penyelesaian yang menggunakan Apache dipanggil benang atau proses. Jadi anda mungkin pernah mendengar syarat-syarat ini sebelum ini. Tidak mengapa jika anda tidak mempunyai, tetapi hanya berfikir kira-kira benang atau proses sebagai cara untuk sistem operasi atau program pengguna atau sesuatu seperti itu atau pelayan web untuk jenis melaksanakan pelbagai perkara sekaligus. Jadi, anda mungkin telah mendengar istilah seperti benang pelaksanaan. Jadi ia adalah jenis seperti anda jenis multitasking. Dan jika anda lihat pada kotak anda komputer riba, atau sesuatu seperti itu, multicore, apa yang anda boleh lakukan ialah anda boleh menjalankan dua benang yang berbeza di berbeza bahagian CPU supaya mereka boleh sebenarnya berlaku pada masa yang sama. Jadi ini adalah benar-benar kuat. Dan ini adalah jenis ini Apache Penyelesaian kepada masalah ini. Jadi ada jenis seperti mana-mana isu-isu dengan pendekatan ini walaupun? Jadi saya rasa saya jenis menulis mereka di sana. Tetapi kedua-dua mereka bentuk menggunakan banyak memori. Ia sangat mahal untuk mewujudkan benang atau proses. Dan sebahagian daripada hujah adalah bahawa hanya seperti apabila anda menjalankan program C seperti utama anda dan kemudian bahawa panggilan fungsi yang lain, yang mempunyai beberapa jenis timbunan. Jadi benang juga memerlukan yang sama sekali timbunan berasingan yang boleh agak besar. Dan jika anda boleh bayangkan mempunyai tan pengguna di laman web anda, anda perlu banyak benang yang berbeza. Itu banyak susunan untuk mengurus dan mengekalkan. Jadi ia penggunaan memori yang besar. Dan kemudian, juga, katakan anda hanya mempunyai satu CPU, atau katakan anda mempunyai lebih benang daripada anda mereka multicores. Betul? Jadi katakan anda mempunyai 10 benang dan anda hanya mempunyai lima CPU. Anda jenis perlu melakukan perkara ini di mana anda bertukar-tukar antara semasa satu yang berjalan kerana anda tidak boleh menjalankan semua 10 sekaligus. Dan itu dipanggil suis konteks. Dan istilah yang benar-benar mempunyai beberapa konteks yang berbeza, tetapi mari kita hanya menganggapnya sebagai beralih antara dua benang. Yang boleh agak mahal kerana asasnya apa yang anda perlu lakukan adalah anda perlu berhenti apa yang anda lakukan, simpan keadaan yang thread berjalan, dan kemudian bertukar ke tempat lain. Begitu juga semua orang jenis melihat motivasi mengapa benang dan proses mungkin sedikit besar? Dan adakah anda mempunyai soalan? OK. Sejuk. Sesiapa mempunyai apa-apa soalan? OK. Jadi, jika kita mengambil langkah ke belakang untuk satu saat, ada jenis seperti pemerhatian yang kita boleh membuat kira-kira banyak aplikasi web. Dan itu benar-benar bahawa banyak daripada mereka sebenarnya tidak berbuat demikian banyak berguna bekerja dalam benang. Jadi sesiapa telah bermula pada P ditetapkan tujuh pada semua? Jadi yang anda mahu mungkin menggambarkan beberapa bahagian? Adakah anda bekerja pada login atau sesuatu seperti itu? PENONTON: No KEVIN Schmid: OK. Jangan sekali-kali fikiran. Maaf. Tetapi pada dasarnya, dalam P set, anda akan membuat banyak jenis pertanyaan kepada pangkalan data untuk mendapatkan beberapa maklumat daripada pangkalan data itu. Dan apa kod anda akan lakukan, apa proses Apache atau yang Apache thread akan melakukan semasa ia menghubungi pangkalan data adalah ia jenis akan menjadi duduk di sana dan ia akan menjadi menunggu pangkalan data untuk menjawab. Sekarang mungkin tidak bunyi seperti yang besar berurusan kerana pangkalan data adalah pada anda Perkakas CS50, bukan? Tetapi ada beberapa jenis rangkaian Latency sana kerana kini web pelayan mempunyai untuk mengeluarkan permintaan sendiri untuk pangkalan data untuk berkomunikasi dengan pangkalan data dan kemudian mendapatkan bahawa maklumat kembali. Jadi sekarang ia seperti juga menunggu saya, saya akan pergi mendapatkan sesuatu dari pangkalan data dan kemudian ada yang banyak menunggu berlaku. Adakah ini masuk akal? Dan bagi sesetengah perkara ia bukan yang buruk. Jika ini ada, sebagai contoh, akses memori, itu tidak suka dahsyat saya / O kependaman. Dan apabila saya berkata, I / O kependaman, apa yang saya merujuk kepada adalah seperti apa-apa jenis seperti output input. Tetapi untuk mengakses fail pada cakera, seperti jika saya mahu berkhidmat kepada HTML statik memfailkan yang pada laman web saya atau sesuatu seperti itu, saya jenis perlu berhenti untuk sedikit, membaca fail yang dari cakera, dan kemudian di proses yang saya menunggu. Saya tidak melakukan kerja yang berguna. Ini tidak benar segala-galanya, tetapi ia adalah perkara biasa dalam aplikasi seperti P set tujuh dan banyak aplikasi yang anda tidak sebenarnya melakukan pemikiran banyak. Dan apabila saya mengatakan berfikir, saya maksudkan seperti kerja pengiraan. Kerja supaya pengiraan boleh menjadi sesuatu yang seperti, katakan, anda mahu menulis pelayan web yang hanya dikira nombor Fibonacci ke-n. Itu tidak bunyi seperti terutamanya pelayan web yang menyeronokkan. Seperti saya tidak akan mengharapkan laman web yang menjadi Facebook akan datang, tetapi itu adalah beberapa jenis kerja pengiraan. Dan anda boleh bayangkan bahawa dengan menggantikan beberapa jenis lain yang menarik kerja pengiraan. Katakan anda telah menulis sesuatu yang dikira darjah pemisahan antara dua orang atau sesuatu seperti itu. Supaya tidak melibatkan beberapa jenis pengiraan, bukan? Dan itupun, untuk berbuat yang anda masih mempunyai untuk melakukan banyak menunggu untuk mungkin anda mempunyai untuk query pangkalan data untuk melihat sehingga siapa yang berkawan dengan siapa atau sesuatu seperti itu. Jadi ada yang jenis tanggapan kerja-kerja pengiraan. Adakah ini masuk akal? Adakah sesiapa mempunyai apa-apa soalan? Oh dan saya rasa saya meletakkan pelayan chat terdapat kerana pelayan chat adalah jenis satu lagi contoh yang baik ini. Satu pelayan chat tidak mempunyai untuk melakukan pemikiran banyak. Ia hanya perlu menunggu orang ramai menghantar mesej dan kemudian apabila mereka, menghantar mereka. OK? Jadi hanya untuk menggulung lagi, Apache dan pelayan web yang sama seperti yang garpu banyak benang dan proses yang boleh jenis membazir. Jadi saya rasa soalan yang mungkin datang dari yang kita perlu mempunyai pelbagai benang dan proses? Bagaimana jika kita hanya mempunyai satu? Jadi mari kita jenis gambaran yang apa ini akan kelihatan seperti. Jadi mari kita menggunakan hanya satu thread. OK? Jadi bayangkan ini dengan satu thread. Mari kita andaikan kita tidak benar-benar melakukan yang lebih berguna - dan apabila saya mengatakan berguna, yang saya maksudkan kerja pengiraan - dalam mereka pelbagai benang sebelum ini. Jadi mari kita jenis menyatukan segala-galanya ke dalam satu thread. Jadi apa jika kita mempunyai satu thread yang seumpama itu hanya pergi sekitar dalam gelung dan sentiasa cek melakukan sesuatu baru berlaku. Sebagai contoh, sesuatu yang baru berlaku bermakna saya mendapat sesuatu kembali dari pangkalan data, atau seseorang yang dihantar saya permintaan HTTP baru. Jadi mereka adalah jenis acara yang berlaku, bukan? Kemudian apa yang boleh saya lakukan apabila mereka yang baru perkara yang berlaku adalah dalam thread yang sama pelaksanaan, thread ini tunggal pelaksanaan, yang boleh saya hubungi beberapa kod yang akan mengendalikan perkara yang tertentu. Sebagai contoh, jika saya mendapat sesuatu kembali dari pangkalan data, saya boleh berjalan saya sebahagian kecil pengiraan itu yang sebenarnya hanya menyediakan perkara untuk menghantar kembali kepada pengguna. Begitu juga yang jenis masuk akal? Tetapi apa yang benar-benar yang implikasi ini? Betul? Kerana kita telah ditulis banyak kod yang - dan saya hanya akan melompat ke hadapan dalam slaid jika itu OK. Jadi, jika anda tidak keberatan, saya hanya akan mengambil langkah ke belakang. Jadi ini jenis perkara yang dipanggil gelung acara. OK? Dan ia adalah jenis asas Idea di sebalik Node.js. Jadi apa Node.js adalah benar-benar melakukan sebagai web pelayan ada thread tunggal yang pada dasarnya akan di sekitar dalam gelung seperti manakala satu jenis di bawah hud Node.js itulah sentiasa memeriksa, adakah kita menerima sesuatu yang baru? Dan kemudian ia akan berjalan pengendali yang anda tetapkan. Tetapi satu soalan yang baik untuk ditanya ialah, bagaimana kita boleh membuat ini berlaku dengan perkara-perkara yang sedia ada? Jadi saya meletakkan baris kod C di sini bahawa pada dasarnya kelihatan seperti ia membuka memfailkan, bukan? Saya Dia hanya keluar dengan album. Jadi saya terpaksa membuka beliau fail baru. Jadi cara kod C kami untuk beroperasi - dan saya rasa sebab saya memilih fail adalah kerana ini adalah jenis setakat kerja I / O yang kita lakukan pada C dalam rasa yang ada output input. Oleh itu, kita panggil kod ini yang tidak f ini terbuka. Dan kemudian pada baris berikutnya kami program, kita kini boleh bekerja dengan f. Jadi ini akan menjadi satu contoh sesuatu itu seperti segerak atau menyekat kerana pada baris pertama ada kita menunggu sehingga kita mendapatkan fail terbuka. Jadi pada baris kedua, kita tahu bahawa kita boleh bekerja dengan f, tetapi ini bermakna bahawa yang baris kedua tidak dapat menjalankan sehingga baris pertama dilakukan. Adakah ini masuk akal? Jadi ini akan menjadi tidak baik untuk meletakkan dalam pengendali peristiwa. Dan sebab bagi yang demikian ialah jenis ini menunggu, bukan? Jadi ini akan kembali kita kembali untuk perkara yang sama. Dan sekarang kita tidak akan tidak mempunyai faedah berganda benang atau proses kerana kami mendapat satu thread di Node.js. Adakah ini masuk akal untuk semua orang? PENONTON: Tunggu. Jadi apa yang penggantian bahan tersebut? KEVIN Schmid: Oh, jadi ya. Jadi saya akan dapat gantian. OK. Jadi apa jika kita mempunyai sesuatu yang kelihatan seperti ini? Jadi apa jika sekarang saya disunting f membuka sedikit? Jadi, saya lulus dalam yang sama dua hujah seperti sebelum ini. Saya masih suka lagu baru bahawa dia datang dengan. Tetapi saya lulus satu perkara yang ketiga yang adalah berubah-ubah ini dikenali sebagai kod. Tetapi apa yang sebenarnya kod dalam konteks ini? Adakah ia seperti C pembolehubah biasa? Fungsi Ia, betul? Dan yang mungkin sedikit pelik kerana Saya sebenarnya seperti sekarang lulus berfungsi ke dalam fungsi yang lain. Jadi pasangan perkara untuk diambil perhatian tentang perkara ini. Satu, saya tidak benar-benar memanggil fungsi kod. Jadi anda tidak melihat kod dengan paren kiri, paren betul. Saya hanya lulus dalam kod. Dan dalam C, apa ini akan benar-benar melakukan adalah memberi saya penunjuk dengan sebenar kod, dan maka ini boleh menjalankannya. Tetapi hanya berfikir tentang ia sebagai anda lulus kod untuk menjalankan apabila fail yang dibuka. Tetapi apa yang ini bermakna bahawa kini sepanjang program saya yang boleh melakukannya barangan lain, boleh terus melakukan lain barangan manakala kita, tidak benar-benar menunggu, tetapi hanya perlu di belakang kepala kita bahawa apabila fail terbuka, larian yang kod di bahagian atas. Adakah ini masuk akal? Dan sekarang idea di sebalik Node.js ialah kod dalam barangan do dengan f sebahagian harus cukup ringkas dan mudah dan terus-terang dan tidak benar-benar menjadi sangat computationally intensif. Ia mungkin perlu membuka fail lain, tetapi yang juga harus cukup cepat kerana ia hanya perlu mengatakan melakukan f lain membuka dan kemudian panggil kod lain ini. Jadi hanya menjadi benar-benar jelas, f yang membuka yang melakukan lagu Katy Perry baru dilakukan mp3, yang akan cukup banyak kembali dengan segera. Dan kemudian kita boleh terus melakukan barangan lain kerana semuanya itu sekarang f panggilan terbuka tidak akan memberitahu pada dasarnya asas f kod terbuka membuka fail ini dan apabila anda selesai membuka ini memfailkan atau apabila anda kembali, kemudian berjalan kod itu. Tetapi ia sebenarnya tidak menjalankan kod itu. Dan anda mempunyai soalan? PENONTON: Anda seolah-olah membayangkan beberapa kali bahawa menambah computationally kod intensif jenis memecahkan [Didengar] Sistem didorong. [Didengar]? KEVIN Schmid: Itu satu soalan yang besar. Jadi saya benar-benar mempunyai satu contoh bagaimana anda boleh mengintegrasikan computationally kod intensif dalam sedikit. Oleh itu, apabila kita mendapatkan kepada contoh-contoh kod, Saya akan pastikan untuk menarik yang itu. Adakah itu OK? Terima kasih. Apakah nama anda? PENONTON: Harun. KEVIN Schmid: Harun membawa sehingga yang sangat titik yang baik, yang adalah bahawa jika saya mempunyai beberapa kod intensif computationally dalam barangan yang dilakukan dengan f sebahagian, yang lain program saya tidak boleh berjalan dan tidak boleh mendengar untuk permintaan baru atau apa-apa sehingga semua barangan yang selesai. Jadi, jika saya menulis kod Nod secara umum melainkan jika kita melakukan sesuatu seperti saya akan untuk mencadangkan kemudian apabila kita melihat contoh kod, saya perlu memastikan bahawa kod saya tidak mengikat gelung acara ini. Adakah ini masuk akal? OK. Sejuk. Jadi Node.js menawarkan rangka kerja ini yang anda boleh membina acara ini didorong pelayan dengan. Jadi ia mempunyai ini jenis tak segerak bukan menyekat I / O perpustakaan, manakala perpustakaan C standard yang kita telah bekerja dengan, seperti jika anda hanya menggunakan mereka dengan cara yang sama bahawa kita telah telah menggunakan mereka dengan f membuka dan barangan, mereka menyekat kerana anda sebenarnya perlu menunggu fail untuk membuka. Tetapi Node.js memberikan anda itu dan ia pada dasarnya berkait dengan V8 Google JavaScript enjin yang adalah sebab bahawa Chrome adalah begitu puasa di pemprosesan JavaScript kerana ia mempunyai enjin V8 ini. Jadi saya tahu bahawa bunyi seperti salah satu daripada orang-orang WWDC pemaju persidangan perkara di mana mereka hanya membuang sekumpulan daripada perkara bilangan surat untuk pemproses dan mengatakan ini adalah begitu sejuk. Tetapi ia adalah sejuk yang mereka lakukan ini kerana JavaScript - atau mungkin jika anda tidak biasa dengan JavaScript lagi kerana kami tidak mempunyai kuliah di atasnya - tetapi JavaScript adalah ditafsirkan bahasa. Dan ini adalah satu titik penting juga. Jadi adalah penting untuk web kami pelayan untuk menjadi cepat, bukan? Dan jika kita hanya berjalan JavaScript kod yang telah ditafsirkan dengan hanya mana-mana jurubahasa lama ia mungkin perlahan. Jadi manfaat daripada mempunyai Nod ini jurubahasa V8 super cepat. Dan saya tidak tahu jika mereka menamakannya kerana tamparan V8 di dahi perkara, tetapi OK. Jadi saya telah menyediakan beberapa contoh di URL ini. Selepas seminar itu, saya jenis akan bercakap tentang bagaimana anda boleh mendapatkan set Nod sehingga, tetapi untuk sekarang, saya hanya jenis mahu untuk berjalan melalui beberapa contoh kod. Jadi jika anda mahu mengikut bersama-sama, semua kod sumber boleh didapati di sana. OK? Jadi saya akan meninggalkan URL ini untuk sedikit. Dan kemudian saya hanya akan menukar ke dalam terminal. Adakah semua orang yang baik dengan URL ini? Jadi saya akan beralih ke terminal saya di sini. Jadi inilah kod yang Saya ada untuk hari ini. Mengapa tidak kita mulakan dengan simpler.js memfailkan? Perkara yang lain adalah bahawa semua ini kod akan ditulis dalam JavaScript yang anda mungkin atau mungkin tidak biasa dengan. Saya rasa beberapa perkara adalah bahawa banyak kod JavaScript adalah jenis sintaks dan struktur hampir sama dengan C, jadi anda boleh jenis mengambilnya sebagai anda pergi bersama-sama. Saya cuba untuk menulis banyak daripada kod bermula untuk ini dengan cara itulah serupa dengan C supaya ia sedikit lebih senang dibaca. Tetapi seperti yang kita maju, saya akan menunjukkan beberapa tambahan ciri-ciri JavaScript yang adalah jenis sejuk. Tetapi mari kita lihat program sampel ini. Saya rasa segala-galanya memotong di sana. Saya hanya akan menetapkan sebenar yang cepat jika itu OK atau tidak. Saya tidak tahu apa ini akan lakukan. Adakah itu sedikit lebih baik? Bolehkah anda melihat var dan barangan? OK. Jadi baris pertama adalah seperti JavaScript versi pembolehubah pengisytiharan. Jadi untuk menyerlahkan apa yang akan ini kelihatan seperti dalam C. Jadi ini adalah sama seperti saya berkata indeks sama tiga atau sesuatu seperti itu. Jadi saya tidak menyatakan jenis. JavaScript tidak mempunyai jenis, tetapi ia sangat dinamik ditaip dalam alam semula jadi, jadi tidak memberikan apa-apa jenis di atasnya. Jadi ia hanya mempunyai var. Itu seperti berubah-ubah. OK? Dan saya menyeru HTTP ubah ini. Dan di sebelah kanan saya, saya mempunyai ungkapan yang saya mahu dimasukkan ke dalam HTTP. Dan ini mengatakan memerlukan HTTP. Jadi ini adalah jenis yang sama untuk memasukkan. Ia sedikit lebih seperti berkuasa daripada termasuk dalam erti kata yang termasuk hanya akan copy dan paste header memfailkan untuk prototaip fungsi atau apa sahaja dengan definisi jenis. Tetapi memerlukan sebenarnya akan untuk membawa kita kod. Jadi, anda boleh menganggapnya sebagai mengimport beberapa kod. Jadi di suatu tempat di modul Node.js yang sistem atau apa sahaja, mereka mempunyai semua ini Kod pelayan HTTP jadi saya hanya semasa mengambil ia untuk saya sendiri kegunaan peribadi dalam program ini. OK? Jadi maka saya mempunyai fungsi ini yang saya tulis. Dan notis saya tidak perlu menentukan Jenis pulangan atau jenis yang hujah lagi. Jadi jenis longgar ditaip dalam bahawa jenis akal. Dua hujah bahawa ia mengambil dalam, permintaan dan tindak balas. Jadi, itu konsep jenis seperti biasa dari gambar yang kita mempunyai pada skrin sebelum ini kerana kita akan mendapat permintaan ini yang kita mempunyai daripada pengguna. Dan kemudian kita mempunyai tindak balas yang kita boleh menulis perkara yang perlu. Jadi baris pertama ini tidak res.writeHead 200 dan maka ini Jenis kandungan kosong teks. Jadi mari kita sekeping ini selain sedikit. Jadi mari kita hanya tertumpu kepada res.write untuk sedikit. Jadi menulis pada dasarnya, dan tulis kepala, hanya cara untuk jenis menulis perkara yang perlu sambutan. OK? Jadi menulis kepala, jika sesiapa masih ingat dari kuliah HTTP, adakah anda lelaki ingat tajuk di atas perkara HTTP? Jadi mengapa tidak saya hanya demo header cepat sebenar. Yang akan membantu? Atau perlu kita hanya jenis - OK. Pasti. Oleh itu, apabila pelayar anda pergi ke google.com atau sesuatu seperti itu, ada sebenarnya sedikit lebih - ini adalah seperti rahsia - ada seperti maklumat lebih sedikit yang datang melalui paip daripada hanya carian sedikit dan segala-galanya. Jadi untuk menunjukkan kepada anda ini, saya akan untuk menggunakan program yang dipanggil Curl. OK? Jadi ini adalah sesuatu yang anda boleh dijalankan pada baris arahan Mac OSX anda atau di perkakas atau apa sahaja. Dan jadi jika saya Curl HTTP google.com, Saya akan melihat HTML. Dan ini adalah, dalam keadilan, hanya HTML yang jenis memberitahu anda untuk mengubah hala ke www jika pelayar anda tidak secara automatik mengendalikan arah semula. Jadi ini adalah hanya HTML, tetapi saya akan untuk menambah Curl sempang ini saya henti. OK? Dan ini akan menunjukkan kepada saya pengepala. Jadi ini adalah juga maklumat yang datang melalui apabila saya mendapat tindak balas ini. OK? Jadi di bahagian atas, yang anda lihat ini HTTP 301 bergerak secara kekal. Dan ini adalah jenis penting kerana ini merujuk kepada kod status. Jadi di sini adalah 301 kod status, yang pada dasarnya hanya integer yang memberitahu penyemak imbas atau sesiapa yang membaca ini, jika anda berpura-pura bahawa anda pelayar dan yang anda lihat ini, pada dasarnya sekarang jika anda melihat penggunaan di itu dan anda melihat 301, anda tahu saya mempunyai melakukan sesuatu yang istimewa berdasarkan 301, atau sesuatu yang istimewa berlaku berdasarkan 301. Jadi ia berkata berpindah secara kekal. Dan kemudian, pada dasarnya, kita mempunyai sekumpulan pasangan nilai utama. Oleh itu, kita mendapatkan lokasi adalah www.google.com. Dan kemudian jenis semua ini barangan lain, tetapi pada asasnya, apa yang lokasi yang kata adalah lokasi baru adalah di www.google.com. Jadi sekarang jika anda pergi ke google.com, anda akan semacam melihat jenis pelayar sekelip untuk sesaat dan kemudian mengarahkan anda segera kembali ke www.google.com. Jadi jawapan boleh mengandungi header ini. Dan beberapa perkara yang menunjukkan. Jadi katakan kita sebenarnya berjaya dalam melawat laman web. Jadi biarlah saya pergi ke - apa yang laman web yang baik? Saya tidak baik pada pemikiran yang baik laman web di tempat kejadian. PENONTON: Wikipedia. KEVIN Schmid: OK. Mari kita buat Wikipedia. Jadi di sini saya telah berpindah. Oh tunggu. Adakah saya? Ya, saya. OK. Jadi saya kena www. Jadi saya akan lakukan www. Dan seperti yang anda lihat, di sini semua HTML bahawa pelayar akan memproses untuk Wikipedia. Tetapi jika saya terus menatal ke atas di sini, apa yang saya akan melihat di bahagian atas - wow, ada banyak HTML di Wikipedia - tetapi apa yang saya lihat di bahagian atas di sini ialah kod status 200 ini sebagai bertentangan dengan 301 yang saya lihat sebelum ini. Dan perhatikan ianya bagus yang OK mesra sebelahnya. Jadi ini adalah seperti kod status yang baik. Adakah ini 200 bilangan kelihatan biasa? Ya kerana apabila saya simpler.js, Saya menulis 200 di sana. Jadi yang yang pada dasarnya mengatakan memberitahu penyemak imbas atau sesiapa yang cuba pergi ke ini bahawa mereka berjaya. Atau yang jenis kita seperti berjaya juga. Dan ada jenis ini sintaks khas dalam Javascript untuk mengisytiharkan peta kekunci ini seperti jenis kandungan dan nilai-nilai seperti biasa teks. Jadi jika anda melihat maklum balas yang kami pulang dari Wikipedia sebelum ini, - Saya akan cuba untuk menatal sehingga sedikit lebih cepat - anda mempunyai kekunci ini seperti pelayan dan nilai Apache. Jadi, anda telah mendapat kunci dan nilai-nilai. Dan anda boleh menentukan ini dalam Nod apa untuk menghantar kembali. Jadi ini adalah sebenarnya jenis, dalam beberapa cara, dan dalam beberapa cara ia bukan benar-benar, tetapi ia tahap yang sedikit lebih rendah daripada kod PHP yang anda mungkin menulis untuk P ditetapkan tujuh kerana PHP dan Apache jenis menjaga beberapa perkara-perkara ini untuk anda. Dalam PHP, anda boleh mengatasi lalai tingkah laku dengan menulis tajuk anda sendiri. Tetapi bagi maksud ini, kita akan mendapat untuk menulis tajuk kita sendiri. Begitu juga garis yang masuk akal untuk semua orang, yang garisan kepala tulis? OK. Awesome. Jadi maka apa yang saya lakukan adalah saya mengakhiri sambutan dengan mengatakan hello dunia. OK. Tetapi itu hanya satu majlis dipanggil permintaan pengendali. Jadi sekarang saya sebenarnya perlu jenis melakukan sesuatu dengan fungsi ini, bukan? Jadi di sini apa yang saya lakukan adalah ada ini garis yang tidak setaraf pelayan var HTTP.create pelayan, dan kemudian saya lulus dalam pengendali permintaan itu. Jadi ini adalah jenis Nod yang cara mewujudkan pelayan. Dan notis bahawa saya lulus dalam pengendali permintaan itu. Jadi ini memberitahu createServer yang fungsi yang saya mahu anda untuk membuat saya pelayan, dan apabila pelayan yang menerima jawapan, saya memerlukan anda untuk memanggil ini meminta fungsi pengendali. OK? Jadi garis yang cukup banyak selesai segera. Jadi garis pelayan var dilakukan dengan betul selepas anda melakukannya cukup banyak. Maksud saya, ia perlu mewujudkan beberapa dalaman negeri untuk mengetahui bahawa anda perlu memanggil fungsi permintaan pengendali, tetapi ia tidak akan duduk di sana dan katakan mempunyai pengguna yang dihantar saya suatu permintaan lagi? Telah pengguna menghantar saya permintaan lagi? Jadi ia tidak menghalang. OK? Jadi apa ini akan lakukan adalah pada dasarnya kini menyimpan penunjuk kepada kod ini, ini fungsi pengendali permintaan, dan kemudian akan menjalankan kod yang apabila seseorang membuat permintaan. Dan kemudian kita melakukan server.listen. Yang 1337 ada cantik sewenang-wenangnya. Saya tidak mempunyai sebab tertentu untuk memilih nombor itu. Ia adalah betul-betul rambang. Tetapi itu hanya menyatakan pelabuhan. Jadi pelayan web yang paling anda akan melihat bahawa mereka menggunakan port 80 kerana itulah jenis daripada seperti konvensyen itu. Jadi, jika saya pergi ke sesuatu seperti, Saya tidak tahu, Wikipedia.org, dan saya meletakkan kolon 8 - oh wow, anda tidak boleh melihat bahawa. Saya minta maaf. Tetapi jika saya lakukan Wikipedia - Saya akan nyatakan di sini hanya supaya ia jelas kamera. Tetapi jika saya mengambil ini ke dalam penyemak imbas dengan usus 80, yang menentukan pergi ke Wikipedia.org di pelabuhan 80. Jadi ia seperti bagaimana Amerika Syarikat mempunyai pelbagai pelabuhan seperti di mana anda boleh menghantar perkara yang perlu jenis. Jadi ia seperti pergi ke khusus ini meletakkan pada pelayan ini. OK. Jadi saya hanya memilih 1337. Ada pelbagai jenis nombor yang anda boleh memilih. Yang tidak benar-benar istimewa. Tetapi apa yang saya akan lakukan sekarang adalah saya akan menjalankan Nod. Biar saya sebenarnya masuk bahawa pasangan barisan ke bawah supaya anda boleh melihatnya. Saya akan melakukan Nod, dan saya akan berjalan simpler.js. Dan kita akan bercakap tentang bagaimana untuk mendapatkan Nod ditubuhkan pada sedikit. Tetapi kini ia hanya berjalan pelayan. Jadi satu perkara yang kita boleh cuba yang tidak boleh menjadi yang menarik adalah kita boleh sebenarnya cuba untuk mengaksesnya dalam Curl. Jadi yang boleh saya lakukan Curl, dan saya mesin adalah tuan rumah tempatan. Anda juga akan melihat ini ditulis seperti ini kadang-kadang. Tuan rumah tempatan dan 127.0.0.1 adalah jenis daripada seperti komputer rumah anda. Jadi ia seperti bercakap dengan komputer anda sendiri. OK. Dan kemudian saya boleh mengatakan 1337. Jadi jika saya menjalankan baris ini kod, ia berkata hello dunia. Dan jika saya mahu melihat bahan yang mempunyai jenis kandungan teks biasa atau apa sahaja, saya juga boleh meletakkan ini di sini. Dan melihat bahawa ia mengatakan OK. Dan saya mempunyai dataran teks. Dan kemudian ada jenis semua ini selain barangan yang Nod akan menambah dalam ada untuk saya. Itu bukan super penting. Maksud saya, terdapat beberapa jenis teknikal aspek pada itu adalah jenis yang sejuk untuk bercakap tentang, tetapi hanya untuk menunjukkan anda, saya juga mempunyai kuasa untuk menukar ini sekitar. Jadi saya hanya boleh menambah sekumpulan barangan seperti itu. Dan maka sekarang, jika saya melihat dalam saya output, ia akan menjadi itu. Jadi tajuk ini bermakna perkara-perkara tertentu untuk pelayar dan perkara-perkara seperti itu. Dan header pada dasarnya boleh memberitahu pelayar bagaimana untuk bertindak balas terhadap sesuatu. Jika anda pernah mendengar cookies sebelum ini, atau jika anda pernah marah oleh laman web menetapkan cookies, atau dihidupkan blok cookie atau sesuatu seperti itu. Anda sebenarnya boleh menetapkan cookies dalam pengepala ini. Jadi mereka memberitahu pelayar bagaimana untuk tingkah laku dalam beberapa kes. OK. Sehingga adalah simpler.js. Adakah sesiapa mempunyai apa-apa soalan pada fail kod sumber? OK. Sejuk. Jadi mari kita membuang r itu dan melihat simple.js. Jadi ini adalah cukup banyak program sama. Saya hanya menulisnya sedikit berbeza kerana saya mahu untuk menyusun daripada kemuncak beberapa ciri-ciri JavaScript. Jadi melihat bahawa pengendali permintaan itu fungsi telah benar-benar hilang. Oh Ya, adakah anda mempunyai satu soalan? PENONTON: Ya, hujah-hujah yang diluluskan dengan fungsi, apakah mereka? KEVIN Schmid: Maka itulah JavaScript objek. Dalam dokumentasi Node.js, ia pada dasarnya mengatakan apa kaedah yang ada pada mereka. Kami hanya kebetulan mempunyai akses kepada kaedah ini dipanggil kepala menulis dan akhir dan barangan seperti itu. Tetapi ada sejumlah lebih kaedah. Dan sebagai contoh, seperti salah seorang daripada mereka khusus kepada rec, anda boleh melakukan sesuatu seperti rec.method yang akan memberitahu anda sama ada HTTP yang mendapatkan atau Permintaan HTTP dan pos perkara seperti itu. Jadi ada semua jenis yang berbeza hartanah, tetapi ia kedua-dua JavaScript objek, dan mereka hanya perlu fungsi dilampirkan kepada mereka bahawa anda boleh menulis perkara yang perlu. OK? Jadi melihat bahawa permintaan pengendali sama sekali hilang. Tetapi kod yang saya ada dalam permintaan pengendali masih ada. Saya masih mempunyai res.writeHead ini dan saya masih mempunyai res.end ini. Dan apa yang ini adalah satu contoh di JavaScript adalah idea ini bagi fungsi tanpa nama. dan tanpa nama adalah seperti nama yang sesuai untuk itu kerana ia benar-benar tidak ada nama. Tidak ada permintaan fungsi pengendali di sana. Tidak mempunyai nama, tetapi ia masih adalah mengambil pertengkaran. Jadi saya masih mendapat rec dan res. Dan saya masih mempunyai kod. Ini adalah betul-betul halus JavaScript kod. Jadi saya boleh mengisytiharkan fungsi tanpa dengan jelas memberikan nama. Ia sedikit mengelirukan pada mulanya. Terdapat beberapa perkara yang berguna seperti yang anda boleh lakukan dengan fungsi-fungsi tanpa nama. Adakah sesiapa mempunyai apa-apa soalan mengenai perkara ini, atau adakah ia hanya untuk OK, buat masa ini, semacam hanya menerima bahawa ia akan melakukan perkara yang sama? Yep? PENONTON: Adakah fungsi pertama kelas JavaScript? KEVIN Schmid: Mereka adalah pertama kelas dalam JavaScript. Dan hanya tahu bahawa konsep-konsep ini daripada lulus dalam fungsi tanpa nama seperti ini terpakai bagi JavaScript anda boleh menulis dalam projek akhir anda untuk pelayar web juga. Jadi, sebagai contoh, dalam JavaScript dalam penyemak imbas anda, ia juga agak acara didorong dalam erti kata bahawa apa yang anda akan ada ialah apabila pengguna klik ini butang, saya mahu anda untuk menjalankan kod ini. Jadi ia jenis yang sama idea-idea sebelah pelanggan apabila satu klik tetikus atau mereka tetikus atas beberapa imej pada anda halaman web, menjalankan kod ini. Yang boleh memohon kepada pelayan. Jadi itu jenis seperti yang menarik sebab mengapa JavaScript adalah benar-benar orang yang sesuai atau beberapa fikir ia adalah satu bahasa yang sesuai untuk jenis ini server pemandu acara kerana anda mempunyai fungsi-fungsi tanpa nama. Anda mempunyai idea keseluruhan kod ini tak segerak. OK. Sesiapa mempunyai apa-apa soalan? OK. Sehingga adalah simple.js. Jadi mari kita lihat satu lagi atau pasangan yang lebih. Jadi ini adalah sleep.js. Jadi sesiapa biasa dengan C fungsi tidur? Dari mungkin salah satu kuliah lebih awal atau sesuatu seperti itu? Jadi, pada asasnya anda boleh lepaskan pada saya fikir beberapa saat atau jika anda menggunakan U tidur beberapa milisaat atau nanosaat. Dan pada dasarnya program ini hanya akan berhenti berjalan untuk jumlah yang masa. Betul? Dan kemudian ia akan bangun akhirnya dan maka ia hanya akan terus menjalankan program ini. Jadi pelayan ini semacam memberi gambaran tidur. Jadi melihat bahawa kita mempunyai yang sama res.writeHead 200 dengan tajuknya sebelum ini, tetapi kemudian kita memanggil ini fungsi dipanggil set tamat masa. Tetapkan tamat masa juga boleh didapati dalam pelayar web anda Google Chrome atau Safari atau apa sahaja. Dan pada dasarnya apa yang ia lakukan di sini adalah ia mengambil fungsi. Notis, sekali lagi, ia adalah satu fungsi tanpa nama. Jadi itu jenis sejuk kerana kita menggunakan fungsi tanpa nama dalam satu fungsi tanpa nama yang boleh menjadi sedikit pelik. Tetapi ia mengambil fungsi itu, yang merupakan pada dasarnya mengatakan - dan cara ini kerja-kerja adalah dalam 5,000 milisaat, saya mahu anda untuk melaksanakan fungsi yang hanya berakhir sambutan dan menulis hey. Jadi ini memberikan gambaran seperti tidur, tetapi cara ini sebenarnya kerja-kerja kami akan menjalankan melalui baris ini dengan cepat. Kami hanya menulis sesuatu. Dan maka kita juga akan dijalankan melalui baris ini dengan cepat. Jadi, kita tidak benar-benar akan menunggu lima saat. Kami hanya akan menjalankan kod ini serta-merta. Dan kemudian ada, sekali lagi, ini sedikit gelung peristiwa yang kini mempunyai perkara ini daftar yang pada dasarnya hanya sentiasa akan di sekitar dalam bulatan dan melihat jam dalam satu benang dan kata, mempunyai lima saat berlalu lagi? Dan kemudian apabila ia melihat bahawa kedua tangan telah bergerak seperti lima saat atau apa sahaja, maka ia bangun dan berkata, oh, apa yang saya perlu lakukan? Oh saya perlu menjalankan kod ini. Dan kemudian ia akan menjalankan res.end hey. Jadi sekali lagi, kita tidak pernah menunggu di sini. Jadi ia tidak bahawa kod ini di dalam fungsi ini akan mengambil masa lima saat berjalan. Kod ini akan berjalan cukup banyak merta, sekurang-kurangnya berbanding dengan lima saat yang kita bercakap tentang awal sebelum ini. Jadi untuk menunjukkan ini dalam tindakan, Yang boleh saya lakukan Node.sleep.js. Dan tidak saya merosakkan sesuatu? Mungkin. Maaf. Mari kita lihat apa yang boleh kita lakukan untuk menetapkan ini. OK. Jadi pasti menggunakan Node.js. Saya hanya bergurau. OK. Hanya satu sec. OK. Saya tahu apa yang ada. Jadi isunya ialah dalam tab saya yang lain di sini, saya telah berjalan Nod sudah di alamat yang sama, 1337. Jadi ralat yang ini melemparkan, jika kita melihat di ia sebenar dengan teliti, adalah alamat di digunakan, EADDRINUSE. Jadi saya telah menggunakan 1337 di sini. Jadi jika saya menutup ini di luar, dan kemudian saya kini cuba untuk menjalankan ini, mudah-mudahan, segala-galanya akan halus. OK. Jadi, anda hanya boleh mempunyai satu jenis mendengar pada port yang sekaligus. Satu lagi penyelesaian akan menjadi bagi saya hanya mengedit program itu dan membuat ia menjadi seperti 1338 atau sesuatu seperti itu. Tetapi sekarang tidur sedang berjalan. Jadi mari kita sebenarnya mencubanya dalam pelayar masa ini kerana ia adalah satu sedikit tanpa kegirangan melihat ia di terminal. Jadi, saya hanya akan pergi untuk yang 127 alamat sekali lagi pada 1337. Dan jika anda boleh melihatnya - Saya tidak tahu jika anda boleh - tetapi saya pelayar mengambil yang sangat, sangat panjang masa untuk memuatkan atau seperti lima saat. Dan kemudian selepas itu, ia akhirnya berakhir sambutan. Dan anda tidak boleh melihat ia kerana perkara yang dipindah sedikit, tetapi jika saya membuat ini lebih kecil sedikit, anda dapat melihat ia berkata hey. Jadi saya hey, tetapi selepas lima saat. Dan ia mungkin menjadi lebih bersih sedikit untuk melihat di sini di terminal, jadi saya akan melakukan - mari kita buat di sini - mari kita buat Curl alamat itu lagi dengan 1337. Dan saya hanya jenis perlu duduk di sini selama lima saat. Tetapi melihat bahawa pelayan boleh menerima tindak balas baru. Jadi ia mencetak hey. Dan untuk demo ini, pada dasarnya apa yang Yang boleh saya lakukan dalam tab yang lain ini - jadi mari kita mengatakan saya melakukan ini dalam tab yang lain, Saya akan melakukan Curl dan yang sama perkara lagi. Dan saya akan cuba untuk menendang ini lelaki mati pada masa yang sama. Jadi saya akan melakukan ini, dan saya akan berlumba di sini dan saya akan melakukannya sekali lagi. Dan mari kita membuat ia supaya anda boleh melihat kedua-dua mereka. Bahawa satu dicetak hey dan satu yang dicetak hey semua jalan di - mari kita buat eksperimen itu lagi. Sebenarnya, mari kita menggunakan ini menipu, jika itu OK. Jadi saya akan menggunakan perkara shell yang membolehkan saya pada dasarnya menjalankan dua salinan program ini secara selari. Jadi ia akan menjalankan program yang pertama dan program kedua secara selari. Jadi sekarang jika saya tekan Enter, ia akan untuk membuat permintaan yang cukup banyak merta pada masa yang sama. Jadi mari kita memberikan ini pukulan. Jadi sekarang menyedarinya kata dua proses. Dan jika anda ingin tahu, bahawa 27,000 nombor adalah pada dasarnya ID proses. Dan kemudian notis, yang dicetak hey pada masa yang sama. Ia bukan seperti kami terpaksa menunggu lima saat untuk satu dan kemudian selepas itu, lima saat kemudian mendapatkan kedua. Jadi yang yang jenis, dalam beberapa cara, ia tidak benar-benar bukti, tetapi ia bukti intuitif yang ia bukan hanya seperti menunggu lima saat dan menyekat keseluruhan urutan. OK sejuk. Jadi Harun bertanya soalan sebelum ini bahawa adalah, akan apa yang jika kita melakukan sesuatu - Yep? PENONTON: Tunggu. Bagaimana yang berbeza daripada penampan printf, walaupun? Tidak secara automatik berbuat demikian? Mengapa kita perlu bimbang tentang perkara ini? KEVIN Schmid: Oh, boleh anda mengatakan satu masa yang lebih? PENONTON: Tidak suka penampan printf melakukan perkara yang sama? KEVIN Schmid: Penampan printf? PENONTON: Yeah. OK. Tidak di salah satu kuiz mereka bercakap tentang bagaimana jika anda betul printf sesuatu dan kemudian telah ia berhenti satu kedua, dan kemudian anda mempunyai gelung sepuluh kali, ia akan menunggu sepuluh saat dan maka printf semua bersama-sama? KEVIN Schmid: Oh, OK. PENONTON: Adakah ia melakukan perkara yang sama perkara maka dalam kes ini? KEVIN Schmid: Jadi soalan itu pada dasarnya dalam satu bekas kuiz atau sesuatu, terdapat soalan yang pada dasarnya jika anda mengatakan cetak f 10 perkara pada satu masa dan kemudian tidur seperti dalam proses mencetak mereka keluar, pada akhir atas sebab tertentu, ia akan hanya membuang mereka semua keluar pada skrin. Jadi ada adalah jenis dua yang berbeza konsep di sini. Jadi saya rasa satu perkara adalah bahawa, dalam ini kes, kita sedang berhadapan dengan dua yang berbeza jenis orang bertanya pelayan untuk perkara-perkara pada masa yang sama. Dan sebab-sebab yang jenis printf yang menunggu seperti itu dan tapak semua keluar sekaligus lebih berkaitan dengan bagaimana jenis printf daripada - jadi cara printf yang sebenarnya dilaksanakan adalah pada dasarnya telah bercakap dengan sistem operasi untuk menulis yang barangan untuk konsol. Supaya ia tidak mahu melakukan semua itu barangan serta-merta apabila anda mengatakan printf beberapa tali kerana yang boleh mendapatkan mahal jika ia lakukan setiap kali. Jadi jika anda printf hey, program anda mungkin tidak benar-benar bahawa mencetak dengan segera kepada konsol. Ia mungkin berkata, OK, saya menulisnya. Dan kemudian jenis menunggu anda untuk memberi ia lebih sedikit sebelum benar-benar menulisnya ke konsol. Jadi alasan bahawa itu benar - dan ia adalah jenis yang tidak berkaitan untuk tidur - adalah bahawa tidur itu semacam hanya disuntik di sana untuk menunjukkan hakikat bahawa ia tidak menulis ia serentak. Tetapi sebab yang hanya Prestasi supaya anda tidak perlu membuat yang banyak kenalan sistem operasi. Tetapi di sini, apa yang kita benar-benar cuba untuk melakukan dengan perkara tidur ini hanya menunjukkan bahawa apabila kita mempunyai dua orang melawat laman web ini, ia tidak akan meletakkan mereka dalam talian di mana ia akan mengatakan Saya mempunyai untuk membantu anda, dan kemudian apabila saya betul-betul selesai membantu anda selepas ini lima saat, kemudian saya akan bergerak ke orang yang datang. Jadi permintaan orang yang pertama tidak mengikat yang gelung acara jika yang masuk akal. Tetapi di sini ialah sebenarnya contoh sesuatu yang akan mengikat sehingga gelung acara tersebut. Jadi di sini adalah satu fungsi yang dahsyat untuk mengira Fibonacci ke-n. Ia betul-betul cara yang lebih teruk anda boleh mengira bilangan Fibonacci ke-n. Dan ini sebenarnya hanya untuk mengakui di mana ini datang dari, ada sebenarnya - Maksud saya, anda boleh cuba untuk pergi mencari - tetapi ada seperti blog sangat panjang menyiarkan bahawa seseorang menulis. Ia seperti salah satu perkara Reddit. Tetapi seseorang mengkritik Node.js, dan mereka menggunakan ini sebagai contoh. Jadi saya jenis mahu hanya menunjukkan dua perspektif yang berbeza hanya untuk mendapatkan pemahaman umum konsep di belakang kedua-dua perkara. Tetapi ini dipilih sebagai hanya dahsyat, computationally teruk tidak cekap cara intensif untuk mengira Nombor Fibonacci ke-n. Jadi hanya sebagai nota sampingan, mengapa ia dahsyat seperti dalam satu cara? Yep? PENONTON: Katakanlah anda memulakan dengan 1,000. 1,000 berpecah ke dalam 999 dan 998. Setiap satu daripada ini terpisah kepada dua perkara. Setiap satu daripada ini terpisah kepada dua perkara. KEVIN Schmid: Betul. PENONTON: Semua jalan ke bawah. KEVIN Schmid: Tepat sekali. Jadi hanya mengulangi untuk kamera, jika saya memanggil FIB pada seperti 1,000 atau sesuatu seperti itu, ia jelas tidak kurang daripada atau sama dengan satu jadi saya akan pergi dengan kes lain ini, dan kemudian saya akan untuk memanggil FIB 999 ditambah FIB 998. Dan kemudian cukup banyak semua itu kerja yang FIB 999 tidak adalah jenis di peringkat ini. Jika anda pergi ke bawah, ia lebih berlebihan daripada itu, tetapi jika anda hanya berfikir bikinan pengiraan 998 mendapat kami cukup dekat dengan FIB 999. Oleh itu, kita benar-benar harus menjadi sedikit lebih bijak tentang bagaimana kita jenis menggunakan semula ini, tetapi kita tidak menggunakan semula perkara-perkara ini sama sekali. Jadi, anda boleh bayangkan ini gergasi, pokok gergasi itu hanya dahsyat. Tetapi bagaimanapun, OK. Sehingga adalah bikinan. Ia hanya mengambil masa untuk berjalan. Yep? PENONTON: [didengar]. KEVIN Schmid: Oh, boleh anda mengulangi soalan? PENONTON: [didengar]. KEVIN Schmid: Oh jadi ini adalah hanya kod yang akan menjadi jenis di sebelah pelayan. Jadi ini tidak akan didapati dalam penyemak imbas atau apa-apa. Ia pada dasarnya apa yang kita ada ialah apabila pengguna di sini cukup banyak membuat permintaan mereka sekali lagi, apabila kita jenis membuat permintaan, kita akan memanggil fungsi ini di sebelah pelayan. Dan kemudian kita akan mendapat hasil yang kembali daripada memanggil fungsi itu. Dan kemudian kita hanya akan mencetak kepada pengguna. Sehingga pengguna tidak benar-benar menangani dengan fungsi ini terlalu banyak. Adalah bahawa soalan itu? Adakah ini masuk akal? OK. Sejuk. Jadi sekali lagi, kita res.writeHead ini keseluruhan perkara di mana kita mencetak pengepala. Dan kemudian saya mengakhiri sambutan dengan melakukan bilangan ajaib adalah bikinan 45. Jadi mari kita hanya menjalankan pelayan ini. Jadi, saya akan melakukan fib.js. Nod Jadi sekarang server bikinan saya berjalan. Dan kemudian di sini, saya akan untuk melakukan salah satu daripada ini. OK? Jadi saya hanya akan berkata, Curl. Jadi ia akan mengambil sedikit masa tetapi harap-harap tidak lama lagi ia akan menyelesaikan dan ia akan mencetak 45 yang Fibonacci nombor. PENONTON: [didengar]. KEVIN Schmid: Ia harus mendapatkan dilakukan cantik tidak lama lagi. Jadi ia perlu mengambil masa lima hingga enam saat. Saya tidak tahu itu hanya V8 menjadi super cepat, tetapi dalam mana-mana, ini adalah satu contoh yang sangat singkat dan sengaja kaku daripada bukan remeh pengiraan. Jadi selepas beberapa ketika, ia mendapatkan ini. Tetapi sekarang, bagaimana jika saya berbuat demikian jenis sama eksperimen seperti sebelum ini di mana saya membuat dua permintaan pada masa yang sama? Jadi di sini saya akan a Curl pada alamat itu, dan saya akan untuk melakukan satu lagi Curl. Dan ingat, apabila kita melakukan ini untuk tidur pelayan, apabila kita pada dasarnya telah ia selepas lima saat, mereka cukup banyak kedua-dua datang kembali hak pada masa yang sama. Jadi ia tidak terutamanya diikat. Tetapi mari kita cuba sekarang. OK, jadi kita mendapat dua proses kerajaan. Ingat mereka adalah ID proses. Ini akan menjadi sedikit janggal sementara kami gerai. Jadi mari kita hanya tinggal di sini dan menunggu. Jadi salah seorang daripada mereka harus datang kembali selepas seperti - OK, jadi kita kembali. Tetapi mengapa tidak yang kedua satu datang kembali sahaja lagi? Yep? PENONTON: Pelayan tidak boleh berbuat apa-apa semasa ia menghitung jumlah yang besar. KEVIN Schmid: Betul. Jadi sambutan itu hanya itu pelayan benar-benar tidak boleh berbuat apa-apa manakala ia menghitung bilangan Fibonacci. Jadi sekarang saya hanya mendapat dua perkara saya kembali. Tetapi saya rasa hanya untuk berfikir tentang kod lebih sedikit, bagaimana ia bekerja dan segala-galanya. Jadi fungsi ini di sini adalah kod yang Saya memberitahu pelayan ini untuk menjalankan apabila ia menerima suatu permintaan masuk yang baru. Jadi ia hanya akan berjalan melalui ini keseluruhan kod, dan kemudian ia akan pergi belakang untuk gelung acara tersebut dan kemudian terus memeriksa untuk acara-acara baru. Jadi, pada asasnya apa yang kita telah berlaku adalah pelayan adalah mendengar sesuatu yang baru. Orang pertama meminta apa 45 adalah. Kami menjalankan kod ini untuk mengira ia. Kod ini mengambil kira-kira lima untuk enam saat berjalan. Kemudian kami kembali ke gelung acara dan periksa permintaan baru. Jadi ini adalah satu contoh bagaimana, jika anda mempunyai perkara-perkara yang kononnya pengiraan terikat, atau menggunakan banyak pengiraan, bukan kuasa, tetapi seperti yang computationally intensif - Saya rasa satu perkara untuk mengatakan tentang ini adalah bahawa fungsi ini melakukan sama sekali, untuk sebahagian besar, cukup betul kerja yang berguna. Seluruh masa itu panggilan balik yang fungsi telah berjalan, ia agak banyak menghabiskan sebahagian besar masa hanya pengkomputeran nombor yang n Fibonacci. Tetapi kita hanya mempunyai satu thread untuk menangani. Dalam model Apache, apabila dua orang membuat permintaan itu untuk mendapatkan FIB 45, kita akan mempunyai dua benang yang berbeza. Dan kemudian kerja sistem operasi ini akan menjadi, atau tahap pengguna kod yang menguruskan benang, akan tunggu menjadi keping yang di atas CPU, atau jika anda mempunyai pelbagai CPU, mengedarkan secara merata di seluruh CPU yang supaya mereka kedua-duanya selesai secara kasar pada masa yang sama. Jadi hanya untuk menunjukkan kepada anda bagaimana kami dapat daripada - dan ini bukanlah sempurna penyelesaian, tetapi jenis bagaimana kita boleh membuat kembali ke sini dan melakukan sedikit lebih baik. Jadi apa yang saya ada di sini adalah program yang dikenali sebagai FIB C. Dan ini pada dasarnya menggunakan satu lagi modul Nod yang dikenali sebagai Modul Proses kanak-kanak. Jadi saya termasuk yang di atas jenis daripada seperti yang saya akan lakukan satu paun termasuk process.h kanak-kanak atau sesuatu. Sekarang saya mempunyai akses kepada pembolehubah CP ini yang mempunyai semua fungsi saya. Jadi sekarang apa yang saya lakukan sebagai tindak balas ini pengendali adalah saya menjalankan program ini dot slash bikinan 45. Jadi apa yang saya lakukan - dan saya hanya akan melangkah keluar dari program ini untuk sedikit - adalah saya telah menulis satu program C yang pada dasarnya mengira Nombor Fibonacci ke-n. Jadi di sini hanya satu program saya telah menulis dalam C yang mengira ini. Saya boleh menyusun, dan saya boleh menjalankan ia pada baris arahan. Dan ia akan mengira Bilangan ke-45 Fibonacci. Jadi notis ia hanya mengambil cukup banyak seperti yang lama. Saya mungkin boleh telah menggunakan sengkang 03 untuk mengoptimumkan ia atau sesuatu seperti itu, tetapi saya hanya melakukan seperti biasa tetapan compiler. Dan ia mencetak ia keluar. Tetapi sekarang, apa yang saya jenis lakukan? Oh maaf, fail yang salah. Jadi saya melakukan perkara yang sama dengan tajuknya sebelum ini. Kemudian saya melakukan cp.exec ini. Jadi apa ini akan lakukan adalah ia akan menjalankan program ini. Tetapi cara ini berfungsi ialah ia tidak akan menunggu program yang untuk selesai. Ia hanya pada dasarnya mengatakan melaksanakan program ini. Jadi, pada asasnya menaip ini ke dalam arahan jenis segera. Dan kemudian, apabila anda selesai dengan ia, jalankan fungsi ini. Jadi sekarang kita jenis mendapatkan ini Semua perkara dipulihkan seperti kita tidak menunggu. Adakah yang jenis masuk akal? Yep? PENONTON: [didengar]? KEVIN Schmid: Jadi ini akan benar-benar membuka proses baru untuk melakukannya. Jadi ini adalah sebenarnya, dalam beberapa cara, jahat, tidak super kejahatan, tetapi ia adalah penting untuk mengatakan bahawa ini adalah jenis akan kembali ke, di satu sudut, Apache model di mana kita melakukan benang dan proses bagi setiap permintaan atau proses untuk setiap permintaan. Jadi ini adalah jenis seakan- apa Apache tidak. Dalam beberapa kes, ia hanya akan menggunakan baru benang, yang adalah sedikit lebih ringan berat badan daripada proses, tetapi Apache boleh berakhir forking proses baru yang jenis apa yang kita lakukan di sini tersirat dengan melakukan dot slash bikinan 45. Dan, dalam keadaan ini, kita jenis menanggung perbelanjaan yang sama proses. Jadi ini adalah hanya satu perkara yang anda boleh lakukan. Tetapi hanya untuk menunjukkan seperti ini berjalan. Dan bercakap ini hanya benar-benar bertujuan untuk menyampaikan ini jenis program-program yang cara untuk menunjukkan perspektif yang berbeza pada bagaimana untuk mereka bentuk pelayan seperti itu. Jadi ini sedang berjalan, dan kemudian sekarang jika saya lakukan ini sekali lagi, saya mendapat dua ID proses. Mari kita bercakap tentang perkara untuk menunjukkan. Jadi melihat bahawa mereka secara berperingkat. Itu sejuk. Kerana ia adalah 27.122 sebelum ini. Tetapi notis sekarang, mereka pulang pada kira-kira masa yang sama. Dan kini, satu soalan yang baik untuk bertanya tentang mengapa kes ini, kerja yang adalah ia sekarang untuk jenis membuat perkara-perkara jenis bermain adil antara satu sama lain, kedua-dua contoh dot slash bikinan 45 yang saya berlari atau Nod berlari? Yang semacam menjadikannya adil bahawa mereka kedua-dua mendapatkan jenis seimbang masa berjalan? PENONTON: [didengar]. KEVIN Schmid: Yeah. Jadi, pada asasnya, apabila saya melakukan dot slash bikinan 45 atau sesuatu seperti itu, kini ia jenis sehingga sistem operasi untuk mengendalikan runtime program-program. Dan kini ia boleh menjadualkan mereka pada CPU yang berlainan atau ia boleh menjadualkan mereka. Ia boleh potong masa satu yang CPU mendapat atau bahawa mereka mendapat untuk berjalan di satu CPU. Jadi, itu idea di sebalik itu. Adakah ini masuk akal untuk semua orang? Jadi sekarang Nod tidak benar-benar memainkan bahagian dalam membahagikan tugas-tugas ini. OK. Jadi yang hampir untuk contoh. Saya hanya mahu menunjukkan perkara satu lagi kerana banyak ini setakat ini telah tidak sama sekali super praktikal dalam beberapa kes. Saya boleh bayangkan akan pulang selepas ini bercakap dan sesuatu dan berkata seperti, juga saya jenis keluar dari ceramah yang yang Saya boleh membuat server Fibonacci bagi projek akhir saya. Jadi di sini hanya jenis satu lagi contoh yang diharapkan akan menjadi - mungkin tidak, tetapi mungkin - lebih sedikit jenis yang berkaitan dengan projek-projek akhir dan berfikir ke depan untuk perkara-perkara seperti itu. Jadi ini adalah chat.js. Jadi ini adalah jenis suka sampel beberapa kod sebelah pelayan yang anda boleh gunakan untuk menubuhkan pelayan chat kecil seperti anda mungkin telah melihat pada Facebook Chat atau apa sahaja. Jadi, saya tidak mengatakan ini adalah seperti Facebook Sembang, tetapi ini adalah jenis seperti yang baik - mungkin tidak baik, tetapi mungkin titik permulaan untuk berbual - yang baik server untuk laman web anda untuk projek akhir. Jadi mari kita lihat apa yang ia lakukan. Oleh itu, kita mendapat perkara ini khas di bahagian atas, ini var SIO sama memerlukan Socket.IO. Jadi ini adalah satu lagi perkara yang ia tidak sebenarnya datang dibundel dengan Nod tetapi anda boleh memasangnya. Ia adalah satu modul Nod. Jadi ia hanya seperti beberapa lanjutan kepada Nod. SocketIO sebenarnya benar-benar jenis sejuk. Ia merupakan satu abstraksi yang pada dasarnya apa yang ia adalah adalah ia membolehkan anda untuk mempunyai aliran komunikasi antara web yang pelayar dan pelayan web. Jadi sebahagian besar setakat ini, kami telah ini sangat cepat kedua atau dua komunikasi kedua antara web yang pelayar dan pelayan web. Jadi pada dasarnya pergi ke google.com, mendapatkan barangan, menghantar kembali, dan kemudian kita selesai. Kami tidak pernah bercakap lagi sehingga jenis pengguna dalam sesuatu yang lain. Tetapi apa Socket.IO dan sebarang yang perkara - dan SocketIO sebenarnya adalah salah satu perkara yang dibina di atas sebagai WebSocket yang jenis boleh didapati sebagai sebahagian daripada HTML5 - yang membolehkan anda untuk mempunyai ini dialog yang berterusan. Dan ini adalah sangat berguna dalam pelayan chat jenis benda kerana ia adalah jenis seperti dialog yang berterusan di beberapa cara kerana jika anda berbual dengan seseorang, anda boleh kini hanya menghantar mesej ke bawah paip, dan kemudian server boleh menghantar mesej ke bawah paip kepada orang lain anda berbual dengan. Dan kemudian anda boleh ini bertukar-tukar seperti itu. Jadi itu jenis apa SocketIO adalah baik untuk. Alasan bahawa SocketIO menggunakan WebSockets sebagai satu perkara adalah bahawa dalam Selain WebSockets hanya kosong lama, ia juga tidak beberapa helah untuk dasarnya menjadikannya pelayar serasi. Jadi pelayar seperti Internet Explorer malangnya tidak menyokong WebSockets keluar dari kotak. Jadi ia menggunakan beberapa jenis lain sejuk kemas perkara dengan Adobe Flash untuk membolehkan anda mempunyai sokongan pelayar silang. Jadi, itu benar-benar berguna. Dan sebenarnya, saya tahu saya jenis berjalan pada masa di sini, tetapi CS50 Bincangkan, adakah anda pernah melihat sesuatu seperti, saya tidak tahu, jadi kosong dan begitu juga membalas pos ini atau sesuatu seperti itu, ciri yang? Itulah SocketIO. Oleh itu, apabila seseorang bermula menaip dalam membincangkan kotak untuk membuat jawapan atau sesuatu Pelayar anda tidak apa yang dipanggil SocketIO mengeluarkan beberapa jenis acara yang mengatakan seseorang adalah membalas pos ini. Kemudian pelayan itu berkata, OK, apa yang saya perlu lakukan? Sekarang saya perlu memberitahu orang-orang lelaki lain yang berada di CS50 Bincangkan mencari di pos ini bahawa seseorang itu membalas. Jadi itu jenis apa SocketIO adalah baik untuk, jenis ini berterusan aliran dialog. OK. Jadi apa yang saya ada di sini - dan kami hanya akan mengabaikan pelbagai sambungan yang untuk sedikit - apa yang saya lakukan ialah saya mendengar satu lagi. Jadi itu hanya cara di Socket.IO adalah berkata mari kita mendengar di pelabuhan ini. Dan kemudian saya melakukan ini pada sambungan. Jadi, itu hanya pada dasarnya Socket IO ini cara untuk mengatakan, apabila kita menerima sambungan, saya mahu anda untuk menjalankan kod ini. Dan melihat bahawa bukan mempunyai rec dan res meninggal di sana saya mempunyai Socket. Dan ini idea Socket pada dasarnya ini perkara yang anda boleh menulis kepada dan membaca dari yang mempunyai pengguna ini Mesej mungkin. Dan mesej yang anda akan menghantar boleh pergi melalui Socket itu. Adakah ini masuk akal? Jadi ia adalah perkara ini berterusan. Jadi apa yang saya lakukan ialah saya menyeru Socket.emit. Dan memancarkan mengambil cukup lebih dua hujah. Hujah pertama adalah rentetan hanya mewakili jenis perkara yang anda sedang pemancar. Jadi untuk kes ini, saya telah menggunakan ini rentetan mesej baru. Dan itu hanya pada dasarnya mengatakan bahawa jenis perkara ini, apa yang saya penghantaran, adalah satu mesej baru. Jadi, anda boleh mendengar untuk jenis tertentu seperti mesej baru atau apa sahaja dengan menggunakan dot pada. Jadi sambungan dan pengguna dihantar ke sana, jika anda melihat di mana kita panggil dot pada, mereka adalah tali lain yang mewakili jenis mesej pengguna. Jadi ia pada dasarnya anda boleh mempunyai memancarkan ini salah satu jenis mesej, dan kemudian melakukan sesuatu sebagai tindak balas kepada salah satu jenis mesej Jadi saya pemancar mesej baru ini. Kita akan mengabaikan connections.push untuk kali kedua. Tetapi saya katakan, Socket.on pengguna dihantar. Jadi sekarang ia jenis suka apabila pengguna menghantar mesej kepada saya, saya mahu anda untuk menjalankan kod ini. Dan melihat bahawa fungsi tanpa nama sedang dalam pembolehubah ini dipanggil data yang pada asasnya akan mempunyai mesej pengguna. Jenis Jadi sekarang mari kita bercakap tentang array sambungan. Jadi ini direka untuk pelanggan chat di mana pada dasarnya semua orang adalah jenis di bilik sembang sama. Jadi, pada asasnya, apa yang kita perlu memastikan sekitar adalah beberapa array yang pada dasarnya mewakili semua orang berbual di beberapa cara, jika yang masuk akal. Betul? Kerana kita perlu tahu yang orang-orang lelaki begitu kita boleh menghantar mesej mereka yang orang lain hantar kepada kami. Jadi apa kod ini tidak adalah apabila pengguna menghantar mesej - itulah jenis acara - kita akan menjalankan kod ini. Dan apa yang kita lakukan ialah kita berjalan melalui ini array yang kita telah dipanggil sambungan. Dan cukup banyak untuk setiap sambungan kecuali satu yang kita, itu apa kod ini berkata, kita menghantar yang baru mesej dengan mesej dilampirkan maklumat. Jadi, jika anda notis di sini, apa yang saya lakukan apabila pengguna benar-benar membuat yang baru sambungan saya ditambah dengan Kaedah JavaScript.push, ini adalah pada dasarnya hanya mengatakan seperti menambah Socket bahawa sebagai nilai ke array hubungan kami. Jadi sekarang apabila kod ini berjalan, ia akan menghantar barangan kepada mereka tertentu sambungan. Jadi ini boleh menjadi titik permulaan yang baik untuk membuat pelayan chat atau sesuatu yang serupa. Dan jenis perkara yang sejuk adalah bahawa kod yang anda lihat di sini untuk seperti pada dan memancar dan barangan seperti itu adalah sama jenis kod JavaScript yang akan anda menulis dalam pelayar untuk berinteraksi dengan pelayan. Jadi itulah sebabnya SocketIO adalah jenis kemas dan berguna dengan cara itu. Oh dan hanya satu perkara yang lebih cepat sebenar. Ada projek akhir CS50 tahun lepas yang pada dasarnya dilaksanakan berbual pelayan di Node.js. Saya rasa ia Harvardchats.org tetapi saya tidak - OK. Saya tidak pasti apa yang URL itu, tetapi Saya boleh menghantar bahawa daripada selepas itu. Tetapi ia jenis sejuk apa anda boleh lakukan dengan Node.js. Jadi saya berharap, secara umum, anda lelaki itu mempunyai satu rasa yang baik dari apa Node.js berguna dan bagaimana anda mungkin boleh memohon untuk projek akhir anda. Saya akan menghantar lebih banyak sumber bersama-sama dengan ini. Dan terima kasih kerana datang. Terima kasih. [Tepuk tangan]