Kevin Schmid: Kamusta lahat ng tao. Maligayang pagdating sa CS50 pantas-aral sa Node.js. Ang pangalan ko ay Kevin. Isa akong CS50 tf. At ako ay uri ng tulad ng talagang nagaganyak tungkol sa seminar. Sa tingin ko Node.js ay napaka-cool. Umaasa ako na ito pantas-aral ay maaaring magamit bilang isang mahusay na, hulaan ko, pambuwelo para sa ang ilan sa iyong huling proyekto kung ikaw ay interesado sa paggamit isang bagay tulad ng Node.js. Padadalhan ka namin ng isang uri ng magsimula ang pantas-aral sa pamamagitan ng pakikipag-usap lamang tungkol sa isang maliit na bit ng uri ng background kakayahang sumukat mga pananaw ng Node.js, at pagkatapos ay ipapakita namin ilipat sa ilang mga halimbawa code. At kukunin ko ang code sa isang website, at maaari kang tumingin sa ang code. At pagkatapos ng seminar, magpapadala ako-uri-uriin ng talk tungkol sa kung paano mo maaaring i-set up Node.js sa iyong computer. OK. Kaya sabihin makapagsimula. Kaya hulaan ko gusto ko lang makipag-usap tungkol sa mga web server, talaga, una. At upang simulan ang talakayang ito, ako isa lamang magkaroon ng isang diagram kung saan ay mula sa ang aklat-aralin na ginagamit para sa CS61, na talaga nagpapakita ng pakikipag-ugnayan sa pagitan ng isang proseso sa client, tulad ng iyong web browser o tulad ng iyong pakay client o ang isang bagay tulad na, at isang web server. Kaya ang ganitong uri ng mukhang katulad ng sa larawan na nakita mo sa panayam sa Miyerkules kung saan talaga mayroon kaming ilang proseso ng client tulad ng Google Chrome. At pagkatapos ay hakbang isa ay ang Nagpapadala ang client ng isang kahilingan. Kaya maaari na maging isang bagay tulad na rin sabihin bisitahin, hindi ko alam, CS50.net. Kaya magbibigay kami na kahilingan. At tandaan ang kahit sino ang pangalan ng ang protocol na tumutukoy kung paano na dapat na nakaayos ang kahilingan? Yep. Madla: [hindi marinig]. Kevin Schmid: Mismong. Kaya ito ay tulad ng HTTP, tama? Kaya isa lamang ang pagtutukoy para sa kung paano na kahilingan ay dapat na aktwal na inilatag out, dahil sa pagtatapos ng araw, na kahilingan ay talagang gusto lamang ng isang string na talaga sabi na gusto ko ito. At ang mga pagtutukoy para sa na ay HTTP. Kaya na ay tulad ng isang protocol. Kaya pagkatapos na matanggap ang server na kahilingan. Kaya mo guys may naka-install sa isang web server sa CS50 appliance. Ito ay Apache. At sa linggong ito kapag nagtatrabaho ka sa problema set pitong, makikita mo talaga na nagtatrabaho may web server na iyon. Kaya natatanggap ang server na kahilingan, at pagkatapos ito ay upang uri ng scratch nito ulo at sabihin tulad na rin kung ano ang gagawin ko na may ito? Kaya batay sa kung ano ay nagpasiya ito gawin, at pagkatapos ay maaari itong magkaroon upang makipag-ugnay sa ilang mga uri ng mapagkukunan. At na mapagkukunan ay maaaring isang maraming iba't ibang mga bagay. Para sa isa, ito ay maaaring lamang tulad ng isang static HTML file. Kaya ito ay maaaring lamang na tulad ng ilang HTML na ay tulad ng para sa ang iyong personal na website. Ito ay maaaring maging isang static na file tulad ng isang imahe o tulad ng isang pelikula na mayroon ka. Maaaring ito kahit na mayroon na makipag-usap sa ilang mga uri ng database tulad ng isang MySQL database. Kaya ito ay hindi laging kailangang ipaalam may isang mapagkukunan, ngunit sa ilang mga kaso, ng dati. Kaya pagkatapos ay kung ano ito ay pagpunta sa gawin pagkatapos na ito ay pagpunta sa ipadala pabalik ang tugon. At ang tugon para ito ay tinukoy na rin sa pamamagitan ng HTTP. Kaya pagkatapos ay ang client ay makakatanggap ng ito. Maaari itong punitin ito bukod at iproseso ito. At pagkatapos mong makakuha ng isang web page tulad ng Google o CS50.net o ano naman ka napunta sa. OK? Kaya ito ay ang mga pangunahing pakikipag-ugnayan na kami ay pagpunta sa ay pagharap sa. At kami ay medyo magkano ang pagpunta sa maging tumututok sa bahaging ito ng pakikipag-ugnayan, ang server. OK. Cool. Sinuman ay may anumang mga katanungan sa ngayon? OK. Kaya tulad ng sinabi namin, makakatanggap ng web server ibibgay ito ang HTTP na kahilingan at pagkatapos ay Tugon ng HTTP. At tulad ng usapan natin ang tungkol sa bago, ang Web server CS50 appliance ay Apache. Kaya kapag nagtatrabaho ka guys sa P set pitong, ka pagpunta sa ay nagtatrabaho sa Apache web server. Hindi ka kailangang talagang gumagana may Apache direkta masyadong maraming. Ikaw uri ng i-configure ang Apache ng kaunti kapag tinukoy mo ang virtual host o ang v-host, at susuriin namin sa na sa ilang sandali. Ngunit isa lamang, ang Apache web server set up upang gumana sa uri ng PHP ng sa labas ng kahon. Kaya kung ano talaga ang mangyayari ay kapag pumunta sa iyo sa isa sa iyong mga website tulad ng, sabihin nating, lokal host slash index.PHP o isang bagay, ay nagpapadala ng iyong browser na kahilingan, at pagkatapos ay Apache ay upo doon at figure out ang gagawin sa ito. At ang mga aksyon ay upang isakatuparan ang code na iyon sa index.PHP at pagkatapos ay ipadala ito off muli. Kaya doon lang iyon. Kaya uri ng namin usapan tungkol dito. Kaya maaari itong maghatid lamang ng isang static na file o tumakbo ang ilang mga code na PHP at pagkatapos ay i-isyu ang tugon. Kaya pagkatapos ng isang pangkaraniwang tanong na maaaring dumating up ay mahusay, paano ko talaga naming harapin may pagkakaroon ng maramihang mga gumagamit sa parehong oras? Kaya isipin kung ikaw ay ang pagsusulat ng web server, kung mayroon kang isang web server na na sinusubukan mong isulat sa isang bagay tulad ng C o isang bagay tulad na, talaga maaari mong isipin ang tungkol sa kung paano doon maaaring maging ng ilang mga uri ng code na Gusto matanggap ang kahilingan, ngunit pagkatapos ay ito ay upang gawin ang lahat ng ito gumagana dito. Maaari itong magkaroon ng upang, halimbawa, makipag-ugnay sa database o isang bagay tulad na. Mag-right? At pagkatapos ay nais nitong gawin uri na ng pagproseso at pagkatapos ay ibinabalik ang tugon. Kaya na tulad ng mataas Pangkalahatang-ideya ng antas. Ngunit ito ay hindi agad halata kung paano mo Maaari gawin iyon upang ang dalawang tao o kahit na 1,000 mga tao ay maaaring gumana sa iyong web server sa parehong oras. Kaya ang solusyon na gumagamit ng Apache ay tinatawag na mga thread o mga proseso. Kaya Maaaring narinig mo ng mga tuntunin bago. OK lang kung hindi mo pa, ngunit sa tingin lamang tungkol sa mga thread o mga proseso bilang paraan para sa isang operating system o isang programa ng gumagamit o ang isang bagay tulad na o ng isang web server sa uri ng execute ng maramihang mga bagay nang sabay-sabay. Kaya maaaring narinig mo na ang mga termino tulad ng mga thread ng execution. Kaya ito ay uri ng tulad ng ikaw ay uri ng multitasking. At kung na iyong nakita sa mga kahon ng iyong laptop, o isang bagay tulad na, multicore, ano ang maaari mong gawin ay maaari kang magpatakbo ng dalawang magkaibang mga thread sa iba't ibang mga bahagi ng CPU sa gayon ay maaari nilang talaga mangyari sa parehong oras. Kaya ito ay talagang malakas. At ito ay uri ng Apache ni solusyon sa problemang ito. Kaya ang naroon uri ng tulad ng anumang mga isyu may ganitong diskarte bagaman? Kaya hulaan ko ako uri ng ay sumulat ang mga ito doon. Ngunit pareho ng mga ito uri ng gumamit ng maraming memorya. Ito ay napaka mahal upang lumikha ng ang isang thread o isang proseso. At bahagi ng pangangatwiran ay na lamang tulad ng kapag nagpapatakbo ka ng isang programa C tulad ng iyong pangunahing at pagkatapos na tawag isa pang function, na may ang ilang mga uri ng stack. Kaya mga thread ay nangangailangan din ng isang buong hiwalay na stack na ay maaaring maging masyadong malaki. At kung maaari mong isipin na ang pagkakaroon tonelada ng mga user sa iyong website, magkakaroon ka ng ng maraming iba't ibang mga thread. Iyon ay isang pulutong ng mga stack sa pamahalaan at mapanatili. Kaya malaki ang pag-inom ng memorya. At pagkatapos, din, sabihin nating mayroon kang lamang isa CPU, o sabihin nating mayroon kang higit pang mga thread na mayroon ka mga multicores. Mag-right? Kaya sabihin nating na kayo ay nagkaroon 10 mga thread at nagkaroon ka lamang ng limang CPUs. Ikaw uri ng kailangang gawin bagay na ito kung saan lumipat ka sa pagitan ng kasalukuyang isa na sa pagtakbo dahil sa iyo Hindi maaaring tumakbo ang lahat ng 10 sabay-sabay. At na tinatawag na isang switch konteksto. At ang term na iyon talaga ay may isang pares ng mga iba't ibang konteksto, ngunit sabihin lamang isipin ito bilang paglipat sa pagitan ng dalawang mga thread. Iyon ay maaaring maging medyo mahal dahil talaga kung ano ang kailangan mong gawin ay sa iyo Mayroon upang itigil ang kung ano ang ginagawa mo, i-save ang estado ng na tumatakbo ang thread, at pagkatapos ay lumipat sa ibang lugar. Kaya ang lahat ng tao uri ng makita ang pagganyak ng bakit mga thread at ay maaaring maging isang maliit na mahirap hawakan mga proseso? At ay may tanong ka? OK. Cool. Sinuman ay may anumang mga katanungan? OK. Kaya kung tumagal kami ng isang hakbang pabalik para sa isang segundo, mayroong uri ng tulad ng isang pagmamasid na maaari kaming magsagawa ng tungkol sa ng maraming mga web application. At na talaga na marami sa mga ito talaga huwag gawin ang ganoong karaming mga kapaki-pakinabang gumana sa loob ng isang thread. Kaya ay nagsimula sa kahit sino P set pitong sa lahat? Kaya ang gusto mong marahil ilarawan ang ilan sa mga bahagi? Nakarating na nagtrabaho sa pag-login o ang isang bagay tulad na? Madla: Hindi. Kevin Schmid: OK. Wala iyon. Sorry. Ngunit isa lamang, sa P set, ikaw ay pagpunta sa ginagawang ng maraming uri ng mga query sa database upang makakuha ng ilang impormasyon mula sa database na. At kung ano ang iyong code ay pagpunta sa ginagawa, ano na proseso o Apache na Apache thread ay pagpunta sa ginagawa habang ito ay upang makipag-ugnay sa database ay isang uri ng ito ay magiging upo doon at ito ay pagpunta sa maging naghihintay para sa database upang tumugon. Ngayon na hindi maaaring mukhang na malaki isang humarap dahil ang database ay nasa iyong CS50 appliance, tama? Ngunit mayroong ilang uri ng network latency doon dahil ngayon sa web May upang magbigay ng sarili nitong kahilingan sa server ang database upang makipag-ugnayan sa database at pagkatapos ay kumuha na impormasyon pabalik. Kaya ngayon ito ay tulad na rin maghintay para sa akin, ako ay pagpunta sa pumunta makakuha ng isang bagay mula sa database at pagkatapos ay mayroong isang maraming naghihintay ng pagpunta sa. Ba na magkaroon ng kahulugan? At para sa ilang mga bagay na ito ay hindi na masama. Kung ito lamang ay may upang, halimbawa, access memory, na hindi gusto kalagim-lagim I / O latency. At kapag sinabi ko, I / O latency, kung ano ako nagre-refer sa ay tulad ng anumang uri ng tulad ng input output. Ngunit upang ma-access ang isang file sa disk, tulad ng kung Nais kong maghatid ng static HTML mag-file na nasa aking mga web page o ang isang bagay tulad na, uri ng ko kailangang mag- itigil para sa isang bit, mabasa ang file na sa mula sa disk, at pagkatapos ay sa prosesong iyon Hinihintay ko. Hindi ako paggawa kapaki-pakinabang trabaho. Ito ay hindi totoo ng lahat ng bagay, ngunit ito ay karaniwan sa mga application tulad ng P hanay pitong at ng maraming mga application na hindi ka talaga ang paggawa magkano ang pag-iisip. At kapag sinabi ko pag-iisip, Ibig kong sabihin tulad ng computational trabaho. Kaya computational trabaho ay maaaring maging isang bagay tulad ng, sabihin nating, ginusto mong magsulat ng isang web server na lang compute ang nth numero ng Fibonacci. Iyon ay mukhang hindi isang partikular na masaya web server. Tulad ng hindi ko inaasahan site na iyon upang maging sa susunod na Facebook, ngunit iyon ay ilang uri ng computational trabaho. At maaari mong isipin na pinapalitan na may ilang iba pang mga uri ng kawili-wiling computational trabaho. Sabihin nating ikaw ay sumusulat ng isang bagay na kinakalkula ang grado ng paghihiwalay sa pagitan ng dalawang tao o ang isang bagay tulad na. Kaya na ang may sangkot ilang uri ng pagkalkula, tama? At kahit pagkatapos, upang magawa na mayroon pa rin sa iyo na gawin ang isang pulutong ng paghihintay para siguro mayroon kang upang i-query ng isang database upang tumingin up kung sino ang mga kaibigan na may nag-o ang isang bagay tulad na. Kaya mayroong ganoong uri ng kuru-kuro ng computational trabaho. Ba na magkaroon ng kahulugan? Kahit sino ay may anumang mga katanungan ba? Oh at hulaan ko bang ilagay ko chat server doon dahil ang mga chat server ay uri ng isa pang magandang halimbawa ng ito. Ang isang chat server ay walang gawin magkano ang pag-iisip. Ito lamang ay may upang maghintay para sa mga tao upang magpadala ng mga mensahe at pagkatapos ay kapag nila, ipadala ang mga ito. OK? Kaya sa pagbabalik-tanaw lamang muli, Apache at katulad na mga server sa web tulad na tinidor isang marami ng mga thread at mga proseso na kung saan ay maaaring maging uri ng mapag-aksaya. Kaya hulaan ko ang tanong na maaaring dumating mula sa na kailangan namin upang magkaroon maramihang mga thread at mga proseso? Paano kung nagkaroon lamang namin ang isa? Kaya sabihin uri ng pintura ng isang larawan ng kung ano ang magiging hitsura. Kaya gumamit ng thread isa lamang ipaalam. OK? Kaya isipin lamang ito sa isa thread. Ipagpalagay hindi talaga namin ginagawa Hayaan na magkano ang kapaki-pakinabang - at kapag sinabi ko kapaki-pakinabang, ibig sabihin ko computational trabaho - sa mga maramihang mga thread bago. Kaya sabihin uri ng pag-isahin ang lahat ng bagay sa isang thread. Kaya kung ano kung nagkaroon kami ng isang thread na uri na ng lang napupunta sa paligid sa loop at Patuloy ginawang isang bagay sa mga pagsusuri bagong mangyari. Kaya halimbawa, isang bagong bagay ang nangyari maaaring ibig sabihin Nakakuha ako ng isang bagay na bumalik mula sa ang database, o isang tao ay nagpadala ng sa akin ng isang bagong HTTP na kahilingan. Kaya mga mga uri ng mga kaganapan na mangyayari, tama? At pagkatapos ay kung ano ang aking maaaring gawin kapag ang mga bagong bagay na mangyari ay sa parehong thread ng pagpapatupad, ang nag-iisang thread ng pagpapatupad, ang maaari kong tumawag sa ilang mga code na Gusto pangasiwaan sa partikular na bagay. Kaya halimbawa, kung ang nakuha ko ng isang bagay na pabalik mula sa database, maaari ko bang patakbuhin ang aking maliit computational bahagi nito na talaga lang naghahanda ang bagay sa ipadala pabalik sa user. Kaya ang ginagawa na uri ng make kahulugan? Ngunit ano ang talaga ang implikasyon ng ito? Mag-right? Dahil na naisulat namin ng maraming code na - at ako lamang ang pagpunta sa tumalon nang mas maaga sa mga slide kung na OK lang. Kaya kung hindi tututol kayo, ako lamang pagpunta sa tumagal ng isang hakbang pabalik. Kaya ang ganitong uri ng bagay ay na tinatawag na isang loop ng kaganapan. OK? At ito ay uri ng mga pangunahing ideya sa likod ng Node.js. Kaya kung ano talaga ginagawa Node.js bilang web server ay mayroong isang solong thread na isa lamang ng pagpunta sa paligid sa isang loop tulad ng isang habang isang uri ng mga ilalim ng hood ng Node.js na patuloy pagsusuri, nakatanggap kami ng mga bagong bagay? At pagkatapos ay tatakbo ito handler na-set up mo. Ngunit isang mahusay na katanungan upang hilingin ay, paano kami makakagawa ng mangyayari ito sa umiiral na mga bagay? Kaya ko bang ilagay ang isang linya ng C code dito na talaga kamukha ito ng pagbukas ng mag-file, i-right? Ko pa lang ay dumating out niya sa isang album. Kaya nagkaroon ako upang buksan ang kanyang ng isang bagong file. Kaya ang paraan ng aming C code para sa operating - at hulaan ko ang dahilan kung pinili ko ang mga file ay dahil ito ay uri ng lawak ng I / O trabaho na nagawa namin sa C sa isang katuturan na mayroong input output. Kaya tinatawag naming ang code na ito na nagbubukas ito f. At pagkatapos ay sa susunod na linya sa aming mga programa, maaari na ngayong kami sa f. Kaya ito ay magiging isang halimbawa ng isang bagay na tulad ng sabaysabay o bina-block dahil sa na unang linya doon kami ay naghihintay hanggang namin makakuha ng open ang file. Kaya sa ikalawang linya, alam namin na kami ay maaaring gumana sa f, ngunit ibig sabihin nito ay hindi talaga tumakbo na pangalawang linya hanggang sa unang linya ay tapos na. Ba na magkaroon ng kahulugan? Kaya ito ay magiging masamang upang ilagay sa isang humahawak ng kaganapan. At ang mga dahilan para sa na ay na ganitong uri ng naghihintay ang isang, i-right? Kaya ito ay babalik sa amin pabalik upang ang parehong bagay. At ngayon kami ay hindi kahit na mayroon ang kapakinabangan ng maramihang mga thread o mga proseso dahil kami nakakuha isa thread sa Node.js. Ba na magkaroon ng kahulugan sa lahat ng tao? Madla: Maghintay. Kaya ano ang kapalit? Kevin Schmid: Oh, kaya yes. Kaya Pupunta ako upang makapunta sa ang kapalit. OK. Kaya kung ano kung nagkaroon kami ng isang bagay na mukhang ito? Kaya kung ano kung ngayon ko na-edit f magbukas ng kaunti? Kaya ako pagpasa sa parehong dalawang argumento tulad ng dati. Gustung-gusto ko pa rin ang mga bagong kanta na siya ay dumating out kasama. Ngunit ako ng pagpapasa ng isang third bagay na ay tinatawag na ito variable na code. Ngunit ano ang code talaga sa kontekstong ito? Ito ba ay tulad ng isang regular na variable C? Ito ay isang function, tama? At iyon na maaaring isang maliit na kakaiba dahil Ako ay talagang tulad ngayon ang pagpasa sa isang gumana sa isa pang function. Kaya ng ilang mga bagay upang tandaan tungkol sa ito. Ang isa, ako hindi tunay na pagtawag ang function ng code. Kaya hindi mo nakikita ang code na ito sa ang natitira paren, i-right paren. Lang ako sa pagpasa sa code. At sa C, ano ito ay talagang gawin ay ninyo ako ng pointer sa aktwal na code, at pagkatapos ito ay maaaring patakbuhin ito. Ngunit sa tingin lamang tungkol dito bilang ikaw ay pagpasa sa code upang tumakbo kapag file na ay binuksan. Ngunit ano ang ibig sabihin nito ay na ngayon ang natitira sa aking programa na maaaring gawin iba pang mga bagay-bagay, ay maaaring magpatuloy sa paggawa ng iba pang mga bagay-bagay habang kami, hindi talaga maghintay, ngunit mayroon lamang sa likod ng aming mga ulo na kapag na file bukas, run na code sa itaas. Ba na magkaroon ng kahulugan? At ngayon ang ideya sa likod ng Node.js ay na ang code na ito sa do mga bagay-bagay na may f bahagi ay dapat na medyo maikli at simple at direkta at hindi talaga maging napaka computationally intensive. Maaaring mayroon itong upang buksan ang isa pang file, ngunit na dapat ay medyo mabilis din dahil dapat itong lamang nating gawin ang isa pang f buksan at pagkatapos ay tumawag ito sa iba pang mga code. Kaya upang maging ganap na malinaw, ang f lamang buksan na ang ginagawa ng mga bagong Katy Perry kanta tapos mp3, na pupuntahan kaakit-akit magkano bumalik agad. At pagkatapos ay maaari naming lamang magpatuloy paggawa iba pang mga bagay-bagay dahil ang lahat na ngayon f bukas tawag ay ay sabihin talaga ang kalakip na f open code buksan ang file na ito at kapag tapos ka na ng pagbubukas na ito mag-file o kapag nakakuha ka ito pabalik, pagkatapos patakbuhin ang code na iyon. Ngunit ito ay hindi talaga tumakbo ang code na iyon. At nagkaroon ka ng isang katanungan? Madla: tila mo upang magpahiwatig ng ilang beses na ang pagdagdag computationally intensive code uri ng masira ang Hinihimok ng sistema [hindi marinig]. [Hindi marinig]? Kevin Schmid: Iyon ay isang mahusay na tanong. Kaya talaga akong magkaroon ng isang halimbawa ng kung paano maaari mong isama ang computationally intensive code sa ilang sandali. Kaya kapag makuha namin sa mga halimbawang code, Kukunin ko siguraduhin upang hilahin ang isa na. OK ba iyon? Salamat sa inyo. Ano ang iyong pangalan? Madla: Aaron. Kevin Schmid: Aaron ay may lumilitaw na isang napaka- magandang punto, na kung saan ay kung nagkaroon ako ilang computationally intensive code sa ang gawin mga bagay-bagay na may f bahagi, ang natitirang bahagi ng Hindi maaaring tumakbo ang aking mga programa at hindi maaaring makinig para sa mga bagong kahilingan o anumang bagay hangga't ang lahat ng bagay-bagay na ay tapos na. Kaya kung Sumulat ako Node code sa pangkalahatan maliban kung gagawin namin ang isang bagay tulad pupuntahan ko upang magmungkahi ng ibang pagkakataon kapag tinitingnan namin ang mga mga halimbawa code, mayroon akong upang makatiyak na ang ang aking code ay hindi itali ito loop kaganapan. Ba na magkaroon ng kahulugan? OK. Cool. Kaya nag-aalok ng Node.js ito framework na maaari kang bumuo ng mga kaganapan hinihimok ng mga server na may. Kaya mayroon itong mga uri ng asynchronous non-pagharang I / O aklatan, samantalang ang ang standard C library na nakapunta namin nagtatrabaho sa, tulad ng kung ikaw lamang gamitin ang mga ito sa parehong paraan na hindi namin ginagamit ang mga ito na may f bubukas at mga bagay-bagay, mga bina-block dahil talaga mo na kailangang maghintay para na file upang mabuksan. Ngunit nagbibigay sa iyo ng Node.js na at ito talaga Kaugnayan sa V8 ng Google JavaScript engine kung saan ay ang dahilan na Chrome ay kaya mabilis sa pagproseso JavaScript sapagkat ito May V8 engine na ito. Kaya alam ko na tunog tulad ng isa sa mga WWDC conference developer bagay kung saan sila ihagis lamang ng grupo ng mga numero ng sulat ng mga bagay para sa processors at sabihin ito ay kaya cool. Ngunit ito ay cool na na nila ginawa na ito dahil ang JavaScript - o siguro kung hindi ka pamilyar sa JavaScript pa dahil hindi pa namin ay nagkaroon ng ang mga aralin sa ito - ngunit JavaScript ay isang kahulugan wika. At ito ay masyadong isang mahalagang punto. Kaya mahalaga ito para sa aming web mga server upang maging mabilis, tama? At kung tayo ay lamang na tumatakbo JavaScript code na na-kahulugan na may lamang anumang lumang interpreter maaari itong maging mabagal. Kaya Node benepisyo mula sa pagkakaroon ito napakabilis na V8 interpreter. At hindi ko alam kung pinangalanan nila ito dahil ang V8 sampal sa noo bagay, ngunit ang OK. Kaya naghanda ako ng ilang mga halimbawa sa URL na ito. Pagkatapos ng seminar, uri ng pupuntahan ko makipag-usap tungkol sa kung paano ka maaaring makakuha ng Node hanay up, ngunit sa ngayon, ko lang uri ng mga gusto upang maglakad sa pamamagitan ng ilang mga halimbawa code. Kaya kung nais mong sundin kasama, lahat ng mga source code ay magagamit doon. OK? Kaya makikita ko bang iwan ang URL na ito up para sa isang maliit. At pagkatapos lamang pupuntahan ko lumipat papunta sa terminal. Magandang may URL na ito ay lahat ng tao? Kaya pupuntahan ko lumipat sa paglipas ng sa aking terminal dito. Kaya narito ang code na Mayroon akong para sa araw na ito. Bakit hindi magsisimula kami sa simpler.js-file? Ang iba pang mga bagay ay na ang lahat ng ito code ay pagpunta sa ay maisulat sa Kung saan maaari kang JavaScript o maaaring hindi pamilyar sa. Hulaan ko ng ilang mga bagay ay na marami ng code ng JavaScript ay ang uri ng syntax at istraktura ay halos kapareho sa C, kaya maaari mo itong uri ng pick up bilang mo sumama. Sinubukan kong magsulat ng maraming mga nagsisimula code para ito sa isang paraan na katulad sa C upang ito ay mas nababasa ng kaunti. Ngunit bilang pagsulong namin, magpapadala ako maging na nagpapakita ng ilan sa mga karagdagang mga tampok ng JavaScript na mga uri ng mga cool. Ngunit tingnan natin ang sample programa ipaalam. Hulaan ko ang lahat ng bagay ay cut off doon. Lamang ako ng pagpunta sa ayusin na tunay mabilis kung na OK lang o hindi. Hindi ko alam kung ano ito ay pagpunta sa gawin. Iyan ba ang isang maliit na mas mahusay? Nakikita mo ba ang var at bagay-bagay? OK. Kaya ang unang linya ay tulad ng JavaScript bersyon ng isang variable deklarasyon. Kaya lamang upang i-highlight kung ano ang gagawin mukhang sa C. Kaya ito ay tulad lamang sa akin sinasabi index ay katumbas ng tatlong o ang isang bagay tulad na. Kaya ako ay hindi tukuyin ang uri. JavaScript ang may mga uri, ngunit ito ay napaka dynamic na nai-type sa kalikasan, kaya ay hindi magbigay ng anumang uri ng uri dito. Kaya lamang ay may var. Iyan ay tulad ng variable. OK? At ako sa pagtawag variable HTTP ito. At sa aking kanang bahagi banda, mayroon akong expression na gusto kong ilagay sa HTTP. At ito sabi ni nangangailangan ng HTTP. Kaya ito ay uri ng katulad na isama. Ito ay isang kaunti pa tulad ng malakas kaysa Kasama sa kamalayan na isama Gusto kopyahin lamang at i-paste ang header mag-file para sa pag-andar modelo o ano naman may mga kahulugan uri. Ngunit nangangailangan ay aktwal na pagpunta upang makakuha ng sa amin ang code. Kaya maaari mong isipin na ito bilang pag-import ng ilang mga code. Kaya sa isang lugar sa module Node.js system o kahit ano, mayroon sila ng lahat ng ito Code ng HTTP server kaya lang ako sa pagkuha ito para sa aking sarili personal na paggamit sa programang ito. OK? Kaya pagkatapos Mayroon akong na ito ng function na na naisulat ko. At mapansin Hindi ko kinailangang tukuyin ang uri ng pagbalik o ang uri ng argumento muli. Kaya uri ng paalpasin nai-type sa na uri ng pakiramdam. Dalawang mga argument na ito ay tumatagal ng in, ang kahilingan at tugon. Kaya na conceptually uri ng tulad ng pamilyar na mula sa larawan na namin ay may sa screen bago dahil makuha namin ang hiling na ito na namin Mayroon mula sa user. At pagkatapos ay mayroon kaming isang tugon na maaari naming isulat ang mga bagay na. Kaya ang unang linya ng ito gumagana res.writeHead 200 at pagkatapos ito uri ng nilalaman ng teksto plain. Kaya sabihin piraso ito hiwalayin ng kaunti. Kaya hayaan tumuon lamang sa res.write para sa isang maliit. Kaya write ay isa lamang, at isulat ang ulo, lamang ang mga paraan upang uri ng isulat bagay sa tugon. OK? Kaya sumulat ng ulo, kung sinuman Naaalala mula sa HTTP panayam, gawin mo guys tandaan header sa tuktok ng HTTP bagay? Kaya bakit hindi lamang demo ko mga header ng real mabilis. Gusto na maging kapaki-pakinabang? O kaya dapat namin lamang uri ng - OK. Oo naman. Kaya kapag naging iyong browser sa google.com o ang isang bagay tulad na, mayroong talagang isang kaunti pa - ito ay tulad ng isang lihim na - mayroong tulad ng isang maliit na higit pang impormasyon na nanggagaling sa pamamagitan ng pipe kaysa lamang ang maliit na paghahanap at ang lahat. Kaya upang ipakita sa iyo na ito, pupuntahan ko gumamit ng isang programa na tinatawag na kulot. OK? Kaya ito ay isang bagay na maaari mong patakbuhin sa ang iyong Mac OSX command line o sa appliance o kahit ano. At kaya kung ako mabaluktot HTTP google.com, Pupunta ako upang makita ang mga HTML. At ito ay, sa pagkamakatarungan, lamang ang HTML na uri ng nagsasabi sa iyo upang nagre-redirect sa www kung ang iyong browser ay hindi Awtomatikong pangasiwaan ang pag-redirect. Kaya ito ay lamang ng HTML, ngunit ako pupunta upang idagdag sa mabaluktot ito gitling-flag ako. OK? At ito ay pagpunta upang ipakita sa akin ang mga header. Kaya ito ay impormasyon na ay dumarating rin sa pamamagitan kapag nakukuha ko ang tugon na ito. OK? Kaya sa tuktok, makikita mo ito HTTP 301 permanenteng ilipat. At ito ay uri ng mahalaga dahil ito ay tumutukoy sa code ng katayuan. Kaya ang 301 dito ay ang code ng katayuan, na kung saan ay isa lamang lamang isang integer na nagsasabi sa browser o kung sinuman ang pagbabasa na ito, kung magpanggap ka na ikaw ay isang browser at nakikita mo ito, talaga ngayon kung tiningnan mo ang na at makakita ka ng 301, alam mo na mayroon akong upang gawin ang isang bagay espesyal na batay sa 301, o isang bagay na espesyal na nangyari batay sa 301. Kaya sinasabi nito inilipat permanente. At pagkatapos ay, talaga, mayroon kami ng grupo ng mga key mga pares ng halaga. Kaya makuha namin ang lokasyon ay ang www.google.com. At pagkatapos uri ng lahat ng ito sa iba pang mga bagay-bagay, ngunit isa lamang, ano ang lokasyon ay sinasabi ay ang bagong lokasyon ay sa www.google.com. Kaya ngayon kung pupunta ka sa google.com, makakakuha ka uri ng makita ang uri ng blink browser para sa isang pangalawang at pagkatapos ay i-redirect ka kanan pabalik sa www.google.com. Kaya ang mga tugon ay maaaring maglaman ng mga header. At isang pares ng mga bagay upang ituro. Kaya sabihin nating kami ay talagang matagumpay sa pagbisita sa isang web page. Kaya hayaan mo akong pumunta sa - kung ano ang isang magandang website? Ako ay masamang sa pag-iisip ng mabuti mga website sa spot. Madla: Wikipedia. Kevin Schmid: OK. Ni gawin Wikipedia Hayaan. Kaya dito ako ay inilipat. Oh maghintay. Was ko? Oo, ako ay. OK. Kaya ang nakuha ko na gawin www. Kaya pupuntahan ko gawin www. At bilang maaari mong makita, narito ang lahat ng mga HTML na iproseso ang browser para sa Wikipedia. Ngunit kung panatilihin ko pag-scroll up dito, kung ano ang makikita ko bang makita sa tuktok - a, mayroong maraming HTML sa Wikipedia - ngunit kung ano ang maaari kong makita sa tuktok dito ay ito 200 na code ng katayuan bilang kabaligtaran sa 301 na nakita ko nang mas maaga. At mapansin na ito ay may maganda friendly na OK sa tabi nito. Kaya ito ay tulad ng mahusay na code ng katayuan. Ba na 200 numero tumingin pamilyar? Oo dahil kapag ginawa ko simpler.js, Isinulat ni ko ang isang 200 doon. Kaya na talaga sinasabi sabihin ang browser o kung sinuman ay sinusubukan upang makakuha ng sa ito na sila ay matagumpay. O kaya na uri ng tulad namin matagumpay ay masyadong. At mayroong ganitong uri ng espesyal na syntax sa Javascript para sa deklarasyon ng mapa ng mga key tulad ng uri ng nilalaman at ang mga halagang tulad ng teksto plain. Kaya't kung tiningnan mo ang mga tugon na namin Naging pabalik mula sa Wikipedia bago, - Pupunta ako upang subukang mag-scroll up ng isang maliit na mas mabilis - mayroon kang mga key tulad ng server at ang mga halagang ito Apache. Kaya mo na kailangan ang mga pindutan at mga halaga. At maaari mong tukuyin ito sa Node kung ano na magpadala ng likod. Kaya ito ay talagang uri ng, sa ilang paraan, at sa ilang mga paraan na ito ay hindi talaga ito, ngunit ito ay isang maliit na mas mababang antas kaysa sa code na PHP na maaari kang maging sumusulat para sa P-set pitong dahil PHP at Apache uri ng mag-ingat ng ilang mga ng mga bagay na ito para sa iyo. Sa PHP, maaari mong sasapaw sa default pag-uugali sa pamamagitan ng pagsusulat ng iyong sariling mga header. Ngunit para sa mga layunin ng ito, makakakuha tayo ng upang isulat ang aming sariling mga header. Kaya ang linya na magkaroon ng kahulugan upang lahat ng tao, ang pagpapawalang ulo linya? OK. Kahanga-hanga. Kaya pagkatapos ay kung ano ang gagawin ko ay tapusin ko ang tugon sa pamamagitan ng sinasabi kumusta mundo. OK. Ngunit iyon lamang ang isang function lamang tinatawag na handler kahilingan. Kaya ngayon talagang Kailangan ko bang uri ng gawin isang bagay na may ganitong function, tama? Kaya dito kung ano ang gagawin ko ay doon ay ito linya na gagawin var server ay katumbas ng HTTP.create server, at pagkatapos ay ako pumasa sa handler kahilingan. Kaya ito ay uri ng Node paraan ng paglikha ng isang server. At mapansin na ako ng pagpasa sa handler kahilingan. Kaya ito ay nagsasabi sa mga createServer function na gusto ko sa inyo upang ako ay maging isang server, at kapag na natatanggap ng server na isang tugon, Kailangan ko mong tawagan ito humiling handler function. OK? Kaya halos na linya tatapusin kaagad. Kaya ang var server linya ay tapos na karapatan pagkatapos mong gawin na medyo magkano. Ibig kong sabihin, mayroon itong i-set up ang ilang mga panloob estado upang malaman na gusto mong i- tumawag na handler kahilingan function, ngunit hindi ito ng pagpunta sa umupo doon at sabihin nating may gumagamit na ipinadala sa akin ng isang kahilingan pa? Ay nagpadala sa akin ng gumagamit ang isang kahilingan pa? Kaya ito ay hindi hinaharangan. OK? Kaya kung ano ito ay gawin ay ito talaga nag-iimbak ngayon tagaturo patungo sa ang code na ito, ang hiling na ito humahawak ng pag-andar, at pagkatapos ay Tatakbo na code kapag ang isang tao gumagawa ng isang kahilingan. At pagkatapos ay ginagawa namin server.listen. Ang 1337 doon ay medyo arbitrary. Nagkaroon na ako walang partikular na dahilan para sa pagpili ng numerong iyon. Ito ay lubos na random. Ngunit iyon lamang tinutukoy ang port. Kaya karamihan ng mga web server makikita mo na sila gamitin ang port 80 dahil na uri ng tulad ng convention. Kaya kung pumunta ako sa isang bagay tulad ng, Hindi ko alam, Wikipedia.org, at ko bang ilagay ang tutuldok 8 - oh a, hindi mo maaaring makita na. Sorry. Ngunit kung gagawin ko Wikipedia - Kukunin ko isulat ito dito kaya lang na ito ay malinaw sa camera. Subalit kung gagawin ko ito sa isang browser na may ng tutuldok 80, na tumutukoy pumunta sa Wikipedia.org sa port 80. Kaya ito ay tulad ng kung paano ang Estados Unidos ay may maramihang port tulad ng kung saan maaari mong ipadala ang mga bagay na uri ng. Kaya ito ay tulad ng pumunta sa ang partikular na ilagay sa server na ito. OK. Kaya lang pinili ko 1337. Mayroong isang buong saklaw ng mga numero na maaari kang pumili. Iyon ay hindi lubos na espesyal. Ngunit ano pupuntahan ko gawin ngayon ay pupuntahan ko tumakbo Node. Hayaan akong aktwal na ipasok na ng ilang mga linya pababa sa gayon maaari mong makita ito. Pupunta ako sa ginagawa Node, at ako ay pagpunta sa magpatakbo simpler.js. At muli naming makipag-usap tungkol sa kung paano makakuha ng Set up ng node sa ilang sandali. Ngunit ngayon na pinapagana nito lamang sa server. Kaya isang bagay na maaari naming subukan na ay hindi maaring maging kapana-panabik na ay maaari namin talaga subukan na i-access ito sa mabaluktot. Kaya ang maaari kong gawin mabaluktot, at ang aking machine ay lokal host. Makikita mo rin ang nakasulat na ito tulad nito minsan. Lokal na host at 127.0.0.1 mga uri ng tulad ng iyong computer sa bahay. Kaya ito ay tulad ng pakikipag-usap sa iyong sariling computer. OK. At pagkatapos ay maaari kong sabihin 1337. Kaya kung nagpatakbo ako ng ito linya ng code, ito sabi kumusta mundo. At kung nais kong makita ang mga bagay na iyon Nagkaroon uri ng nilalaman ng teksto o plain kahit ano, kahit ma ko bang ilagay ito dito. At mapansin na ito sinasabi sa OK. At gagawin ko mayroon teksto plain. At pagkatapos ay mayroong uri ng lahat ng ito sa iba pang mga bagay-bagay na Node idadagdag sa doon para sa akin. Iyan ay hindi sobrang mahalaga. Ibig kong sabihin, mayroong ilang mga uri ng mga teknikal na aspeto ng sa na mga uri mga astig na pag-uusapan, ngunit upang ipakita lamang sa iyo, mayroon din ako ng kapangyarihan upang baguhin ang mga paligid. Kaya ko maaaring lamang magdagdag ng isang bungkos ng mga bagay-bagay tulad na. At pagkatapos ngayon, kung tiningnan ko sa aking output, ito iyon. Kaya ang mga header ibig sabihin ng ilang mga bagay sa mga browser at mga bagay tulad na. At header maaari talaga sabihin sa isang browser kung paano tumugon sa isang bagay. Kung sakaling mo na narinig ng cookies bago, o kung kailanman ka nakapunta inis sa pamamagitan ng pagtatakda ng cookies web page, o naka-on block ng cookie o ang isang bagay tulad na. Maaari mong aktwal na magtakda ng cookies sa mga header. Kaya sabihin na nila ang isang browser kung paano pag-uugali sa ilang mga kaso. OK. Kaya na noon ay simpler.js. Kahit sinong mayroon ba kayong mga katanungan sa na source code na file? OK. Cool. Kaya alisin ni ang r mula sa na ipaalam at tumingin sa simple.js. Kaya ito ay medyo magkano parehong programa. Isinulat ni ko lang ito ng kaunti naiiba dahil Nais kong upang ayusin ng highlight ang ilang mga tampok ng JavaScript. Kaya mapapansin na ang humahawak ng kahilingan function na ay lubos na vanished. Oh yep, ay may tanong ka? Madla: Oo, ang mga argumento na ang nakapasa sa na function, ano ang mga ito? Kevin Schmid: Kaya mga mga JavaScript bagay. Sa dokumentasyon Node.js, ito talaga sabi kung ano ang mga pamamaraan ay magagamit sa mga ito. Mangyari lang namin na magkaroon ng access sa ang pamamaraang ito na tinatawag na pagpapawalang ulo at pagtatapos at bagay-bagay tulad na. Subalit mayroong isang buong bungkos higit pang mga pamamaraan. At halimbawa, tulad ng isa sa mga ito sa partikular na sa rec, maaari mong gawin isang bagay tulad ng rec.method na habilin sabihin sa iyo kung ito ay ang isang HTTP kumuha o Mga kahilingan ng HTTP post at mga bagay tulad na. Kaya mayroong lahat ng uri ng iba't ibang ari-arian, ngunit ang mga ito ay parehong JavaScript bagay, at mayroon lamang nila mga function na nakalakip sa kanila na sa iyo makakapagsulat bagay na. OK? Kaya mapapansin na handler kahilingan ay ganap na nawala. Ngunit ang code na ako ay nagkaroon sa kahilingan handler ay doon pa rin. Mayroon pa rin ba akong ito res.writeHead at mayroon pa rin akong ito res.end. At kung ano ito ay isang halimbawa ng sa JavaScript ay sa ideya na ito ng isang anonymous na function. at ang hindi kilalang ay tulad ng isang agpang pangalan para ito dahil ito literal ay hindi magkaroon ng isang pangalan. Walang kahilingan function na handler sa doon. Walang pangalan, ngunit ito pa rin ay pagsasagawa ng isang argumento. Kaya pa rin ang nakuha ko rec at res. At mayroon pa rin ako ng code. Ito ay ganap na ganap fine Code ng JavaScript. Kaya ang maaari kong magpahayag ng isang function na walang tahasan na nagbibigay ito ng isang pangalan. Ito ay isang maliit na nakalilito sa unang. Mayroong ilang mga kapaki-pakinabang tulad ng mga bagay na maaari mong gawin sa mga anonymous na function. Kahit sino ay may anumang mga katanungan sa ito ba, o ay ito lamang ang OK upang, sa ngayon, uri ng lamang tanggapin na ito ay gawin ang parehong bagay? Yep? Madla: unang Sigurado function klase sa JavaScript? Kevin Schmid: ang una nilang klase sa JavaScript. At alam lamang na mga konsepto ng pagpasa sa isang hindi nakikilalang function na tulad ng ito ay nalalapat sa JavaScript na Maaaring sumulat sa inyong huling proyekto para sa ang web browser ng masyadong. Kaya halimbawa, sa JavaScript sa iyong browser, ito ay medyo din kaganapan hinimok sa kamalayan na kung ano ang makakakuha ka mayroon ay kapag nag-click ang ito button, gusto kong mong patakbuhin ang code na ito. Kaya ito ang parehong uri ng mga ideya ng client side kapag ang isang mouse-click o sila mouse sa ibabaw ng ilang mga larawan sa iyong web page, patakbuhin ang code na ito. Iyon ay maaaring ilapat sa mga server. Kaya na uri ng tulad ng mga kapana-panabik na dahilan kung bakit JavaScript ay isang tunay na angkop o ang ilang mga tao sa tingin ito ay isang angkop na wika para sa ganitong uri ng driver ng kaganapan ng server dahil mayroon kang mga anonymous na function. Mayroon kang ang buong ideya ng ito asynchronous code. OK. Sinuman ay may anumang mga katanungan? OK. Kaya na noon ay simple.js. Kaya tingnan natin ang isa pang ipaalam o ng ilang higit pa. Kaya ito ay sleep.js. Kaya kahit sino ay pamilyar sa ang C function ng pagtulog? Mula siguro ang isa sa mga mas naunang mga aralin o ang isang bagay tulad na? Kaya talaga maaari mong pumasa sa tingin ko isang bilang ng mga segundo o kung gumagamit ka ng U matulog ng ilang mga millisecond o nanoseconds. At isa lamang ang programa ay lamang ihinto tumatakbo para sa na tagal ng oras. Mag-right? At pagkatapos ay ito gisingin kalaunan at pagkatapos ay gagamitin lamang ito magpatuloy sa pagtakbo ang programa. Kaya server ang ganitong uri ng Binibigyan ang impression ng pagtulog. Kaya mapapansin na mayroon kami ng parehong res.writeHead 200 sa header bilang bago, ngunit pagkatapos ay naka-pagtawag namin ito function na tinatawag na hanay timeout. Itakda ang timeout ay magagamit sa din ang iyong web browser ang Google Chrome o Safari o kahit ano. At talaga kung ano ang ginagawa nito dito ay tumatagal sa isang function. Abiso, muli, ito ay isang anonymous na function. Kaya na uri ng mga cool na dahil kami gamit ang isang hindi nakikilalang pag-andar sa loob ng isang function ng anonymous na ay maaaring maging isang maliit na kakaiba. Ngunit tumatagal na function, na kung saan ay talaga sinasabi - at ang paraan na ito mga gawa ay nasa 5,000 millisecond, gusto kong sa iyo upang maisagawa na function na kung saan Nagtatapos lang ang tugon at writes hey. Kaya ay nagbibigay ito ng impresyon ng tulad ng sleeping, ngunit ang paraan na ito talaga Gumagana ay magpapadala kami tumatakbo sa pamamagitan ng ang linyang ito masyadong mabilis. Kami ay sumusulat lamang ng isang bagay. At pagkatapos ay gagamitin din namin tumatakbo sa pamamagitan ng ang linyang ito masyadong mabilis. Kaya hindi talaga kami pagpunta upang maghintay ng limang segundo. Lamang kami ng pagpunta sa tumakbo ang code na ito agad. At pagkatapos ay mayroong, muli, kaunti ito loop kaganapan na ngayon ay may mga bagay na ito nagrerehistro na talaga lamang Patuloy ng pagpunta sa paligid sa isang lupon at pagtingin sa orasan sa isang solong thread at sinasabi, May limang segundo pa ang pumasa? At pagkatapos ay kapag ito nakikita na ang pangalawang kamay ay inilipat tulad ng limang segundo o ano naman, kung gayon ito wakes up at sabi, oh, ano ang kailangan kong gawin? Oh Kailangan ko bang patakbuhin ang code na ito. At pagkatapos nito pupuntahan tumakbo res.end hey. Kaya muli, hindi kailanman kami ay naghihintay dito. Kaya ito ay hindi na ang code na ito sa loob ng ito function ay pagpunta sa tumagal ng limang segundo upang tumakbo. Ang code na ito ay tatakbo halos ay agad na, hindi bababa sa na may kaugnayan sa ang limang segundo na tayo ay pakikipag-usap tungkol sa mga naunang mga bago. Kaya lamang upang ipakita ito sa pagkilos, Ang maaari kong gawin Node.sleep.js. At ginawa ko Nagkamali ng isang bagay? Posibleng. Sorry. Ni makita kung ano ang maaari naming gawin upang ayusin ito Hayaan. OK. Kaya tiyak gamitin Node.js. Lang ako kidding. OK. Seg isa lang. OK. Alam ko kung ano ito ay. Kaya ang isyu ay na sa aking iba pang mga tab dito, tumatakbo ako ay Node nasa na parehong address, 1337. Kaya ang error na ito threw, kung tiningnan namin sa ito tunay na malapit, ay address sa gamitin, EADDRINUSE. Kaya ako ay gumagamit na ng 1337 dito. Kaya kung shut ko ito off, at pagkatapos ko ngayon subukan upang mapatakbo ito, sana ay, lahat ng bagay Magiging fine. OK. Kaya maaari ka lamang magkaroon ng isang bagay na pag-uuri ng pakikinig sa isang port nang sabay-sabay. Ang isa pang solusyon maaaring naging para sa akin i-edit lamang ang programa na iyon at gumawa ito na tulad ng 1338 o isang bagay tulad na. Ngunit ngayon pagtulog ay tumatakbo. Kaya ng aktwal na subukan ito sa ipaalam browser oras na ito dahil ito ay isang maliit unexciting upang makita ito sa isang terminal. Kaya ako lamang ang pagpunta upang pumunta sa na 127 address muli sa 1337. At kung maaari mong makita ito - Hindi ko alam kung maaari mong - ngunit ang aking browser pagkuha ng isang napaka, napaka-haba oras upang i-load o tulad ng limang segundo. At pagkatapos ay matapos na, ito sa wakas natapos na ang tugon. At hindi mo makita ito dahil ang bagay Inilipat sa paglipas ng kaunti, ngunit kapag gumawa ako ito ng kaunti mas maliit, mo ang maaaring makakita nito sabi ni hey. Kaya ko ang hey nakuha ko, ngunit pagkatapos ng limang segundo. At ito ay maaaring maging isang maliit na mas malinis upang makita ito dito sa terminal, kaya ako ay pagpunta sa gawin ang isang - ni gawin in dito hayaan - ni gawin mabaluktot address na ipaalam muli gamit ang 1337. At ko lang uri ng kailangang umupo dito para sa limang segundo. Ngunit mapapansin na ang server Maaaring tanggapin ng bagong mga sagot. Kaya ito ng mga Kopya hey. At sa demo na ito, talaga kung ano Ang maaari kong gawin sa iba pang mga tab - kaya sabihin nating gagawin ko ito sa isa pang tab, Pupunta ako sa ginagawa mabaluktot at ang parehong bagay muli. At ako pupunta upang subukang i-kick ang mga off ang guys sa parehong oras. Kaya pupuntahan ko gawin ito, at ako ay pagpunta sa lahi sa paglipas dito at ako ay pagpunta sa gawin ito muli. At gumawa ng ito ipaalam sa gayon ay Maaari makita ang dalawang iyan. Iyon ang isa naka-print hey at isa na naka-print na hey ang lahat ng mga paraan sa - gawin ni muli eksperimento na ipaalam. Talaga, gamitin ito ipaalam linlangin, kung na OK lang. Kaya pupuntahan ko gamitin ang shell bagay na ay nagbibigay-daan sa akin na talaga tumakbo ang dalawang kopya ng programa sa parallel. Kaya makikita patakbuhin ito ang unang programa at ang ikalawang programa sa parallel. Kaya ngayon kung pindutin ko ang Enter, ito ay pagpunta upang gumawa ng kahilingan na halos ay agad na sa parehong oras. Kaya ni bigyan ito ng isang shot ipaalam. Kaya't mapapansin ngayon sinasabi nito dalawang mga proseso. At kung gusto mong malaman, na 27,000 numero ay isa lamang ang proseso ng ID. At pagkatapos ay mapansin, sila naka-print hey sa parehong oras. Hindi nito ay nais namin ay may upang maghintay ng limang segundo para sa isa at pagkatapos ay matapos na, limang segundo mamaya makuha ang pangalawang. Kaya na uri ng, sa ilang mga paraan, ito ay hindi talaga ebidensya, subalit ito ay madaling gamitin na katibayan na ito ay hindi lamang tulad ng paghihintay limang segundo at pag-block ang buong thread. OK cool. Kaya't tinanong Aaron isang katanungan mas maaga na noon, well paano kung namin gawin ang isang bagay - Yep? Madla: Maghintay. Paano ay na naiiba mula sa printf buffer, bagaman? Hindi ba ito awtomatikong gawin iyon? Bakit mayroon kami upang mag-alala tungkol dito? Kevin Schmid: Oh, magagawa mo sabihin na isa pang beses? Madla: ba ang hindi nagkagusto printf buffer gawin ang eksaktong parehong bagay? Kevin Schmid: Ang printf buffer? Madla: Oo. OK. Was hindi sa isa sa mga pagsusulit sila ay pakikipag-usap tungkol sa kung paano kung ikaw mismo printf isang bagay at pagkatapos ay i-pause ito sa isa pangalawa, at pagkatapos ay mayroon kang ito loop sampung beses, magkakaroon ito ng maghintay ng sampung segundo at pagkatapos printf-sama ang lahat ng bagay? Kevin Schmid: Oh, OK. Madla: Ay ito sa paggawa nito bagay pagkatapos ay sa kasong ito? Kevin Schmid: Kaya ang tanong ay isa lamang sa isa sa mga dating mga pagsusulit o isang bagay, nagkaroon ng isang katanungan na talaga kung sinabi mong i-print ang f 10 bagay sa isang pagkakataon at pagkatapos ay slept tulad ng sa ang proseso ng pagpi-print ng mga out, sa dulo para sa ilang kadahilanan, gagawin ito dump lamang ang mga lahat out sa screen. Kaya mayroong uri ng dalawang magkaibang konsepto dito. Kaya hulaan ko ang isang bagay ay na, sa ganitong kaso, kami ay pagharap sa dalawang magkaibang uri ng mga tao na humihiling sa server para sa mga bagay nang sabay-sabay. At ang dahilan na ang printf uri ng naghihintay ang isang katulad na at lumbay ang lahat ng ito out nang sabay-sabay ay higit na nauugnay sa paano printf uri ng - kaya ang paraan printf ay ang tunay ipinatupad ito talaga ay may upang makipag-usap sa mga operating system na magsulat na mga bagay-bagay sa console. Kaya ito ay hindi nais na gawin ang lahat ng na bagay-bagay agad kapag sinabi mong printf ilang string dahil na maaari makakuha ng mga mahal na kung ito ay may sa gawin iyon sa bawat oras. Kaya kung gagawin mo printf hey, ang iyong mga programa hindi maaaring aktwal na-print na agad sa console. Maaaring sabihin, OK, isinulat ko ito. At pagkatapos uri ng maghintay para mabigyan mo ito ng kaunti pa bago talaga sumusulat ito out sa console. Kaya ang dahilan na iyon ay ang kaso - at ito ay uri ng walang-kaugnayang sa pagtulog - ay ang pagtulog ay isang uri ng lamang injected sa doon upang ipakita ang katunayan na hindi ito sumulat ito synchronously. Ngunit ang dahilan para sa na lamang pagganap sa gayon ay hindi mo kailangang i- gumawa na maraming mga contact sa ang operating system. Ngunit dito, kung ano kami ay talagang sinusubukang gawin may ganitong pagtulog bagay ay palabas lamang na kapag mayroon kaming dalawang mga tao ng pagbisita website na ito, hindi ito pagpunta sa ilagay mga ito sa isang linya kung saan ito pupuntahan sabihin Mayroon akong upang makatulong sa iyo, at pagkatapos ay kapag ako ay lahat-lahat tapos pagtulong sa iyo pagkatapos ng mga limang segundo, pagkatapos ay pupuntahan ko ilipat papunta sa susunod na tao. Kaya hindi gumagana ang kahilingan sa unang tao itali na loop kaganapan kung na saysay. Ngunit dito ay ang tunay isang halimbawa ng isang bagay na itali hanggang sa loop ng kaganapan. Kaya narito ang isang kakila-kilabot function na kino-compute ang nth Fibonacci. Ito ay literal ang mas masama paraang kaya mo kino-compute ang nth numero ng Fibonacci. At ito ay tunay na kinikilala lamang kung saan ito ay nagmula sa, mayroong talaga - Ibig kong sabihin, maaari mong subukan upang pumunta mahanap ito - ngunit doon ay tulad ng isang napaka-napakahabang blog mag-post na ang isang tao ay sumulat. Ito ay tulad ng isa sa mga Reddit bagay. Ngunit isang tao criticized Node.js, at ginagamit nila ito bilang isang halimbawa. Kaya uri ng ko nais upang ipakita sa iyo ng dalawang iba't ibang pananaw upang makakuha lamang isang pangkalahatang pag-unawa sa mga konsepto sa likod ng mga dalawang bagay. Ngunit ay napili ito bilang lamang ng isang kakila-kilabot, horribly hindi mabisa computationally intensive na paraan upang makalkula ang nth numero ng Fibonacci. Kaya lang bilang isang bahagi tala, kung bakit ay ito kakila-kilabot na tulad sa isang paraan? Yep? Madla: Sabihin nating simulan mo out kasama ang 1,000. 1,000 mga hating sa 999 at 998. Ang bawat isa sa mga hating ito sa dalawang bagay. Ang bawat isa sa mga hating ito sa dalawang bagay. Kevin Schmid: Mag-right. Madla: Lahat ng mga paraan pababa. Kevin Schmid: Mismong. Kaya lamang upang ulitin para sa camera, kung ako tumawag magsinungaling sa katulad 1,000 o isang bagay tulad na, ito ay malinaw naman hindi kukulangin sa o katumbas ng isa kaya pupuntahan ko pumunta sa ito tao kaso, at pagkatapos ay pupuntahan ko upang tawagan ang maliit na kasinungalingan 999 plus maliit na kasinungalingan 998. At pagkatapos ay halos lahat ng na gawa na maliit na kasinungalingan 999 gumagana ay uri ng sa antas na ito. Kung bumaba, mas higit kalabisan kaysa doon, ngunit kung lamang Sa tingin compute maliit na kasinungalingan 998 ay makakakuha ng sa amin medyo malapit sa maliit na kasinungalingan 999. Kaya kami ay dapat talagang maging isang kaunti pa matalino tungkol sa kung paano namin uri ng muling magagamit mga ito, ngunit kami ay hindi reusing mga bagay na ito sa lahat. Kaya maaari mong isipin na ito katakut-takot ang laki, parang higante puno ito lamang ay kasindak-sindak. Ngunit pa rin, OK. Kaya na noon ay maliit na kasinungalingan. Tumatagal lang ito ng isang habang upang tumakbo. Yep? Madla: [hindi marinig]. Kevin Schmid: Oh, magagawa mo ulitin ang mga katanungan? Madla: [hindi marinig]. Kevin Schmid: Oh kaya ito ay code lang na pupuntahan maging isang uri ng sa server side. Kaya ito ay hindi pagpunta sa ay matatagpuan sa browser o kahit ano. Ito ay isa lamang sa kung ano ang mayroon kami ay na kapag ang gumagamit dito halos ginagawang muli ang kanilang kahilingan, kung kailan namin uri ng gumawa ng kahilingan, kami ay pagpunta sa tumawag sa ito function na sa gilid ng server. At pagkatapos ay susuriin namin ang resulta pabalik mula sa pagtawag na function. At pagkatapos ay gagamitin namin lamang i-print ito sa user. Kaya ang gumagamit ay hindi talaga haharapin may ganitong function ng masyadong maraming. Was na ang tanong? Ba na magkaroon ng kahulugan? OK. Cool. Kaya muli, ginagawa namin ito buong res.writeHead bagay kung saan i-print out namin ang header. At pagkatapos ay tapusin ko ang mga tugon sa pamamagitan ng paggawa ang magic number ay maliit na kasinungalingan 45. Tumakbo ni lamang sa server na ito Kaya ipaalam. Kaya pupuntahan ko na gawin ang isang Node fib.js. Kaya ngayon ang aking maliit na kasinungalingan server ay tumatakbo. At pagkatapos dito, pupuntahan ko upang gawin ang isa sa mga ito. OK? Kaya ako lamang ang pagpunta sa sabihin, kulutin. Kaya ito ay pagpunta sa tumagal ng ilang sandali ngunit sana sa lalong madaling panahon ito ay matapos at ito ay i-print out na 45 Fibonacci numero. Madla: [hindi marinig]. Kevin Schmid: dapat itong makakuha ng tapos na medyo lalong madaling panahon. Kaya dapat itong tumagal ng 5-6 segundo. Hindi ko alam kung ito lamang ay V8 pagiging super mabilis, ngunit sa anumang kaso, ito ay isang napaka-ikling halimbawa at kusa hindi makisig ng isang hindi walang kuwenta pagtutuos. Kaya matapos ang ilang panahon, ito ay makakuha ng ito. Ngunit ngayon, paano kung gawin ko na parehong uri ng eksperimento tulad ng dati kung saan gumawa ako dalawang mga kahilingan sa parehong oras? Kaya dito Pupunta ako sa isang mabaluktot sa address na iyon, at ako pupunta na gawin ang isa pang kulot. At tandaan, kapag ginawa namin ito para sa matulog server, kapag isa lamang namin ay may mga ito pagkatapos ng limang segundo, ang mga ito kaakit-akit magkano ang parehong ay dumating likod pakanan sa paligid ng parehong oras. Kaya ito ay hindi partikular na nakatali up. Ngunit subukan na ito ngayon hayaan. OK, kaya nakuha namin ang aming dalawang mga proseso. Tandaan mga ay ang proseso ng ID. Ito ay magiging isang kaunti alanganin habang stall namin. Kaya hayaan manatili ng lang dito at maghintay. Kaya isa sa mga ito ay dapat na dumating bumalik pagkatapos ng tulad ng - OK, kaya isa ay dumating likod. Ngunit pagkatapos ay kung bakit hindi ginawa ang pangalawang isa bumalik pa lamang? Yep? Madla: hindi maaaring gawin ng server ang anumang bagay habang ito ay compute na malaki numero. Kevin Schmid: Mag-right. Kaya ang sagot ay isa lamang na ang server talagang hindi maaaring gumawa ng anumang bagay habang ito ay compute na Fibonacci numero. Kaya ngayon Nakakuha ako ng aking dalawang bagay pabalik. Ngunit hulaan ko na sa tingin lamang tungkol sa code ang kaunti pa, paano ang ito gumagana at ang lahat. Kaya ito function na dito ay ang code na Sinabi ko na sa server na ito upang tumakbo kapag ito na natatanggap ng isang bagong papasok na kahilingan. Kaya ito ay lamang ng pagpunta sa tumakbo sa pamamagitan na ito buong code, at pagkatapos ito ay pagpunta sa pumunta i-back sa loop kaganapan at pagkatapos ay magpatuloy pagsusuri para sa mga bagong kaganapan. Kaya talaga kung ano ang nangyayari namin ay ang server ay pakikinig para sa mga bagong bagay. Ang unang taong nagtanong ng kung ano ang 45 ay. Nagpapatakbo kami ang code na ito upang makalkula ito. Ang code na ito ay tumatagal ng humigit-kumulang limang sa anim na segundo upang tumakbo. Pagkatapos ay pumunta kami pabalik sa loop kaganapan at suriin para sa mga bagong kahilingan. Kaya ito ay isang halimbawa ng kung paano, kung ikaw may mga bagay na tinatawag nang gayon tuusin nakatali, o gumamit ng maraming computational, hindi kapangyarihan, ngunit tulad ay computationally intensive - Hulaan ko ang isang bagay na sabihin tungkol sa ito ay na ito function ay ginagawa lahat-lahat, para sa pinaka-bahagi, medyo kapaki-pakinabang trabaho kanan. Ang buong oras na iyon na callback ay tumatakbo ang function, ito ay medyo magkano gumagastos ng karamihan sa oras nito lamang computing na nth Fibonacci numero. Ngunit lamang nagkaroon kami isa thread haharapin ang mga. Sa modelo Apache, kapag ang dalawang tao ginawa ang kahilingan upang makakuha ng maliit na kasinungalingan 45, namin sana ay nagkaroon ng dalawang magkaibang mga thread. At pagkatapos ng trabaho sa operating system maaaring naging, o antas ng user code na namamahala sa mga thread, gusto Naidetalye naging upang hatiin na hanggang sa CPU, o kahit na kung mayroon kang maramihang mga CPUs, ipamahagi ang mga ito nang pantay-pantay sa kabuuan ng CPUs kaya na sila ay parehong tapusin halos sa parehong oras. Kaya upang ipakita sa iyo kung paano namin maaaring ayusin ng - at ito ay hindi isang kabuuang perpekto solusyon, ngunit uri ng kung paano aming makakaya gumawa ng isang bumalik dito at gawin Medyo mas mahusay. Kaya kung ano ang mayroon akong dito ay isang programa na tinatawag na Maliit na kasinungalingan C. At isa lamang ay gumagamit na ito isa pang isa sa mga module Node ay tinatawag na Ang Module ng Proseso ng Bata. Kaya Isinama ko na sa tuktok uri ng tulad ng gusto kong gawin ng kalahating kilong isama anak process.h o isang bagay. Ngayon ba akong magkaroon ng access sa CP variable na may lahat ng aking mga pag-andar. Kaya ngayon kung ano ako ng paggawa sa ang tugon na ito handler ay ako nagpapatakbo sa programang ito tuldok iwa maliit na kasinungalingan 45. Kaya kung ano ang nagawa ko na - at lang ako pupunta sa hakbang out sa programang ito para sa isang Medyo - ay na naisulat ko isang programa C na talaga computes ang nth numero ng Fibonacci. Kaya narito ang isang programa lamang na naisulat ko sa C na computes ito. Maaari ba akong mag-compile ito, at maaari ba akong magpatakbo ng ito sa command line. At ito ang nangyayari upang makalkula ang Numero 45 Fibonacci. Kaya mapansin lamang tumatagal ito ng halos kasing haba. Ako marahil ay maaaring ginamit gitling 03 sa i-optimize ito o isang bagay tulad na, ngunit ko lang ginawa tulad ng regular na Mga setting ng tagatala. At ito ng mga Kopya ito. Ngunit ngayon, ano ang aking uri ng paggawa? Oh paumanhin, maling file. Kaya gagawin ko ang parehong bagay sa ang header tulad ng dati. Pagkatapos gawin ko ito cp.exec. Kaya kung ano ito ay pagpunta sa gawin ay ito pagpunta upang patakbuhin ang program na ito. Ngunit ang paraan na ito gumagana ay na hindi ito ng pagpunta sa maghintay para sa na programa upang matapos. Ito talaga lang sabi isakatuparan ang program na ito. Kaya talaga type ito sa command prompt uri ng. At pagkatapos ay, kapag tapos ka na may ito, patakbuhin ang function. Kaya ngayon uri ng namin makuha ito buong naibalik bagay ng parang hindi kami ay naghihintay. Ba na uri ng kabuluhan? Yep? Madla: [hindi marinig]? Kevin Schmid: Kaya na ito ay talagang buksan up ng isang bagong proseso upang gawin ito. Kaya ito ay ang tunay, sa ilang mga paraan, masama, hindi sobrang kasamaan, ngunit ito ay Mahalagang sabihin na ito ay uri ng pagpunta pabalik sa, sa isang dako, ang Apache modelo kung saan ang ginagawa namin thread at mga proseso para sa bawat kahilingan o mga proseso para sa bawat kahilingan. Kaya ito ay uri ng kahalintulad na sa kung ano ang ginagawa ng Apache. Sa ilang mga kaso, ito lamang gumamit ng bagong thread, na kung saan ay higit sa isang konting liwanag timbang kaysa sa isang proseso, ngunit Apache ng dati napupunta forking isang bagong proseso na kung saan ay uri ng kung ano ang ginagawa namin dito nang kataon lamang sa pamamagitan ng paggawa tuldok slash maliit na kasinungalingan 45. At pagkatapos sa kasong iyon, ang uri ng namin mapala ang parehong mga gastos ng mga proseso. Kaya ito ay lamang isang bagay na maaari mong gawin. Ngunit upang ipakita lamang ang ganitong uri ng tumakbo. At ito ay talk lang talaga na naglalayong Nagtatangal mga uri ng mga programa bilang isang paraan upang ipakita ang iba't ibang mga pananaw sa paano mag-disenyo ng mga server tulad na. Kaya ito ay tumatakbo, at pagkatapos ngayon kung gagawin ko ito muli, Mayroon akong dalawang proseso ng ID. Hayaan ang makipag-usap lamang tungkol sa mga bagay na dapat ituro. Kaya mapapansin na ang mga ito ay incrementally. Iyon ay cool. Dahil ito ay 27,122 bago. Ngunit notice ngayon, sila ay dumating likod ay humigit kumulang sa parehong oras. At ngayon, isang mahusay na katanungan upang magtanong tungkol sa bakit noon na ang kaso ay, na ang trabaho ay ito ngayon sa isang uri ng gumawa ng mga bagay na ito uri ng maglaro ng patas sa bawat iba pang, ang dalawang mga kaso ng tuldok slash maliit na kasinungalingan 45 na pinatakbo ko o na pinatakbo Node? Sino ang uri ng ginagawang patas na kapwa nila makakuha ng mga uri ng balanced run oras? Madla: [hindi marinig]. Kevin Schmid: Oo. Kaya talaga, kapag gagawin ko na tuldok na slash maliit na kasinungalingan 45 o isang bagay tulad na, ngayon na uri ng hanggang sa operating system upang pangasiwaan ang runtime ng mga programa. At ngayon maaari itong schedule ang mga ito sa iba't ibang mga CPUs o ito Maaari schedule ang mga ito. Maaari itong hatiin up ang oras ng isa na Ay makakakuha ng CPU ito o na makakakuha sila upang tumakbo sa isang CPU. Kaya iyon ang ideya sa likod na. Ba na magkaroon ng kahulugan sa lahat ng tao? Kaya ngayon Node ay hindi talagang sa pag-play ng isang bahagi sa paghahati up ang mga gawaing ito. OK. Kaya na halos ito para sa mga halimbawa. Nais kong lamang na ipakita ang isa pang bagay dahil may maraming mga ito sa ngayon ay naging hindi lubos sobrang praktikal sa ilang mga kaso. Ang maaari kong isipin na darating sa bahay matapos ito makipag-usap at isang bagay at sinasabi tulad ng, na rin ako uri ng nakuha out sa talk na iyon Maaari ba akong gumawa ng isang Fibonacci server para sa ang aking huling proyekto. Kaya narito lamang uri ng isa pang halimbawa na sana ay magiging - hindi siguro, pero siguro - ng kaunti pa uri ng mga may-katuturan sa huling proyekto at pinag-iisipan nang maaga para sa mga bagay tulad na. Kaya ito ay chat.js. Kaya ito ay uri ng ng ilang sample code ng server side na maaari mong gamitin upang set up ng isang maliit na chat server tulad ng maaaring nakakita sa Facebook Makipag-chat o kahit ano. Kaya ako hindi na nagsasabi na ito ay tulad ng Facebook Makipag-chat, ngunit ito ang uri ng tulad ng isang magandang - siguro ay hindi mabuti, ngunit marahil magandang - simula point para sa isang chat server para sa iyong website para sa isang pangwakas na proyekto. Kaya tingnan natin kung ano ang ginagawa itong ipaalam. Kaya namin nakukuha ang mga espesyal na bagay sa tuktok, ito var SIO ay katumbas nangangailangan Socket.IO. Kaya ito ay isa pang bagay na hindi talaga dumating na kasama ng Node ngunit maaari mo itong i-install. Ito ay isang Node module. Kaya ito ay katulad lamang ng ilang extension upang Node. SocketIO ay talagang talaga uri ng mga cool. Ito ay isang abstraction na talaga kung ano ito ay kung ay nagbibigay-daan ito sa iyo upang mayroon stream na ito ng komunikasyon sa pagitan ng isang web browser at isang web server. Kaya para sa pinaka-bahagi sa ngayon, mayroon kaming mga napaka mabilis na isang segundo o dalawang pangalawang komunikasyon sa pagitan ng isang web browser at mga web server. Kaya ito ay isa lamang pumunta sa google.com, get ang mga bagay-bagay, ipadala ito pabalik, at pagkatapos ay tapos na kami. Hindi namin pinag-uusapan muli hanggang sa mga uri ng user sa ibang bagay. Ngunit ano Socket.IO at mga katulad na uri ng bagay - at SocketIO ay talagang isa sa mga bagay na ay binuo sa bilang WebSocket na uri ng magagamit bilang bahagi ng HTML5 - na nagbibigay-daan sa iyo upang magkaroon ito patuloy na dialogue. At ito ay lubhang kapaki-pakinabang sa isang chat server uri ng bagay dahil ito ay uri ng tulad ng isang patuloy na dialogue sa ilang mga paraan dahil kung nakikipag-chat may isang tao, maaari mo na ngayong magpadala lamang ng isang mensahe pababa ang pipe, at pagkatapos ay ang server ay maaaring magpadala ng mensahe pababa ang pipe sa iba pang mga tao ikaw ay chat ka. At pagkatapos ay maaari kang magkaroon ng ito makipagpalitan ng ganyan. Kaya na uri ng kung ano SocketIO ay mabuti para sa. Ang dahilan na SocketIO ay gumagamit WebSockets bilang isang bagay ay na sa Bukod pa sa lamang plain lumang WebSockets, ginagawa din ito ng ilang mga trick sa talaga gumawa katugmang ito browser. Kaya mga browser tulad ng Internet Explorer sa kasamaang-palad ay hindi sumusuporta sa WebSockets karapatan sa labas ng kahon. Kaya gumagamit ito ng ilang mga iba pang mga uri ng mga cool na mapag-ayos bagay sa Adobe Flash upang payagan ang mong magkaroon ng cross browser support. Kaya na talaga kapaki-pakinabang. At talagang, alam ko na ako uri ng tumatakbo sa oras dito, ngunit CS50 Talakayin, nakita mo man ang isang bagay parang, hindi ko alam, blangko sa gayon ay pagtugon sa post na ito o ng isang bagay tulad na, na tampok na ito? Iyon SocketIO. Kaya kapag ang isang tao ay nagsisimula mag-type sa talakayin ang kahon upang gumawa ng isang tugon o isang bagay, ang iyong browser ay kung ano ang na tinatawag na sa SocketIO emits ilang mga uri ng kaganapan na nagsasabing ang isang tao ay ng pagtugon sa post na ito. Pagkatapos ay sinasabi ng server, OK, ano ang kailangan kong gawin? Well ngayon Kailangan ko bang sabihin sa mga iba pang mga guys sino ang nasa CS50 Talakayin hinahanap sa post na ito na ang isang tao ay pagtugon. Kaya na uri ng kung ano SocketIO ay mabuti para, patuloy na uri ng stream ng mga dialogue. OK. Kaya kung ano ang mayroon ako dito - at hindi namin lamang pagpunta sa huwag pansinin ang mga koneksyon array para sa ilang sandali - ano ang gagawin ko ay isa pang ako makinig. Kaya ito lamang ang paraan sa Socket.IO ay sinasabi ni makinig sa ito port ipaalam. At pagkatapos ay gagawin ko ito sa koneksyon. Kaya na talaga lang Socket IO ni paraan ng sinasabi, kapag nakatanggap kami ng koneksyon, gusto ko sa iyo upang patakbuhin ang code na ito. At mapansin na sa halip ng pagkakaroon ng rec at res ang pumasa sa doon Mayroon akong Socket. At ideya Socket ito ay isa lamang ito bagay na maaari mong sumulat sa at basahin mula sa na may mga gumagamit mensahe posibleng. At ang mga mensahe na nais mong ipadala maaaring pumunta sa pamamagitan na Socket. Ba na magkaroon ng kahulugan? Kaya patuloy na bagay. Kaya kung ano ang gagawin ko ay tumawag ako Socket.emit. At naglalabas ng tumatagal medyo magkano dalawang argumento. Ang unang argument ay isang string lamang na kumakatawan sa mga uri ng bagay ka nagpapalabas. Kaya para sa kasong ito, na hindi ko na paggamit ang string na ito bagong mensahe. At na lang talaga na nagsasabi na ang uri ng mga bagay na ito, kung ano ako pagpapadala, ay isang bagong mensahe. Kaya maaari kang makinig para sa partikular na mga uri tulad ng mga bagong mensahe o ng kahit anupamang pamamagitan ng paggamit ng tuldok sa. Kaya koneksyon at user na ipinadala doon, kung tumingin ka sa kung saan tinatawag naming tuldok sa, mga iba pang mga string na kumakatawan mga uri ng mga mensahe ng user. Kaya ito ay isa lamang maaari kang magkaroon ng ito naglalabas isa sa mga uri ng mensahe, at pagkatapos ay gawin ang isang bagay bilang tugon sa isa sa mga uri ng mensahe Kaya ako nagpapalabas ito ng mga bagong mensahe. Kami ay pagpunta sa huwag pansinin connections.push para sa isang segundo. Ngunit pagkatapos ay sabihin ko, na ipinadala Socket.on gumagamit. Kaya ngayon ito uri ng nais kapag ang nagpapadala ako gumagamit ng mensahe, nais ko mong patakbuhin ang code na ito. At mapapansin na ang pag-andar na anonymous nagtatagal sa variable na ito tinatawag na data na kung saan ay isa lamang ng pagpunta upang magkaroon ng mensahe ng user. Kaya sabihin ngayon uri ng talk tungkol sa ang mga koneksyon ng array. Kaya ito ay dinisenyo para sa isang chat client kung saan talaga lahat ng tao ang uri ng sa ang parehong chat room. Kaya talaga, kung ano ang kailangan namin upang panatilihing sa paligid ay ilang array na talaga Kinakatawan ng lahat ng mga tao pakikipag-chat sa ilang mga paraan, kung iyon ang may katuturan. Mag-right? Dahil kailangan naming malaman kung sino ang mga guys ay gayon maaari kaming magpadala sa kanila ng mga mensahe na ang ibang mga tao magpadala sa amin. Kaya kung ano ang code na ito gumagana ay kapag gumagamit nagpapadala ng mensahe - iyon ang uri ng ang kaganapan - kami ay pagpunta upang patakbuhin ang code na ito. At ano ang ginagawa namin ay aming pinatatakbo sa pamamagitan na ito array na tinatawag na namin ang mga koneksyon. At medyo magkano para sa bawat koneksyon maliban sa isang bagay na atin, na kung ano ang sinasabi ang code na ito, nagpapadala kami ng bagong message na may naka-attach na mensahe impormasyon. Kaya kung napansin mo dito, kung ano ang aking ginawa kapag talagang gumagawa ng isang bagong user koneksyon ay nagdagdag ako sa JavaScript.push pamamaraan, ito ay talaga lang sinasabi tulad ng magdagdag na Socket bilang isang halaga sa ang aming mga koneksyon ng array. Kaya ngayon kapag nagpapatakbo ang code na ito, ay ito magpadala ng mga bagay sa mga partikular na koneksyon. Kaya ito ay maaaring maging isang mahusay na panimulang punto para sa paggawa ng isang chat server o isang bagay na katulad. At ang uri ng mga cool na bagay ay na ang mga code na nakikita mo dito para tulad ng sa at naglalabas at bagay-bagay tulad na ay pareho uri ng JavaScript code na gagawin mo sumulat sa browser upang makipag-ugnay sa server. Kaya na ang dahilan kung bakit SocketIO ay uri ng malinis at maayos at kapaki-pakinabang sa na paraan. Oh at lamang ng isa pang bagay real mabilis. Nagkaroon ng CS50 huling proyekto noong nakaraang taon na isa lamang ipinatupad ng isang chat server sa Node.js. Sa tingin ko ito Harvardchats.org ngunit hindi ako - OK. Hindi ako sigurado kung ano ang URL, ngunit Maaari ba akong magpadala ng na out pagkatapos. Ngunit ito uri ng palamig ano maaari mong gawin sa Node.js. Kaya Umaasa ako, sa pangkalahatan, ka guys ay may mahusay na pakiramdam kung ano Node.js ay kapaki-pakinabang para at kung paano maaari mong ilapat siguro upang ang iyong huling proyekto. Ako ay nagpapadala ang ilang higit pa mapagkukunan kasama ang mga ito. At salamat sa iyo para sa darating na. Salamat sa inyo. [Palakpakan]