Tip:
Highlight text to annotate it
X
>> KEVIN Schmid: Hello everybody.
Selamat datang di seminar CS50 pada Node.js.
Nama saya Kevin.
Aku TF CS50.
Dan aku semacam seperti benar-benar bersemangat tentang seminar ini.
Saya pikir Node.js sangat dingin.
Saya berharap agar seminar ini dapat digunakan sebagai baik, saya kira, loncatan untuk
beberapa proyek akhir Anda jika Anda tertarik menggunakan
sesuatu seperti Node.js.
>> Kami akan memulai semacam seminar off oleh hanya berbicara tentang sedikit dari
jenis skalabilitas latar belakang perspektif Node.js, dan kemudian
kami akan pindah ke beberapa contoh kode.
Dan aku akan memiliki kode pada sebuah situs web, dan Anda dapat melihat kode.
Dan setelah seminar, saya akan memilah bicara tentang bagaimana Anda dapat mengatur Node.js
pada komputer Anda.
>> OK.
Jadi mari kita mulai.
Jadi, saya kira saya hanya ingin berbicara tentang server web, benar-benar, pertama.
Dan untuk memulai diskusi ini, saya pada dasarnya memiliki diagram yang dari
buku teks yang digunakan untuk CS61, yang pada dasarnya menunjukkan interaksi
antara proses client, seperti web Anda browser atau seperti klien tujuan Anda atau
sesuatu seperti itu, dan server web.
Jadi ini semacam terlihat mirip dengan gambar yang Anda lihat di kuliah tentang
Rabu mana pada dasarnya kita memiliki beberapa proses klien seperti Google Chrome.
>> Dan kemudian langkah pertama adalah client mengirimkan permintaan.
Sehingga dapat menjadi sesuatu seperti baik mari kita kunjungi, saya tidak tahu, CS50.net.
Jadi kita mengeluarkan permintaan itu.
Dan apakah ada yang ingat nama protokol yang menentukan bagaimana
permintaan harus terstruktur?
Yep.
>> AUDIENCE: [Tak terdengar].
>> KEVIN Schmid: Tepat.
Jadi seperti HTTP, kan?
Jadi pada dasarnya spesifikasi untuk bagaimana permintaan itu harus benar-benar diletakkan
out, karena pada akhir hari, permintaan yang benar-benar hanya seperti
string yang pada dasarnya bilang aku ingin ini.
Dan spesifikasi untuk itu adalah HTTP.
Jadi itu seperti protokol.
>> Jadi server menerima permintaan itu.
Jadi kalian memiliki web server diinstal dalam alat CS50.
Ini Apache.
Dan minggu ini ketika Anda bekerja pada masalah menetapkan tujuh, Anda benar-benar akan bekerja
dengan server web.
Jadi server menerima permintaan itu, dan maka harus jenis menggaruk nya
kepala dan mengatakan seperti apa yang baik yang harus saya lakukan dengan ini?
>> Jadi berdasarkan apa yang memutuskan untuk melakukannya, maka mungkin harus menghubungi beberapa jenis
sumber daya.
Dan sumber daya yang bisa menjadi banyak hal yang berbeda.
Untuk satu, itu bisa saja seperti file HTML statis.
Jadi bisa saja seperti beberapa HTML yang seperti untuk
website pribadi Anda.
Ini bisa jadi sebuah file statis seperti gambar atau seperti film yang Anda miliki.
Bahkan bisa bicara beberapa jenis database
seperti database MySQL.
Jadi tidak selalu harus berkomunikasi dengan sumber daya, tetapi dalam
beberapa kasus, itu bisa.
>> Jadi apa yang akan dilakukan setelah itu adalah itu akan
mengirim kembali respon.
Dan respon untuk ini adalah juga ditentukan oleh HTTP.
Jadi klien dapat menerimanya.
Hal ini dapat merobeknya terpisah dan memprosesnya.
Dan kemudian Anda mendapatkan halaman web seperti Google atau CS50.net atau
apa pun yang Anda pergi ke.
OK?
>> Jadi ini adalah interaksi dasar yang kita akan berurusan dengan.
Dan kita cukup banyak akan berfokus pada ini bagian dari
interaksi, server.
OK.
Keren.
Ada yang punya pertanyaan sejauh ini?
OK.
>> Jadi seperti yang kita katakan, web server menerima ini permintaan HTTP dan kemudian mengeluarkan ini
Respon HTTP.
Dan seperti yang kita bicarakan sebelumnya, Server web CS50 alat adalah Apache.
Jadi, ketika kalian bekerja pada P ditetapkan tujuh, Anda akan bisa bekerja sama dengan
Web server Apache.
Anda tidak akan pernah benar-benar bekerja dengan Apache langsung terlalu banyak.
Anda semacam mengkonfigurasi Apache sedikit ketika Anda menentukan virtual host atau
host v, dan kita akan mendapatkan dengan yang di sedikit.
>> Tapi pada dasarnya, web server Apache dibentuk untuk bekerja dengan PHP jenis
dari luar kotak.
Jadi apa yang sebenarnya terjadi adalah ketika Anda pergi ke salah satu website Anda seperti, katakanlah,
tuan slash index.php lokal atau sesuatu, adalah browser Anda mengirimkan bahwa
permintaan, dan kemudian Apache duduk ada dan angka keluar hubungannya dengan itu.
Dan tindakan adalah untuk mengeksekusi kode di index.php dan
kemudian kirimkan kembali.
Jadi ada itu.
Jadi kita semacam berbicara tentang hal ini.
Jadi itu hanya bisa melayani file statis atau menjalankan beberapa kode PHP dan kemudian masalah
respon.
>> Jadi pertanyaan umum yang bisa datang up baik, bagaimana kita benar-benar berurusan
dengan memiliki beberapa pengguna pada saat yang sama?
Jadi bayangkan jika Anda sedang menulis web Server, jika Anda memiliki server web yang
Anda mencoba untuk menulis sesuatu seperti C atau sesuatu seperti itu,
pada dasarnya Anda dapat berpikir tentang bagaimana ada bisa menjadi semacam kode yang
akan menerima permintaan tersebut, tapi kemudian itu harus melakukan semua pekerjaan ini di atasnya.
Ini mungkin harus, misalnya, hubungi database atau sesuatu seperti itu.
Benar?
Dan kemudian akan melakukan seperti itu pengolahan dan kemudian
dikirim kembali respon.
Jadi itu seperti tinggi tingkat ikhtisar.
>> Tapi itu tidak segera jelas bagaimana Anda bisa melakukan itu sehingga dua orang atau
bahkan 1.000 orang bisa bekerja dengan Anda server web pada saat yang sama.
Jadi solusi yang menggunakan Apache disebut benang atau proses.
Jadi, Anda mungkin pernah mendengar tentang istilah-istilah ini sebelumnya.
Tidak apa-apa jika Anda belum, tapi hanya berpikir tentang benang atau proses sebagai cara untuk
sistem operasi atau program user atau sesuatu seperti itu atau server web
untuk semacam menjalankan beberapa hal sekaligus.
Jadi, Anda mungkin pernah mendengar istilah seperti benang eksekusi.
Jadi jenis seperti Anda semacam multitasking.
>> Dan jika Anda pernah melihat di kotak Anda laptop, atau sesuatu seperti itu,
multicore, apa yang dapat Anda lakukan adalah Anda dapat menjalankan dua benang yang berbeda pada hari yang berbeda
bagian dari CPU sehingga mereka dapat benar-benar terjadi pada waktu yang sama.
Jadi ini benar-benar kuat.
Dan ini adalah jenis Apache solusi untuk masalah ini.
>> Jadi, apakah ada jenis seperti masalah apapun dengan pendekatan ini meskipun?
Jadi kurasa aku agak menulis mereka di sana.
Tapi keduanya semacam menggunakan banyak memori.
Ini sangat mahal untuk membuat thread atau proses.
>> Dan bagian dari penalaran adalah bahwa hanya seperti ketika Anda menjalankan program C
seperti utama Anda dan kemudian bahwa panggilan fungsi lain, yang memiliki
semacam stack.
Jadi benang juga membutuhkan sekali tumpukan terpisah yang
bisa sangat besar.
Dan jika Anda dapat membayangkan memiliki ton pengguna di situs web Anda, Anda akan memiliki
banyak benang yang berbeda.
Itu banyak tumpukan untuk mengelola dan memelihara.
Jadi konsumsi memori yang besar.
>> Dan kemudian, juga, katakanlah Anda hanya memiliki satu CPU, atau katakanlah Anda memiliki
benang lebih dari yang Anda miliki mereka multicores.
Benar?
Jadi katakanlah Anda memiliki 10 benang dan Anda hanya memiliki lima CPU.
Anda semacam harus melakukan hal ini di mana Anda beralih di antara saat ini
salah satu yang berjalan karena Anda tidak dapat menjalankan semua 10 sekaligus.
Dan itu disebut context switch.
Dan istilah tersebut sebenarnya memiliki beberapa konteks yang berbeda, tetapi mari kita hanya
menganggapnya sebagai switching antara dua benang.
Itu bisa sangat mahal karena pada dasarnya apa yang harus Anda lakukan adalah Anda
harus berhenti apa yang Anda lakukan, menyimpan keadaan thread berjalan, dan
kemudian beralih ke tempat lain.
>> Jadi tidak semua orang seperti melihat motivasi mengapa benang dan
proses mungkin sedikit besar?
Dan apakah Anda memiliki pertanyaan?
OK.
Keren.
Ada yang punya pertanyaan?
OK.
>> Jadi jika kita mengambil langkah mundur untuk kedua, ada jenis seperti
pengamatan bahwa kita dapat membuat tentang banyak aplikasi web.
Dan itu benar-benar bahwa banyak dari mereka sebenarnya tidak melakukan itu banyak berguna
bekerja di dalam thread.
Jadi telah ada yang dimulai pada P menetapkan tujuh sama sekali?
Jadi Anda mungkin ingin menggambarkan beberapa bagian?
Apakah Anda bekerja pada login atau sesuatu seperti itu?
>> AUDIENCE: No
>> KEVIN Schmid: OK.
Jangan pikiran.
Maaf.
Tapi pada dasarnya, dalam P set, Anda akan membuat banyak semacam
query ke database untuk mendapatkan beberapa informasi dari database tersebut.
Dan apa kode Anda akan lakukan, apa itu proses Apache atau
bahwa benang Apache akan melakukan sementara itu harus menghubungi
database itu semacam akan menjadi duduk di sana dan itu akan menjadi
menunggu database untuk membalas.
>> Sekarang yang mungkin tidak terdengar seperti itu besar berurusan karena database adalah pada Anda
CS50 alat, kan?
Tapi ada beberapa jenis jaringan latency di sana karena sekarang web
Server harus mengeluarkan permintaan sendiri untuk database untuk berkomunikasi dengan
database dan kemudian mendapatkan bahwa informasi kembali.
Jadi sekarang ini seperti juga menunggu untuk saya, saya akan pergi mendapatkan sesuatu dari
database dan kemudian ada banyak menunggu terjadi.
Apakah itu masuk akal?
>> Dan untuk beberapa hal itu tidak terlalu buruk.
Jika hanya harus, misalnya, akses memori, yang tidak seperti
mengerikan I / O latency.
Dan ketika aku berkata, I / O latency, apa yang saya maksudkan adalah seperti jenis seperti
input output.
Tetapi untuk mengakses file pada disk, seperti jika saya ingin melayani HTML statis
mengajukan itu pada halaman web saya atau sesuatu seperti itu, aku agak harus
berhenti sebentar, membaca file yang dalam dari disk, dan kemudian di
proses yang saya sedang menunggu.
Aku tidak melakukan pekerjaan yang bermanfaat.
>> Hal ini tidak benar dari segala sesuatu, tetapi adalah umum dalam aplikasi seperti P set
tujuh dan banyak aplikasi bahwa Anda tidak
benar-benar melakukan banyak berpikir.
Dan ketika saya mengatakan pemikiran, maksudku seperti kerja komputasi.
Jadi pekerjaan komputasi bisa menjadi sesuatu seperti, katakanlah, Anda ingin
menulis sebuah web server yang hanya dihitung nomor Fibonacci n.
Itu tidak terdengar seperti khususnya web server yang menyenangkan.
Seperti saya tidak akan mengharapkan situs bahwa untuk menjadi Facebook berikutnya, tapi itu adalah beberapa
jenis pekerjaan komputasi.
>> Dan Anda bisa membayangkan bahwa dengan mengganti beberapa jenis lain yang menarik
pekerjaan komputasi.
Katakanlah Anda sedang menulis sesuatu yang menghitung derajat
pemisahan antara dua orang atau sesuatu seperti itu.
Jadi yang tidak melibatkan beberapa jenis perhitungan, kan?
Dan bahkan kemudian, untuk melakukan itu Anda masih memiliki untuk melakukan banyak menunggu mungkin
Anda harus query database untuk melihat up siapa berteman dengan siapa atau
sesuatu seperti itu.
Jadi ada semacam gagasan pekerjaan komputasi.
Apakah itu masuk akal?
Apakah Ada yang punya pertanyaan?
>> Oh dan saya kira saya menempatkan chat server ada karena chatting server jenis
contoh yang baik dari ini.
Sebuah server obrolan tidak memiliki untuk melakukan banyak berpikir.
Ini hanya harus menunggu orang untuk mengirim pesan dan kemudian ketika
mereka, mengirim mereka.
OK?
>> Jadi hanya untuk rekap lagi, Apache dan server web yang sama seperti itu garpu
banyak benang dan proses yang bisa menjadi semacam boros.
Jadi, saya kira pertanyaan yang mungkin datang dari yang kita perlu memiliki
beberapa benang dan proses?
Bagaimana jika kita hanya punya satu?
>> Jadi mari kita jenis melukis gambar apa ini akan terlihat seperti.
Jadi mari kita gunakan hanya satu thread.
OK?
Jadi bayangkan saja dengan satu thread.
>> Mari kita misalkan kita tidak benar-benar melakukan yang banyak berguna - dan ketika saya mengatakan
berguna, maksudku pekerjaan komputasi -
pada mereka beberapa thread sebelumnya.
Jadi mari kita jenis mengkonsolidasikan semuanya ke dalam satu thread.
Jadi bagaimana jika kita memiliki satu thread seperti itu hanya terjadi di sekitar dalam lingkaran dan
terus cek melakukan sesuatu baru terjadi.
Jadi misalnya, terjadi sesuatu yang baru bisa berarti aku punya sesuatu yang kembali dari
database, atau seseorang yang dikirim saya permintaan HTTP baru.
Jadi mereka adalah jenis acara itu terjadi, kan?
>> Lalu apa yang bisa saya lakukan ketika orang-orang baru hal-hal terjadi di thread yang sama ini
eksekusi, ini thread tunggal eksekusi, saya dapat memanggil beberapa kode yang
akan menangani hal tertentu.
Jadi misalnya, jika saya punya sesuatu kembali dari database, aku bisa berlari saya
bagian komputasi kecil itu yang sebenarnya hanya mempersiapkan hal untuk
mengirim kembali ke pengguna.
Begitu juga seperti itu masuk akal?
>> Tapi apa yang benar-benar implikasi dari ini?
Benar?
Karena kita telah menulis banyak kode yang -
dan aku hanya akan melompat ke depan dalam slide jika itu OK.
Jadi, jika Anda tidak keberatan, aku hanya akan mengambil langkah mundur.
Jadi hal semacam ini adalah disebut loop acara.
OK?
Dan itu semacam dasar Ide di balik Node.js.
>> Jadi apa Node.js benar-benar melakukan sebagai web server ada satu benang
yang pada dasarnya terjadi di sekitar dalam satu lingkaran seperti sementara satu jenis di bawah
kap Node.js yang terus-menerus memeriksa, apakah kita menerima hal-hal baru?
Dan kemudian akan berjalan penangan yang Anda tetapkan.
Tapi pertanyaan yang baik untuk bertanya adalah, bagaimana kita bisa membuat hal ini terjadi
dengan hal-hal yang ada?
>> Jadi saya menempatkan baris kode C di sini bahwa pada dasarnya terlihat seperti itu membuka
mengajukan, kan?
Aku Dia baru saja keluar dengan album.
Jadi saya harus membuka nya file baru.
Jadi kode C untuk operasi jalan -
dan saya kira alasan saya memilih file adalah karena ini adalah jenis sejauh
dari I / O pekerjaan yang kami lakukan di C di perasaan bahwa ada input output.
Jadi kita sebut kode ini yang apakah f ini terbuka.
Dan kemudian pada baris berikutnya dari kami Program, kita sekarang dapat bekerja dengan f.
>> Jadi ini akan menjadi contoh dari sesuatu yang seperti sinkron atau
memblokir karena pada baris pertama ada kita menunggu sampai kita
mendapatkan file terbuka.
Jadi pada baris kedua, kita tahu bahwa kita dapat bekerja dengan f, tetapi ini berarti bahwa
bahwa baris kedua tidak bisa benar-benar menjalankan sampai baris pertama dilakukan.
Apakah itu masuk akal?
>> Jadi ini akan menjadi buruk untuk menempatkan dalam event handler.
Dan alasan untuk itu adalah bahwa semacam ini menunggu, kan?
Jadi ini akan kembali kita kembali untuk hal yang sama.
Dan sekarang kita bahkan tidak akan memiliki Manfaat dari beberapa benang atau
proses karena kita punya satu thread di Node.js.
Apakah itu masuk akal untuk semua orang?
>> AUDIENCE: Tunggu.
Jadi apa penggantinya?
>> KEVIN Schmid: Oh, begitu ya.
Jadi aku akan sampai ke penggantian.
OK.
Jadi bagaimana jika kita memiliki sesuatu yang tampak seperti ini?
Jadi bagaimana jika sekarang saya edit f terbuka sedikit?
Jadi aku lewat di sama dua argumen seperti sebelumnya.
Aku masih mencintai lagu baru bahwa dia keluar dengan.
Tapi aku melewati hal ketiga yang adalah variabel ini disebut kode.
>> Tapi apa sebenarnya kode dalam konteks ini?
Apakah seperti variabel C biasa?
Ini fungsi, kan?
Dan itu mungkin sedikit aneh karena Aku benar-benar seperti sekarang melewati
berfungsi ke fungsi lain.
>> Jadi beberapa hal yang perlu diperhatikan tentang hal ini.
Satu, aku tidak benar-benar memanggil fungsi kode.
Jadi Anda tidak melihat kode dengan paren kiri, kanan paren.
Aku hanya lewat di kode.
Dan di C, apa ini akan benar-benar melakukan adalah memberikan pointer ke yang sebenarnya
kode, dan kemudian ini bisa menjalankannya.
Tapi hanya berpikir tentang hal itu karena Anda lewat kode untuk menjalankan ketika
file yang dibuka.
>> Tapi apa artinya ini adalah bahwa sekarang sisa program saya yang bisa melakukan
hal-hal lain, dapat terus melakukan lain barang sementara kita, tidak benar-benar menunggu, tapi
hanya di belakang kepala kita yang ketika file itu terbuka, run yang
kode di atas.
Apakah itu masuk akal?
>> Dan sekarang ide di balik Node.js adalah bahwa kode dalam hal-hal do dengan f
bagian harus cukup singkat dan sederhana dan mudah dan tidak benar-benar
sangat komputasi secara intensif.
Ini mungkin harus membuka file lain, tetapi yang juga harus cukup cepat
karena hanya harus mengatakan melakukan f lain membuka dan kemudian memanggil kode lain ini.
>> Jadi hanya untuk menjadi benar-benar jelas, f buka yang melakukan lagu Katy Perry baru
done mp3, itu akan cukup banyak kembali segera.
Dan kemudian kita bisa terus melakukan hal-hal lain karena semua yang sekarang f
panggilan terbuka tidak akan memberitahu pada dasarnya mendasari kode open f membuka file ini
dan ketika Anda sudah selesai membuka ini file atau ketika Anda mendapatkannya kembali,
kemudian jalankan kode tersebut.
Tapi itu tidak benar-benar menjalankan kode tersebut.
Dan Anda memiliki pertanyaan?
>> AUDIENCE: Anda tampaknya menyiratkan beberapa kali bahwa menambahkan komputasi
Kode intensif semacam mematahkan [Tak terdengar] didorong sistem.
[Tak terdengar]?
>> KEVIN Schmid: Itu pertanyaan yang bagus.
Jadi saya benar-benar memiliki contoh bagaimana Anda bisa mengintegrasikan komputasi
kode intensif dalam sedikit.
Jadi ketika kita sampai ke kode contoh, Aku akan pastikan untuk menarik satu itu.
Apakah itu OK?
Terima kasih.
>> Siapa nama Anda?
>> AUDIENCE: Aaron.
>> KEVIN Schmid: Aaron membawa sangat titik yang baik, yang adalah bahwa jika saya punya
beberapa kode komputasi intensif di melakukan hal-hal dengan f bagian, sisa
program saya tidak bisa lari dan tidak dapat mendengarkan untuk permintaan baru atau apa pun sampai semua
hal itu selesai.
Jadi jika saya sedang menulis kode Node pada umumnya kecuali kita melakukan sesuatu seperti aku akan
menyarankan kemudian ketika kita melihat kode contoh, saya harus yakin bahwa
kode saya tidak mengikat loop acara ini.
Apakah itu masuk akal?
OK.
Keren.
>> Jadi Node.js menawarkan kerangka kerja ini yang Anda dapat membangun event ini didorong
server dengan.
Sehingga memiliki semacam ini asynchronous non-blocking I / O perpustakaan, sedangkan
C perpustakaan standar yang kita sudah bekerja dengan, seperti jika Anda hanya
menggunakannya dengan cara yang sama bahwa kita telah telah menggunakan mereka dengan f terbuka dan
hal, mereka memblokir karena Anda benar-benar harus menunggu
file untuk membuka.
>> Tapi Node.js memberi Anda itu dan itu pada dasarnya hubungan ke Google V8
JavaScript engine yang merupakan alasan bahwa Chrome begitu cepat pada pengolahan
JavaScript karena memiliki mesin V8 ini.
Jadi saya tahu kedengarannya seperti salah satu WWDC konferensi pengembang hal
di mana mereka hanya membuang sekelompok dari nomor surat hal untuk prosesor
dan mengatakan ini sangat keren.
Tapi itu keren yang mereka lakukan ini karena JavaScript -
atau mungkin jika Anda tidak terbiasa dengan JavaScript namun karena kami belum punya
kuliah di atasnya -
tapi JavaScript adalah ditafsirkan bahasa.
>> Dan ini adalah poin penting juga.
Jadi penting untuk web kami server harus cepat, kan?
Dan jika kita hanya menjalankan JavaScript kode yang ditafsirkan dengan hanya
setiap juru tua mungkin lambat.
Jadi manfaat dari memiliki Node ini interpreter V8 super cepat.
Dan saya tidak tahu apakah mereka menamakannya karena tamparan V8 di dahi
hal, tapi OK.
>> Jadi saya sudah menyiapkan beberapa contoh di URL ini.
Setelah seminar, saya semacam akan berbicara tentang bagaimana Anda bisa mendapatkan Node set
up, tapi untuk saat ini, aku hanya semacam ingin berjalan melalui beberapa contoh kode.
Jadi jika Anda ingin mengikuti bersama, semua kode sumber tersedia di sana.
OK?
>> Jadi aku akan meninggalkan URL ini up untuk sedikit.
Dan kemudian aku hanya akan beralih ke terminal.
Apakah semua orang baik dengan URL ini?
Jadi aku akan beralih ke terminal saya di sini.
>> Jadi, inilah kode yang Aku punya untuk hari ini.
Mengapa kita tidak mulai dengan simpler.js file?
Hal lain adalah bahwa semua ini kode akan ditulis dalam
JavaScript yang Anda mungkin atau mungkin tidak akrab dengan.
Saya kira beberapa hal adalah bahwa banyak kode JavaScript adalah jenis
sintaks dan struktur sangat mirip dengan C, sehingga Anda dapat jenis mengambilnya sebagai
Anda pergi bersama.
Saya sudah mencoba untuk menulis banyak mulai kode untuk ini dengan cara yang
mirip dengan C sehingga itu sedikit lebih mudah dibaca.
Tapi seperti yang kita kemajuan, aku akan menunjukkan beberapa tambahan
fitur JavaScript yang adalah jenis dingin.
>> Tapi mari kita lihat contoh program ini.
Saya kira semuanya sudah dipotong di sana.
Aku hanya akan memperbaiki nyata yang cepat kalau itu OK atau tidak.
Saya tidak tahu apa ini yang akan dilakukan.
Apakah itu sedikit lebih baik?
Dapatkah Anda melihat var dan barang?
OK.
>> Jadi baris pertama adalah seperti JavaScript versi variabel
deklarasi.
Jadi hanya untuk menyoroti apa yang akan ini terlihat seperti di C. Jadi ini adalah seperti
saya mengatakan indeks sama dengan tiga atau sesuatu seperti itu.
Jadi saya tidak menentukan tipe.
JavaScript tidak memiliki tipe, tapi itu sangat dinamis diketik di alam, sehingga
tidak menyediakan jenis tipe di atasnya.
Jadi itu hanya memiliki var.
Itu seperti variabel.
OK?
>> Dan aku akan menelepon HTTP variabel ini.
Dan di sisi kanan saya, saya memiliki ekspresi yang saya ingin dimasukkan ke dalam HTTP.
Dan ini mengatakan membutuhkan HTTP.
Jadi ini adalah jenis yang sama untuk memasukkan.
Ini sedikit lebih seperti kuat daripada termasuk dalam arti yang mencakup
hanya akan copy dan paste header file untuk prototipe fungsi atau
apapun dengan jenis definisi.
Tetapi membutuhkan yang sebenarnya terjadi untuk mendapatkan kita kode.
>> Sehingga Anda dapat menganggapnya sebagai mengimpor beberapa kode.
Jadi di suatu tempat di modul Node.js sistem atau apa pun, mereka memiliki semua ini
Kode server HTTP jadi aku hanya mengambil untuk saya sendiri
penggunaan pribadi dalam program ini.
OK?
>> Jadi saya memiliki fungsi ini yang saya tulis.
Dan perhatikan bahwa saya tidak harus menentukan jenis kembali atau jenis yang
argumen lagi.
Jadi semacam longgar diketik di semacam itu masuk akal.
Dua argumen yang dibutuhkan dalam, permintaan dan respon.
Jadi itulah konseptual jenis seperti akrab dari gambar yang kita miliki
di layar sebelumnya karena kita mendapatkan permintaan ini yang kita
memiliki dari pengguna.
Dan kemudian kita memiliki respon yang kita bisa menulis hal-hal untuk.
>> Jadi baris pertama ini tidak res.writeHead 200 dan kemudian ini
Jenis konten biasa teks.
Jadi mari kita potong ini terpisah sedikit.
Jadi mari kita fokus pada res.write untuk sedikit.
Jadi menulis pada dasarnya, dan menulis kepala, hanya cara untuk semacam menulis
hal yang respon.
OK?
Jadi menulis kepala, kalau ada yang ingat dari kuliah HTTP, apakah kalian
ingat header di atas hal HTTP?
Jadi kenapa tidak saya hanya demo header cepat.
Apakah itu bermanfaat?
Atau harus kita hanya semacam -
OK.
Tentu.
>> Jadi, ketika browser Anda pergi ke google.com atau sesuatu seperti itu,
sebenarnya ada sedikit lebih -
ini adalah seperti rahasia -
ada seperti informasi sedikit lebih yang datang melalui pipa dari sekedar
pencarian kecil dan semuanya.
Jadi untuk menunjukkan ini, aku akan untuk menggunakan sebuah program bernama Curl.
OK?
Jadi ini adalah sesuatu yang dapat Anda jalankan di baris perintah Mac OSX atau di
alat atau apa pun.
Dan jadi jika saya Curl HTTP google.com, Aku akan melihat HTML.
Dan ini, dalam keadilan, hanya HTML semacam itu memberitahu Anda untuk
redirect ke www jika browser Anda tidak secara otomatis menangani
redirection.
>> Jadi ini hanya HTML, tapi aku akan untuk menambah Curl tanda hubung ini saya bendera.
OK?
Dan ini akan menunjukkan saya header.
Jadi ini juga informasi yang berasal melalui ketika saya mendapatkan respon ini.
OK?
>> Jadi di atas, Anda melihat ini HTTP 301 pindah secara permanen.
Dan ini adalah jenis penting karena ini mengacu pada kode status.
Jadi 301 di sini adalah kode status, yang pada dasarnya hanya sebuah integer
yang memberitahu browser atau siapa pun yang membaca ini, jika Anda berpura-pura bahwa
Anda browser dan Anda melihat ini, pada dasarnya jika Anda melihat
itu dan Anda melihat 301, Anda tahu aku punya untuk melakukan sesuatu yang khusus berdasarkan
301, atau sesuatu yang istimewa terjadi didasarkan pada 301.
Jadi dikatakan pindah secara permanen.
>> Dan kemudian, pada dasarnya, kita memiliki sekelompok pasangan nilai kunci.
Jadi kita mendapatkan lokasi adalah www.google.com.
Dan kemudian jenis semua hal-hal lain, tetapi pada dasarnya, apa lokasi
katakan adalah lokasi baru adalah di www.google.com.
Jadi sekarang jika Anda pergi ke google.com, Anda akan semacam melihat jenis browser blink
untuk kedua dan kemudian mengarahkan Anda segera kembali ke www.google.com.
Jadi tanggapan dapat berisi header ini.
>> Dan beberapa hal untuk menunjukkan.
Jadi katakanlah kita benar-benar berhasil mengunjungi sebuah halaman web.
Jadi biarkan aku pergi ke -
apa website yang baik?
Aku buruk dalam berpikir baik website di tempat.
>> AUDIENCE: Wikipedia.
>> KEVIN Schmid: OK.
Mari kita lakukan Wikipedia.
Jadi di sini saya dipindahkan.
Oh, tunggu.
Apakah saya?
Ya, aku.
OK.
Jadi saya harus lakukan www.
Jadi aku akan melakukan www.
Dan seperti yang Anda lihat, inilah semua HTML bahwa browser akan memproses
untuk Wikipedia.
>> Tapi kalau aku terus bergulir di sini, apa yang akan saya lihat di atas -
wow, ada banyak HTML di Wikipedia -
tapi apa yang saya bisa lihat di atas sini adalah kode 200 status ini sebagai bertentangan dengan
301 yang saya lihat sebelumnya.
Dan melihat bahwa ia memiliki bagus ramah OK sebelahnya.
Jadi ini seperti kode status yang baik.
>> Apakah itu nomor 200 tampak akrab?
Ya karena ketika aku simpler.js, Aku menulis 200 sana.
Sehingga pada dasarnya mengatakan memberitahu browser atau siapa pun yang mencoba untuk mendapatkan ke
ini bahwa mereka berhasil.
Atau semacam itu seperti kita berhasil juga.
>> Dan ada semacam ini sintaks khusus di Javascript untuk mendeklarasikan
peta tombol ini seperti jenis konten dan nilai-nilai ini seperti teks biasa.
Jadi jika Anda melihat respon yang kami kembali dari Wikipedia sebelumnya, -
Aku akan mencoba untuk menggulir up sedikit lebih cepat -
Anda memiliki tombol ini seperti Server dan nilai-nilai Apache.
Jadi Anda punya kunci dan nilai.
Dan Anda dapat menentukan ini dalam Node apa yang harus mengirim kembali.
>> Jadi ini sebenarnya jenis, di beberapa cara, dan dalam beberapa hal itu tidak
benar-benar, tapi itu tingkat sedikit lebih rendah dari kode PHP yang Anda mungkin
menulis untuk P menetapkan tujuh karena PHP dan Apache semacam mengurus beberapa
hal ini untuk Anda.
Di PHP, Anda dapat mengganti default perilaku dengan menulis header Anda sendiri.
Tapi untuk tujuan ini, kita mendapatkan untuk menulis header kita sendiri.
>> Jadi, apakah garis yang masuk akal untuk semua orang, garis menulis kepala?
OK.
Mengagumkan.
>> Jadi apa yang saya lakukan adalah saya mengakhiri respon dengan mengatakan hello world.
OK.
Tapi itu hanya fungsi disebut permintaan handler.
Jadi sekarang aku benar-benar harus melakukan jenis sesuatu dengan fungsi ini, kan?
>> Jadi di sini apa yang saya lakukan adalah ada ini garis yang tidak sama dengan server yang var
HTTP.create server, dan kemudian saya lulus dalam penangan permintaan.
Jadi ini adalah jenis Node cara membuat server.
Dan perhatikan bahwa aku lewat dalam penangan permintaan.
Jadi ini mengatakan createServer yang fungsi yang saya ingin Anda untuk membuat saya
Server, dan ketika server yang menerima respon, aku ingin kau menyebutnya
meminta fungsi pengendali.
OK?
>> Jadi baris yang cukup banyak selesai segera.
Jadi garis server var dilakukan dengan benar setelah Anda melakukannya cukup banyak.
Maksudku, ia harus menyiapkan beberapa intern negara untuk tahu bahwa Anda harus
memanggil fungsi permintaan handler, tapi itu tidak akan duduk di sana dan
katakanlah memiliki pengguna yang dikirim saya permintaan belum?
Apakah pengguna mengirimi saya permintaan belum?
Jadi tidak memblokir.
OK?
>> Jadi apa ini akan lakukan adalah pada dasarnya sekarang menyimpan pointer ke kode ini,
permintaan ini fungsi pengendali, dan kemudian akan menjalankan kode bahwa ketika seseorang
membuat permintaan.
Dan kemudian kita lakukan server.listen.
>> The 1337 ada cukup sewenang-wenang.
Aku tidak punya alasan tertentu untuk memilih nomor tersebut.
Itu benar-benar acak.
Tapi itu hanya menentukan port.
Jadi kebanyakan server web Anda akan melihat bahwa mereka menggunakan port 80 karena itu jenis
seperti konvensi.
Jadi jika saya pergi ke sesuatu seperti, Aku tidak tahu, Wikipedia.org,
dan saya menaruh usus 8 -
oh wow, Anda tidak bisa melihat itu.
Maafkan aku.
Tapi kalau aku melakukan Wikipedia -
Aku akan menulis di sini hanya agar jelas pada kamera.
Tapi kalau aku mengambil ini ke browser dengan usus 80, yang menentukan pergi ke
Wikipedia.org pada port 80.
Jadi seperti bagaimana Amerika Serikat memiliki beberapa port seperti di mana Anda dapat kapal
hal yang semacam.
Jadi itu seperti pergi ke khusus ini tempatkan di server ini.
OK.
>> Jadi saya hanya memilih 1.337.
Ada berbagai macam jenis nomor bahwa Anda dapat memilih.
Itu tidak benar-benar istimewa.
>> Tapi apa yang akan saya lakukan sekarang adalah aku akan menjalankan Node.
Biarkan aku benar-benar masuk bahwa pasangan garis bawah sehingga Anda dapat melihatnya.
Aku akan melakukan Node, dan aku akan menjalankan simpler.js.
Dan kita akan berbicara tentang bagaimana untuk mendapatkan Node diatur dalam sedikit.
Tapi sekarang itu hanya menjalankan server.
>> Jadi salah satu hal yang kita dapat mencoba yang tidak mungkin jadi menarik adalah kita bisa benar-benar
mencoba untuk mengaksesnya di Curl.
Jadi saya bisa melakukan Curl, dan saya mesin adalah host lokal.
Anda juga akan melihat ini ditulis seperti ini kadang-kadang.
Host lokal dan 127.0.0.1 adalah jenis seperti komputer di rumah Anda.
Jadi seperti berbicara dengan komputer Anda sendiri.
OK.
>> Dan kemudian saya dapat mengatakan 1337.
Jadi jika saya menjalankan baris kode, ia mengatakan hello world.
Dan jika saya ingin melihat hal-hal yang yang memiliki jenis konten teks biasa atau
apapun, aku bahkan bisa menempatkan ini di sini.
Dan melihat bahwa itu tidak mengatakan OK.
Dan saya punya teks biasa.
Dan kemudian ada semacam ini semua lainnya hal-hal yang Node akan menambahkan
ada untukku.
Itu tidak super penting.
>> Maksudku, ada beberapa jenis teknis aspek pada yang baik
keren untuk dibicarakan, tapi hanya untuk menunjukkan Anda, saya juga memiliki kekuatan untuk
mengubah ini di sekitar.
Jadi saya hanya bisa menambahkan a bunch hal-hal seperti itu.
Dan kemudian sekarang, jika saya melihat di saya output, itu akan menjadi itu.
Jadi header ini berarti hal-hal tertentu ke browser dan hal-hal seperti itu.
>> Dan header pada dasarnya dapat memberitahu browser bagaimana menanggapi sesuatu.
Jika Anda pernah mendengar tentang cookie sebelumnya, atau jika Anda pernah kesal
oleh halaman web pengaturan cookies, atau dihidupkan kue blok atau
sesuatu seperti itu.
Anda benar-benar dapat mengatur cookie dalam header tersebut.
Jadi mereka memberitahu browser bagaimana perilaku dalam beberapa kasus.
OK.
>> Jadi itu simpler.js.
Apakah Ada yang punya pertanyaan pada file kode sumber?
OK.
Keren.
>> Jadi mari kita menghapus r dari yang dan melihat simple.js.
Jadi ini cukup banyak program yang sama.
Aku hanya menulis sedikit berbeda karena saya ingin mengurutkan dari sorot
beberapa fitur JavaScript.
>> Jadi melihat bahwa permintaan handler Fungsi telah benar-benar lenyap.
Oh ya, apakah Anda memiliki pertanyaan?
>> AUDIENCE: Ya, argumen yang dilewatkan ke yang
fungsi, apa yang mereka?
>> KEVIN Schmid: Jadi mereka adalah JavaScript obyek.
Dalam dokumentasi Node.js, itu pada dasarnya mengatakan apa metode yang
tersedia pada mereka.
Kami hanya kebetulan memiliki akses ke Metode ini disebut menulis kepala dan akhir
dan hal-hal seperti itu.
Tapi ada sekelompok keseluruhan metode yang lebih.
>> Dan misalnya, seperti salah satu dari mereka khususnya pada rec, Anda dapat melakukan
sesuatu seperti rec.method yang akan memberitahu Anda apakah itu HTTP get atau
Permintaan pasca HTTP dan hal-hal seperti itu.
Jadi ada semua jenis yang berbeda properti, tapi mereka berdua
JavaScript objek, dan mereka hanya memiliki fungsi yang melekat pada mereka bahwa Anda
dapat menulis hal yang.
OK?
>> Jadi melihat bahwa permintaan handler benar-benar hilang.
Tapi kode yang saya miliki dalam permintaan handler masih ada.
Aku masih memiliki res.writeHead ini dan saya masih memiliki res.end ini.
Dan apa ini adalah contoh di JavaScript adalah ide tentang
fungsi anonim.
dan anonim seperti nama yang cocok untuk itu karena itu benar-benar tidak
memiliki nama.
Tidak ada permintaan fungsi handler di sana.
>> Tidak memiliki nama, tetapi masih adalah mengambil argumen.
Jadi aku masih punya rec dan res.
Dan aku masih memiliki kode tersebut.
Ini baik-baik saja JavaScript code.
Jadi saya bisa menyatakan fungsi tanpa eksplisit memberi nama.
Ini sedikit membingungkan pada awalnya.
Ada beberapa hal-hal seperti yang berguna yang dapat Anda lakukan dengan
ini fungsi anonim.
Apakah Ada yang punya pertanyaan ini, atau itu hanya untuk OK, untuk saat ini,
semacam hanya menerima bahwa itu akan melakukan hal yang sama?
Yep?
>> AUDIENCE: Apakah fungsi pertama kelas dalam JavaScript?
>> KEVIN Schmid: Mereka pertama kelas dalam JavaScript.
Dan hanya tahu bahwa konsep-konsep ini dari lewat di fungsi anonim seperti
ini berlaku untuk JavaScript yang Anda dapat menulis dalam proyek akhir Anda untuk
web browser juga.
Jadi misalnya, dalam JavaScript di browser Anda, itu juga agak event
didorong dalam arti bahwa apa yang akan Anda miliki adalah ketika pengguna mengklik ini
tombol, saya ingin Anda untuk menjalankan kode ini.
>> Jadi jenis yang sama ide-ide dari sisi klien bila klik mouse atau mereka
mouse di atas beberapa gambar pada Anda halaman web, menjalankan kode ini.
Yang dapat diterapkan pada server.
Jadi itulah jenis seperti menarik alasan mengapa JavaScript adalah benar-benar
orang yang cocok atau beberapa berpikir itu adalah bahasa yang sesuai untuk jenis
Server sopir acara karena Anda memiliki ini fungsi anonim.
Anda memiliki ide seluruh kode asynchronous ini.
OK.
Ada yang punya pertanyaan?
>> OK.
Jadi itu simple.js.
Jadi mari kita lihat satu lagi atau beberapa lagi.
Jadi ini adalah sleep.js.
Begitu pula orang akrab dengan C fungsi tidur?
Dari mungkin salah satu dari kuliah sebelumnya atau sesuatu seperti itu?
>> Jadi pada dasarnya Anda dapat lulus dalam saya pikir jumlah detik atau jika Anda menggunakan U
tidur beberapa milidetik atau nanodetik.
Dan pada dasarnya program ini hanya akan berhenti berjalan untuk jumlah waktu.
Benar?
Dan kemudian akan bangun akhirnya dan maka itu hanya akan terus berjalan
program.
>> Jadi server ini semacam memberi kesan tidur.
Jadi melihat bahwa kita memiliki yang sama res.writeHead 200 dengan header sebagai
sebelumnya, tapi kemudian kita panggil ini fungsi yang disebut set timeout.
Mengatur batas waktu juga tersedia dalam web browser Anda Google Chrome
atau Safari atau apa pun.
Dan pada dasarnya apa yang dilakukannya di sini adalah itu berlangsung dalam suatu fungsi.
Perhatikan, sekali lagi, ini merupakan fungsi anonim.
Jadi itu agak dingin karena kita menggunakan fungsi anonim dalam sebuah
fungsi anonim yang bisa menjadi sedikit aneh.
>> Tapi itu mengambil fungsi itu, yang pada dasarnya mengatakan - dan cara ini
karya di 5.000 milidetik, aku ingin Anda untuk menjalankan fungsi apa yang
hanya berakhir respon dan menulis hey.
Jadi ini memberikan kesan seperti tidur, tetapi cara ini benar-benar
kerjanya adalah kita akan dijalankan melalui baris ini sangat cepat.
Kami hanya menulis sesuatu.
Dan kemudian kami juga akan dijalankan melalui baris ini sangat cepat.
Jadi kita tidak benar-benar akan menunggu lima detik.
Kami hanya akan menjalankan Kode ini langsung.
>> Dan kemudian ada, sekali lagi, ini sedikit loop acara yang sekarang memiliki hal ini
register yang pada dasarnya hanya terus-menerus terjadi di sekitar dalam lingkaran
dan melihat jam dalam satu benang dan mengatakan, memiliki lima detik
lulus belum?
Dan kemudian ketika melihat bahwa kedua tangan telah bergerak seperti lima detik atau
apapun, maka bangun dan berkata, oh, apa yang harus saya lakukan?
Oh, aku harus menjalankan kode ini.
Dan kemudian itu akan menjalankan res.end hey.
>> Jadi sekali lagi, kita tidak pernah menunggu di sini.
Jadi bukan bahwa kode ini dalam fungsi ini akan mengambil lima
detik untuk menjalankan.
Kode ini akan berjalan cukup banyak seketika, setidaknya relatif terhadap
lima detik yang kami berbicara tentang sebelumnya sebelumnya.
>> Jadi hanya untuk menunjukkan ini dalam tindakan, Aku bisa melakukan Node.sleep.js.
Dan apakah saya mengacaukan sesuatu?
Mungkin.
Maaf.
Mari kita lihat apa yang bisa kita lakukan untuk memperbaiki hal ini.
OK.
Jadi pasti menggunakan Node.js.
Aku hanya bercanda.
OK.
Hanya satu detik.
OK.
Aku tahu apa itu.
>> Jadi masalah ini adalah bahwa dalam tab saya yang lain di sini, aku berlari Node sudah di
alamat yang sama, 1337.
Jadi kesalahan yang ini melemparkan, jika kita melihat hal itu nyata erat, adalah alamat di
gunakan, EADDRINUSE.
Jadi saya sudah menggunakan 1337 di sini.
Jadi jika saya menutup off ini, dan kemudian aku sekarang mencoba untuk menjalankan ini, mudah-mudahan, semuanya
akan baik-baik saja.
OK.
Jadi Anda hanya dapat memiliki satu hal semacam mendengarkan pada port sekaligus.
Solusi lain akan menjadi bagi saya hanya mengedit program itu dan membuat
rasanya 1338 atau sesuatu seperti itu.
>> Tapi sekarang tidur berjalan.
Jadi mari kita benar-benar mencobanya dalam Browser saat ini karena itu adalah
sedikit tanpa kegirangan untuk melihat dalam terminal.
Jadi aku hanya akan pergi ke yang 127 alamat lagi di 1337.
Dan jika Anda bisa melihatnya -
Saya tidak tahu apakah Anda bisa - tapi saya browser mengambil sangat, sangat panjang
waktu untuk memuat atau seperti lima detik.
>> Dan kemudian setelah itu, akhirnya berakhir respon.
Dan Anda tidak bisa melihatnya karena hal digerakkan diatas sedikit, tapi jika saya membuat
ini lebih kecil sedikit, Anda bisa melihatnya mengatakan hey.
Jadi saya mendapat hey, tetapi setelah lima detik.
Dan mungkin sedikit lebih bersih untuk melihat di sini pada terminal, jadi aku
akan melakukan -
mari kita lakukan di sini -
mari kita lakukan Curl alamat tersebut lagi dengan 1337.
Dan aku hanya jenis harus duduk di sini selama lima detik.
Tapi perhatikan bahwa server dapat menerima tanggapan baru.
Jadi mencetak hey.
>> Dan untuk demo ini, pada dasarnya apa yang Aku dapat dilakukan di tab lain ini -
jadi katakanlah saya melakukan ini di tab lain, Aku akan melakukan Curl dan sama
hal lagi.
Dan aku akan mencoba untuk menendang ini orang off pada waktu yang sama.
Jadi aku akan melakukan hal ini, dan aku akan berlomba di sini dan aku
akan melakukannya lagi.
>> Dan mari kita membuatnya sehingga Anda bisa melihat keduanya.
Itu salah satu dicetak hey dan satu yang dicetak hey semua jalan di -
mari kita lakukan percobaan itu lagi.
Sebenarnya, mari kita gunakan ini trik, kalau itu OK.
>> Jadi saya akan menggunakan hal shell yang memungkinkan saya untuk dasarnya menjalankan dua salinan
program ini secara paralel.
Jadi itu akan menjalankan program pertama dan program kedua secara paralel.
Jadi sekarang jika saya tekan Enter, itu akan untuk membuat permintaan yang cukup banyak
seketika pada saat yang sama.
Jadi mari kita memberikan suntikan ini.
>> Jadi sekarang melihat hal itu mengatakan dua proses.
Dan jika Anda penasaran, bahwa 27.000 nomor pada dasarnya adalah proses ID.
Dan kemudian melihat, mereka dicetak hey pada saat yang sama.
Itu tidak seperti kami harus menunggu lima detik untuk satu dan kemudian setelah itu,
lima detik kemudian mendapatkan kedua.
Jadi itu semacam, dalam beberapa hal, itu tidak benar-benar bukti, tapi itu
bukti intuitif bahwa itu bukan hanya seperti menunggu lima detik dan memblokir
seluruh benang.
OK keren.
>> Jadi Aaron mengajukan pertanyaan sebelumnya bahwa itu, baik apa jika kita melakukan sesuatu -
Yep?
>> AUDIENCE: Tunggu.
Bagaimana adalah bahwa berbeda dari printf penyangga, meskipun?
Tidak secara otomatis melakukan itu?
Mengapa kita perlu khawatir tentang hal itu?
>> KEVIN Schmid: Oh, bisa Anda mengatakan bahwa sekali lagi?
>> AUDIENCE: Tidak suka printf penyangga melakukan hal yang sama persis?
>> KEVIN Schmid: The printf penyangga?
>> AUDIENCE: Ya.
OK.
Bukankah di salah satu kuis mereka berbicara tentang bagaimana jika Anda benar printf
sesuatu dan kemudian memilikinya jeda satu kedua, dan kemudian Anda memilikinya lingkaran sepuluh
kali, itu akan menunggu sepuluh detik dan kemudian printf semuanya bersama-sama?
>> KEVIN Schmid: Oh, OK.
>> AUDIENCE: Apakah melakukan hal yang sama hal maka dalam hal ini?
>> KEVIN Schmid: Jadi pertanyaannya adalah pada dasarnya di salah satu mantan kuis
atau sesuatu, ada pertanyaan yang pada dasarnya jika Anda mengatakan print f 10
hal pada suatu waktu dan kemudian tidur seperti di proses mencetak mereka keluar,
pada akhir untuk beberapa alasan, itu akan hanya membuang mereka semua keluar di layar.
Jadi ada semacam dua berbeda konsep di sini.
>> Jadi saya kira satu hal adalah bahwa, dalam hal ini kasus, kita sedang berhadapan dengan dua berbeda
semacam orang yang meminta server untuk hal-hal pada waktu yang sama.
Dan alasan yang printf jenis menunggu seperti itu dan kesedihan semuanya
sekaligus lebih terkait dengan bagaimana printf jenis -
jadi cara printf sebenarnya dilaksanakan adalah pada dasarnya harus
berbicara dengan sistem operasi untuk menulis bahwa barang-barang ke konsol.
Jadi tidak ingin melakukan semua itu barang langsung ketika Anda mengatakan printf
beberapa string karena yang bisa mahal jika itu harus
melakukan itu setiap kali.
>> Jadi jika Anda melakukan printf hey, program Anda mungkin tidak benar-benar mencetak bahwa
segera ke konsol.
Ini mungkin berkata, OK, aku menulisnya.
Dan kemudian jenis menunggu Anda untuk memberikan sedikit lebih sebelum benar-benar
menulis itu ke konsol.
>> Jadi alasan bahwa itu terjadi -
dan itu agak tidak berhubungan untuk tidur -
adalah bahwa tidur adalah semacam hanya disuntikkan di sana untuk menunjukkan
fakta bahwa ia tidak menulis itu serempak.
Tapi alasan untuk itu hanya kinerja sehingga Anda tidak perlu
membuat banyak kontak untuk sistem operasi.
>> Tapi di sini, apa yang kita benar-benar mencoba untuk melakukan dengan hal tidur ini hanya menunjukkan
bahwa ketika kita memiliki dua orang mengunjungi website ini, itu tidak akan menempatkan
mereka dalam garis mana itu akan mengatakan Saya harus membantu Anda, dan kemudian ketika aku
benar-benar selesai membantu Anda setelah ini lima detik, maka aku akan
pindah ke orang berikutnya.
Jadi permintaan orang pertama tidak mengikat bahwa loop acara
jika itu masuk akal.
>> Tapi di sini adalah benar-benar sebuah contoh sesuatu yang akan mengikat
up loop acara.
Jadi, inilah fungsi mengerikan untuk menghitung n Fibonacci.
Ini benar-benar cara yang buruk Anda dapat menghitung jumlah Fibonacci n.
Dan ini sebenarnya hanya untuk mengakui di mana hal ini berasal,
sebenarnya ada -
Maksudku, Anda dapat mencoba untuk pergi menemukannya - tapi ada seperti blog yang sangat panjang
posting bahwa seseorang menulis.
Ini seperti salah satu hal Reddit.
Tetapi seseorang mengkritik Node.js, dan mereka menggunakan ini sebagai contoh.
Jadi aku agak ingin hanya menunjukkan dua perspektif yang berbeda hanya untuk mendapatkan
pemahaman umum tentang konsep-konsep balik dua hal.
>> Tapi ini dipilih hanya sebagai mengerikan, komputasi sangat tidak efisien
cara intensif untuk menghitung nomor Fibonacci n.
Jadi hanya sebagai catatan samping, mengapa itu mengerikan seperti dalam satu cara?
Yep?
>> AUDIENCE: Katakanlah Anda mulai dengan 1.000.
1.000 terbagi menjadi 999 dan 998.
Masing-masing ini terbagi menjadi dua hal.
Masing-masing ini terbagi menjadi dua hal.
>> KEVIN Schmid: Benar.
>> AUDIENCE: Semua jalan turun.
>> KEVIN Schmid: Tepat.
Jadi hanya untuk mengulang untuk kamera, jika saya panggilan bikinan on seperti 1.000 atau sesuatu
seperti itu, itu jelas tidak kurang dari atau sama dengan satu jadi aku akan
pergi ke lain kasus ini, dan kemudian aku akan untuk memanggil bikinan 999 ditambah bikinan 998.
Dan kemudian cukup banyak semua itu pekerjaan yang dilakukan adalah bikinan 999
jenis pada tingkat ini.
Jika Anda pergi ke bawah, itu bahkan lebih berlebihan dari itu, tetapi jika Anda hanya
berpikir komputasi fib 998 mendapat kita cukup dekat dengan bikinan 999.
Jadi kita harus benar-benar menjadi sedikit lebih pintar tentang bagaimana kita menggunakan kembali jenis
ini, tapi kami tidak menggunakan kembali hal-hal ini sama sekali.
Jadi bisa dibayangkan raksasa ini, pohon raksasa itu hanya mengerikan.
>> Tapi bagaimanapun, OK.
Jadi itu bohong.
Ini hanya membutuhkan beberapa saat untuk menjalankan.
Yep?
>> AUDIENCE: [Tak terdengar].
>> KEVIN Schmid: Oh, bisa Anda ulangi pertanyaannya?
>> AUDIENCE: [Tak terdengar].
>> KEVIN Schmid: Oh jadi ini hanya kode itu akan menjadi semacam pada
sisi server.
Jadi ini tidak akan ditemukan di browser atau apa pun.
Pada dasarnya apa yang kita miliki adalah bahwa ketika pengguna di sini cukup banyak merek
permintaan mereka lagi, ketika kita semacam membuat permintaan, kita akan memanggil
fungsi ini pada sisi server.
Dan kemudian kita akan mendapatkan hasilnya kembali dari memanggil fungsi itu.
Dan kemudian kita hanya akan mencetak kepada pengguna.
Jadi pengguna tidak benar-benar berurusan dengan fungsi ini terlalu banyak.
>> Apakah itu pertanyaan?
Apakah itu masuk akal?
OK.
Keren.
>> Jadi sekali lagi, kita melakukan seluruh res.writeHead ini hal mana kami mencetak
header.
Dan kemudian saya mengakhiri respon dengan melakukan angka ajaib adalah fib 45.
Jadi mari kita menjalankan server ini.
Jadi aku akan melakukan fib.js. Node
Jadi sekarang Server fib saya berjalan.
>> Dan kemudian di sini, aku akan untuk melakukan salah satu dari ini.
OK?
Jadi aku hanya akan mengatakan, Curl.
Jadi itu akan mengambil sedikit waktu tapi mudah-mudahan segera cepat selesai dan
itu akan mencetak 45 yang Fibonacci nomor.
>> AUDIENCE: [Tak terdengar].
>> KEVIN Schmid: Seharusnya bisa dilakukan segera.
Jadi harus mengambil 5-6 detik.
Saya tidak tahu itu hanya V8 menjadi super cepat, tetapi dalam hal apapun, ini adalah
contoh yang sangat singkat dan sengaja janggal dari non-sepele
perhitungan.
Jadi setelah beberapa saat, itu tidak mendapatkan ini.
>> Tapi sekarang, bagaimana jika saya melakukan itu jenis yang sama eksperimen seperti sebelumnya di mana saya membuat
dua permintaan pada saat yang sama?
Jadi di sini aku akan ke Curl pada alamat itu, dan aku akan
untuk melakukan Curl lain.
Dan ingat, ketika kita melakukan ini untuk tidur server, ketika kita pada dasarnya memiliki itu
setelah lima detik, mereka cukup banyak keduanya kembali tepat
sekitar waktu yang sama.
Jadi itu tidak terlalu terikat.
>> Tapi mari kita coba sekarang.
OK, jadi kita punya dua proses kami.
Ingat mereka adalah ID proses.
Ini akan menjadi sedikit canggung sementara kami kios.
Jadi mari kita tinggal di sini dan menunggu.
>> Jadi salah satu dari mereka harus datang kembali setelah seperti -
OK, jadi satu kembali.
Tapi mengapa tidak kedua satu kembali hanya belum?
Yep?
>> AUDIENCE: Server tidak dapat melakukan apa-apa sementara itu menghitung bahwa jumlah yang besar.
>> KEVIN Schmid: Benar.
Jadi respon itu hanya server benar-benar tidak bisa melakukan apa-apa sementara
itu menghitung bahwa nomor Fibonacci.
Jadi sekarang saya hanya punya saya dua hal kembali.
Tapi kurasa hanya untuk berpikir tentang kode sedikit lebih, bagaimana itu bekerja
dan segala sesuatu.
>> Jadi fungsi ini di sini adalah kode yang Aku sudah mengatakan server ini untuk menjalankan ketika
menerima permintaan yang masuk baru.
Jadi itu hanya akan berjalan melalui ini seluruh kode, dan kemudian itu akan pergi
kembali ke loop acara dan kemudian melanjutkan memeriksa untuk acara baru.
Jadi pada dasarnya apa yang telah kita terjadi adalah server
mendengarkan hal-hal baru.
Orang pertama meminta apa 45 adalah.
Kami menjalankan kode ini untuk menghitung itu.
Kode ini diperlukan sekitar lima sampai enam detik untuk menjalankan.
Kemudian kami kembali ke loop acara dan memeriksa permintaan baru.
>> Jadi ini adalah sebuah contoh bagaimana, jika Anda memiliki hal-hal yang disebut menghitung
terikat, atau menggunakan banyak komputasi, bukan kekuasaan, tapi seperti yang
komputasi intensif -
Saya kira satu hal untuk mengatakan tentang hal ini adalah bahwa fungsi ini benar-benar melakukan,
untuk sebagian besar, cukup berguna kanan kerja.
Seluruh waktu yang callback yang Fungsi berlari, itu cukup
banyak menghabiskan sebagian besar waktunya hanya komputasi nomor yang n Fibonacci.
>> Tetapi kami hanya memiliki satu thread untuk menangani.
Dalam model Apache, ketika dua orang membuat permintaan untuk mendapatkan bikinan 45, kita
akan memiliki dua benang yang berbeda.
Dan kemudian pekerjaan sistem operasi pasti, atau tingkat pengguna
kode yang mengelola benang, akan sudah telah mengiris bahwa sampai pada
CPU, atau bahkan jika Anda memiliki beberapa CPU, mendistribusikannya secara merata di seluruh CPU
sehingga mereka berdua finish kira-kira pada waktu yang sama.
>> Jadi hanya untuk menunjukkan bagaimana kita bisa mengurutkan dari - dan ini bukan yang sempurna Total
solusi, tapi semacam bagaimana kita bisa membuat kembali ke sini dan melakukan
sedikit lebih baik.
Jadi apa yang saya miliki di sini adalah sebuah program yang disebut Fib C. Dan ini pada dasarnya menggunakan
satu lagi modul Node disebut Proses Child Modul.
Jadi saya telah menyertakan bahwa di atas jenis seperti saya akan melakukan pound termasuk
process.h anak atau sesuatu.
Sekarang saya memiliki akses ke variabel CP ini yang memiliki semua fungsi saya.
>> Jadi sekarang apa yang saya lakukan dalam menanggapi ini handler adalah saya sedang menjalankan program ini
dot slash fib 45.
Jadi apa yang saya lakukan - dan aku hanya akan untuk melangkah keluar dari program ini untuk
sedikit -
adalah saya telah menulis sebuah program C yang pada dasarnya menghitung
nomor Fibonacci n.
Jadi di sini hanya sebuah program yang kutulis di C yang menghitung ini.
Saya dapat mengkompilasi, dan saya dapat menjalankan itu pada baris perintah.
Dan itu akan menghitung Nomor 45 Fibonacci.
>> Jadi melihat itu hanya membutuhkan cukup banyak selama.
Aku mungkin bisa menggunakan dasbor 03 untuk mengoptimalkan atau sesuatu seperti itu,
tapi aku hanya melakukan seperti biasa pengaturan compiler.
Dan mencetak it out.
>> Tapi sekarang, apa yang saya agak lakukan?
Oh maaf, file yang salah.
Jadi saya melakukan hal yang sama dengan header seperti sebelumnya.
Lalu aku melakukan cp.exec ini.
Jadi apa ini yang akan dilakukan adalah itu akan menjalankan program ini.
Tapi cara ini bekerja adalah bahwa itu tidak akan menunggu
program untuk menyelesaikan.
Itu hanya pada dasarnya mengatakan mengeksekusi program ini.
Jadi pada dasarnya jenis ini ke dalam perintah jenis prompt.
>> Dan kemudian, ketika Anda sudah selesai dengan itu, menjalankan fungsi ini.
Jadi sekarang kita mendapatkan semacam ini semuanya dipulihkan
Sepertinya kita tidak menunggu.
Apakah semacam itu masuk akal?
Yep?
>> AUDIENCE: [Tak terdengar]?
>> KEVIN Schmid: Jadi ini benar-benar akan membuka proses baru untuk melakukannya.
Jadi ini sebenarnya, dalam beberapa hal, jahat, tidak super jahat, tetapi
penting untuk mengatakan bahwa ini adalah jenis akan kembali ke, di satu sisi, Apache
Model mana yang kita lakukan benang dan proses untuk setiap permintaan atau
proses untuk setiap permintaan.
Jadi ini adalah jenis analog untuk apa Apache.
Dalam beberapa kasus, itu hanya akan menggunakan baru benang, yang sedikit lebih banyak cahaya
berat daripada proses, tapi Apache bisa berakhir forking proses baru
yang merupakan jenis apa yang kita lakukan di sini implisit dengan melakukan dot slash fib 45.
>> Dan kemudian dalam hal ini, kita seperti dikenakan biaya yang sama proses.
Jadi ini hanya satu hal yang dapat Anda lakukan.
Tapi hanya untuk menunjukkan semacam ini berjalan.
Dan pembicaraan ini hanya benar-benar ditujukan untuk menyajikan program semacam ini sebagai
cara untuk menunjukkan perspektif yang berbeda pada bagaimana merancang server seperti itu.
Jadi ini berjalan, dan kemudian jika saya lakukan ini lagi, aku punya dua ID proses.
>> Mari kita bicara tentang hal untuk menunjukkan.
Jadi melihat bahwa mereka secara bertahap.
Itu keren.
Karena itu 27.122 sebelumnya.
Tapi perhatikan sekarang, mereka kembali di sekitar waktu yang sama.
>> Dan sekarang, pertanyaan yang bagus untuk bertanya tentang mengapa adalah bahwa kasus ini, pekerjaan yang
adalah sekarang untuk membuat semacam hal-hal ini jenis bermain adil dengan masing-masing
lain, ini dua contoh dot slash fib 45 bahwa aku berlari
atau Node berlari?
Siapa yang semacam membuatnya adil bahwa mereka berdua mendapatkan jenis skor run time?
>> AUDIENCE: [Tak terdengar].
>> KEVIN Schmid: Ya.
Jadi pada dasarnya, ketika saya melakukan dot slash fib 45 atau sesuatu seperti itu, sekarang
jenis hingga sistem operasi untuk menangani runtime dari program-program tersebut.
Dan sekarang mereka dapat menjadwalkan pada CPU yang berbeda atau
dapat jadwal mereka.
Hal ini dapat mengiris waktu yang CPU mendapatkannya atau bahwa mereka mendapatkan
untuk berjalan di satu CPU.
Jadi itulah ide di balik itu.
Apakah itu masuk akal untuk semua orang?
Jadi sekarang Node tidak benar-benar memainkan bagian dalam membagi tugas-tugas ini.
OK.
>> Sehingga hampir untuk contoh.
Saya hanya ingin menunjukkan satu hal lagi karena banyak sejauh ini telah
tidak benar-benar super praktis dalam beberapa kasus.
Aku bisa membayangkan pulang ke rumah setelah ini berbicara dan sesuatu dan berkata seperti,
baik saya agak keluar dari pembicaraan bahwa Aku bisa membuat Fibonacci Server untuk
tugas akhir saya.
Jadi di sini hanya semacam satu contoh lagi yang diharapkan akan menjadi -
mungkin tidak, tapi mungkin - sedikit lebih semacam relevan dengan tugas akhir dan
berpikir ke depan untuk hal-hal seperti itu.
>> Jadi ini adalah chat.js.
Jadi ini semacam seperti beberapa sampel kode sisi server yang dapat Anda gunakan untuk
mendirikan sebuah obrolan kecil server seperti Anda mungkin telah melihat pada
Facebook Chat atau apa pun.
Jadi saya tidak mengatakan ini adalah seperti Facebook Chatting, tapi ini adalah jenis
seperti baik - mungkin tidak baik, tapi mungkin baik - titik awal untuk mengobrol
server untuk website Anda untuk tugas akhir.
Jadi mari kita lihat apa yang dilakukannya.
>> Jadi kita mendapatkan hal yang khusus ini di atas, ini var SIO
sama membutuhkan Socket.IO.
Jadi ini adalah hal lain yang tidak benar-benar datang dibundel dengan
Node tetapi Anda dapat menginstalnya.
Ini adalah modul Node.
Jadi itu hanya seperti beberapa ekstensi untuk Node.
>> SocketIO sebenarnya sangat agak dingin.
Ini adalah abstraksi yang pada dasarnya apa itu yaitu adalah memungkinkan Anda untuk
memiliki aliran komunikasi antara web
browser dan web server.
Jadi untuk sebagian besar sejauh ini, kami sudah kedua sangat cepat satu detik atau
komunikasi antara kedua web browser dan web server.
Jadi pada dasarnya pergi ke google.com, get barang-barang itu, mengirim kembali, dan kemudian
kita sudah selesai.
Kita tidak pernah berbicara lagi sampai jenis pengguna dalam sesuatu yang lain.
>> Tapi apa Socket.IO dan serupa hal - dan SocketIO sebenarnya adalah salah satu
dari hal-hal yang dibangun sebagai WebSocket yang merupakan semacam tersedia
sebagai bagian dari HTML5 -
yang memungkinkan Anda untuk memiliki ini melanjutkan dialog.
Dan ini sangat berguna dalam server obrolan semacam itu karena
jenis seperti dialog berkelanjutan di beberapa hal karena jika Anda mengobrol
dengan seseorang, kini Anda dapat hanya mengirim pesan bawah pipa, dan kemudian
server dapat mengirim pesan ke bawah pipa ke orang lain Anda
mengobrol dengan.
Dan kemudian Anda dapat memiliki ini pertukaran seperti itu.
>> Jadi itulah jenis apa SocketIO baik untuk.
Alasan bahwa SocketIO menggunakan WebSockets sebagai salah satu hal adalah bahwa di
Selain WebSockets just plain tua, juga melakukan beberapa trik pada dasarnya
membuat browser yang kompatibel.
Jadi browser seperti Internet Explorer sayangnya tidak mendukung WebSockets
langsung dari kotak.
Jadi menggunakan beberapa jenis lain keren rapi hal dengan Adobe Flash untuk memungkinkan
Anda memiliki dukungan browser lintas.
Jadi itu benar-benar berguna.
>> Dan sebenarnya, aku tahu aku jenis berjalan pada waktu di sini, tapi CS50
Diskusikan, apakah Anda pernah melihat sesuatu seperti, saya tidak tahu, jadi kosong dan begitu juga
membalas posting ini atau sesuatu seperti itu, fitur itu?
Itu SocketIO.
Jadi, ketika seseorang mulai mengetik di mendiskusikan kotak untuk membuat balasan atau
sesuatu, browser Anda tidak apa disebut di SocketIO memancarkan semacam
Acara yang mengatakan seseorang yang membalas posting ini.
>> Kemudian server mengatakan, OK, apa yang harus saya lakukan?
Nah sekarang saya harus memberitahu orang-orang lain yang berada di CS50 Diskusikan mencari
di posting ini bahwa seseorang yang menjawab.
Jadi itulah jenis apa SocketIO adalah baik untuk, ini melanjutkan jenis
aliran dialog.
OK.
>> Jadi apa yang saya miliki di sini - dan kami hanya akan mengabaikan berbagai koneksi
untuk sedikit -
apa yang saya lakukan adalah saya mendengarkan lagi.
Jadi itu hanya cara di Socket.IO adalah mengatakan mari kita mendengarkan pada port ini.
Dan kemudian saya melakukan ini pada koneksi.
Jadi itu hanya pada dasarnya Socket IO cara untuk mengatakan, ketika kita menerima
koneksi, saya ingin Anda untuk menjalankan kode ini.
>> Dan melihat bahwa alih-alih memiliki rec dan res berlalu di sana aku punya Socket.
Dan ide Socket ini pada dasarnya adalah ini hal yang dapat Anda menulis dan membaca
dari yang memiliki pengguna pesan mungkin.
Dan pesan yang akan Anda kirim bisa melalui Socket itu.
Apakah itu masuk akal?
Jadi hal ini terus.
>> Jadi apa yang saya lakukan adalah saya sebut Socket.emit.
Dan memancarkan membutuhkan cukup banyak dua argumen.
Argumen pertama adalah string hanya mewakili jenis
hal yang Anda memancarkan.
Jadi untuk kasus ini, saya sudah menggunakan string pesan baru ini.
Dan itu hanya pada dasarnya mengatakan bahwa jenis hal ini, apa yang saya
pengiriman, adalah pesan baru.
Jadi, Anda dapat mendengarkan jenis tertentu seperti pesan baru atau apa pun
dengan menggunakan dot pada.
>> Jadi koneksi dan pengguna dikirim ke sana, jika Anda melihat di mana kita sebut titik pada,
mereka adalah string lain yang mewakili jenis pesan pengguna.
Jadi pada dasarnya Anda dapat memiliki memancarkan ini salah satu jenis pesan tersebut, dan
kemudian melakukan sesuatu dalam menanggapi salah satu jenis pesan tersebut
>> Jadi aku memancarkan pesan baru ini.
Kita akan mengabaikan connections.push untuk kedua.
Tapi kemudian saya katakan, Socket.on pengguna dikirim.
Jadi sekarang itu jenis seperti ketika pengguna mengirimkan saya pesan, saya ingin
Anda untuk menjalankan kode ini.
Dan perhatikan bahwa fungsi anonim adalah mengambil dalam variabel ini
disebut data yang pada dasarnya akan memiliki pesan pengguna.
>> Jadi sekarang mari kita bicara tentang jenis koneksi array.
Jadi ini dirancang untuk chat client di mana pada dasarnya semua orang semacam di
chat sama kamar.
Jadi pada dasarnya, apa yang kita butuhkan untuk menjaga sekitar beberapa array pada dasarnya
mewakili semua orang mengobrol di beberapa cara, jika itu masuk akal.
Benar?
Karena kita perlu tahu siapa orang-orang begitu kami dapat mengirimkan mereka pesan
bahwa orang lain mengirimkan kepada kami.
>> Jadi apa kode ini tidak adalah ketika pengguna mengirim pesan - itulah jenis
acara -
kita akan menjalankan kode ini.
Dan apa yang kita lakukan adalah kita jalankan melalui ini array itu kita telah disebut koneksi.
Dan cukup banyak untuk setiap koneksi kecuali satu yang kita, itu
apa kode ini mengatakan, kami mengirim baru pesan dengan pesan terlampir
informasi.
>> Jadi jika Anda melihat di sini, apa yang saya lakukan ketika pengguna benar-benar membuat baru
koneksi Saya telah menambahkan dengan Metode JavaScript.push, ini adalah
pada dasarnya hanya mengatakan seperti menambahkan bahwa Socket sebagai nilai ke
koneksi array kita.
Jadi sekarang ketika kode ini berjalan, maka akan mengirim hal-hal tertentu kepada mereka
koneksi.
Jadi ini bisa menjadi titik awal yang baik untuk membuat server obrolan
atau sesuatu yang serupa.
>> Dan jenis hal yang keren adalah bahwa kode yang Anda lihat di sini untuk seperti dan
memancarkan dan hal-hal seperti itu adalah sama jenis kode JavaScript yang akan Anda
menulis dalam browser untuk berinteraksi dengan server.
Jadi itu sebabnya SocketIO adalah jenis rapi dan berguna dengan cara itu.
>> Oh dan satu hal lagi cepat.
Ada tugas akhir CS50 tahun lalu yang pada dasarnya dilaksanakan chat
server Node.js.
Saya pikir itu Harvardchats.org tapi aku tidak -
OK.
Saya tidak yakin apa URL, tapi Saya dapat mengirim yang keluar setelah itu.
Tapi itu semacam dingin apa Anda dapat melakukannya dengan Node.js.
>> Jadi saya berharap, secara umum, kalian memiliki pengertian yang baik dari apa Node.js berguna
dan bagaimana Anda mungkin dapat diterapkan untuk tugas akhir Anda.
Saya akan mengirimkan lagi sumber daya bersama dengan ini.
Dan terima kasih untuk datang.
Terima kasih.
>> [Tepuk Tangan]