Download - Node js part 1 shared
PowerPoint Presentation
NodeJSby Ryan DahlCreated by Engin Yelgen
1
Temel zellikleriYazm Javascript gibi fakat server-side alan bir uygulamaReal-timeEvent-basedLow level language C gibiJS basitliiAsynchronous(non-blocking) uygulamaScalable network
2
Google V8 Javascript engine
Google NodeJS i V8 Javascript engine adn verdii katmanda temel bir ktphanede kullanyor.3
Real-time web uygulamalar
NodeJS in yaratcs Ryan Dahl amac real-time web oluturmakt. Yazlmclara non-blocking, event-driven I/O programlama yapabilecekleri bir ara verdi.Websocket ler zerinden push teknolojisini kullanan real-time web uygulamalar ile parlad. Real-time web uygulamalar hem server hem de client arasnda kurulan ift tarafl balant ile iletiimi balatabilir. 4
Neden baarl?KolaylkEilim
Node event-driven I/O programlama yapmakta kullanlan en kolay yoldur ve dier platformlara nazaran anlamas daha kolaydr ve baarldr Node btn problemleri zmeye almaz; fonksiyonel ve karmak olmayan API leri kullanan temel internet protokollerini destekler ve temelini kurar5
NodeJS artk bir ok nl firmann teknolojilerini gelitirmesinde nemli rol oynar6
Event Loopsoftware pattern non-blocking I/O program
var post = db.query(select * from posts where id = 1);doSomethingWithPost(post);doSomethingElse(); Blocking
Yukardaki kod parasnda database query tamamlanncaya kadar btn ilemler atl kalr ve cevabn gelmesini bekler. Buna blocking denir.
Bu yolla programlama paralel I/O ilemi yapmanza izin vermez(rn: baka bir database de query altrmak veya uzak web servis ile balant kurmak)
7
Bundan syrlmann 2 yntemi vardr;
Daha fazla call stack yaratmakEvent-driven I/O kullanmak
Callback = function(post){doSomethingWithPost(post); // yalnzca db.query fonksiyonu bittii anda altrlr.};
db.query(select * from posts where id=1, callback);doSomethingElse(); // db.query fonksiyonun bitmesini beklemeden alr. (asynchronous)
leminizin e zamanl daha fazla I/O gerekletirmesini istiyorsanz thread leri kullanabilirsiniz fakat multi-threaded modelleri yaplandrmas, anlamas ve debug yapmas olduka zordur.
Callback mekanizmas bilindii gibi belli bir olayn gereklemesiyle tetiklenir. Aslnda bir fonksiyondur. Bu yzden event callback kullanmak daha akllca bir zm olacaktr.
8
Bu yzden event driven programlama e zamanl bir ok balanty kontol altnda tutmak iin en iyi yoldur. Bu sayede server kullanmn da kontrol altnda tutmu oluruz.
JS closure ve first-class functions
(function(){var clickCount = 0;document.getElementById(mybutton).onclick = function(){clickCount++;alert(Clicked + clickCount + times.);};})(); // Closure: bu kod blounun deikenlerine dardan eriilemez. Kendi ortamndaki deikenleri kullanr.Neden JS ?
Bu da onu event-driven I/O programlamada gl bir seim yapyor.
Bu da NodeJS in kalbidir, onun baarl olmasnda gl bir zelliktir.
10
var myFunc = function(){console.log(hello);}
(function(){myFunc();})();
// First-class function: bir fonksiyonu bir deikene atayabiliriz ve bu deikeni fonksiyon gibi istediimiz yerden arabiliriz.
var scheduler = function(timeout, callbackfunction){return function(){setTimeout(callbackfunction, timeout) // callbackfunction timeout sresi sonunda altrlr}};
(function(){// bu deikenlere scope dndan eriilemez..var timeout = 1000; // 1 saniyevar count = 0;// daha nceden tanmladmz fonksiyonu aryoruz ve gereken parametreleri gnderiyoruzvar schedule = scheduler(timeout, function doStuff(){console.log(++count);schedule();});schedule() // yukardaki deikene atadmz fonksiyonu tekrar altryoruz})(); // ierde tanmladmz fonksiyon bu satr yorumlandnda altrlr
Ayn zamanda bir fonksiyona zellik atayabilir, bunu iindeki objelere geirebiliriz, ierden bir sonu dndrebiliriz.12
NodeJS PHP
Response times
Temel ama Non-blocking, event-driven I/O yaplar kullanarak, data younluuyla kar karya kalan real-time uygulamalarda verimlilii artrmak, younluu azaltmak.Nasl alr ?
NodeJS yksek CPU kullanan ilemlerde kullanmak tavsiye edilmez; ar derecede hesaplama olan ilemlerde kullanmak hemen hemen btn avantajlarn geri evirmek olur.
nk Node hzl ve leklendirilebilen network uygulamalaryla n kazanmtr. Yani byk miktarda e zamanl balanty verimli bir ekilde idare edebilme kabiliyetine sahiptir.
Her balant yeni bir thread talep eder. Bu da yksek oranda RAM kullanm anlamna gelir.Non-blocking I/O call kullanarak tek bir thread ile on binlerce e zamanl balantya destek verir.
Farzedelim ki her bir thread e 2 MB memory tahsis edilse, sistemimizde de 8 GB ram bulunuyorsa, teorik olarak maksimum 4000 e zamanl balant aabilir. Art bi de thread ler arasndaki context switching. Bundan kamak istiyorsan, Node bir milyonun zerinde e zamanl balanty ynetebilme baarsna sahiptir.16
Tek bir thread ile btn client isteklerine cevap vermek yeterli olur mu? Acaba bir sorun meydana gelir mi?
Tabi ki gelir..
lk olarak ar derecede hesaplama olan ilemler thread i tkayabilir bu da btn client lar iin problem dourabilir.
- Mesala gelen istekler hesaplama tamamlanncaya kadar bloklanabilir.
- Halbuki event-loop iinde her an bir exeption ile kar karya kalabilirsiniz. Bu da programn crash olmasna, sonlanmasna neden olabilir.17
Exception lar programn crash olmasna sebep olmadan nasl ele alabiliriz?
lk akla gelen callback fonksiyonlarn iinde gelen err parametresini kullanmak olur..
Ya da..
Ama her ikisi de kt bir kullanm rneidir.
nk...
18
Hatay yakaladnz zaman uygulamay unclean state de dikkate alm olursun. Bu nokta da uygulamaya gvenilir bir ekilde devam edemezsin.
Daha iyisi..
var cluster = require('cluster'); var workers = process.env.WORKERS || require('os').cpus().length; if (cluster.isMaster) { console.log('start cluster with %s workers', workers); for (var i = 0; i < workers; ++i) { var worker = cluster.fork().process; console.log('worker %s started.', worker.pid); } cluster.on('exit', function(worker) { console.log('worker %s died. restart...', worker.process.pid); cluster.fork(); }); } else { var http = require('http'); http.createServer(function (req, res) { res.end('Look Mum! I'm a server!\n'); }).listen(3000, "127.0.0.1"); } process.on('uncaughtException', function (err) { console.error((new Date).toUTCString() + ' uncaughtException:', err.message) console.error(err.stack) process.exit(1) })
Alnan hata log dosyasna kaydedip uygulamann restart olmasn salyor. Bu sayede de uygulamann crash olmasn ve thread in tkanmasnn nne geiyoruz.
20
https://npmjs.org/ sitesinden NPM modllerine gzatabilir, indirebilirsiniz. stersenizde NPM CLI kullanarak da indirme ilemini yapabilirsiniz.
Express ou NodeJS uygulamasn bulabilirsiniz.Connect HTTP server frameworkSocket.io ve sockjs en yaygn websocket server-side component leriJade template engineMongo ve mongojs API(MongoDB object databases)Redis client ktphanesicoffee-script compilerunderscore(lodash,lazy)- en popler JS utility ktphanesiForever CLI toolNPM: The Node Package Manager
NodeJS den bahsederken NPM i bahsetmeden geemeyiz. NPM 2 eyi bnyesinde barndrr. Birincisi yaynlanan open-source NodeJS projeleri. kincisi uygulamay yazarken kullandmz moduller. Bir ok NodeJS ktphanesi ve uygulamas NPM de yaynlanr.21
NodeJS nerelerde kullanlmas uygun olur?
CHAT
Youn trafik, data younluu olan ama dk seviyede ilem/hesaplama olan bir uygulama. Tek bir chatroom; insanlarn biraraya geldii ve mesaj al-veriinde bulunduu.23
Express.jsRequest handlerWebsocket server
Request handler = message board ve send butonundan yeni mesaj oluturmasnda hizmet eder.Websocket server = websocket client yaynlanan mesajlar dinler.24
Button click event
HTML PageWebsocket client
Button click event = mesaj giriini yakalar ve websocket e gnderir.Websocket client = yeni gelen mesajlar dinler.25
Mesaj gnderiliyor...
Send button click: mesaj yakala Websocket client: server ile balanty kur ve mesaj yaynla
Websocket server: mesaj al ve dier bal client lara ilet(broadcast)
Websocket client: tm client lar mesaj ald ve mesaj pencereleri gncellendi..
API ON TOP OF AN OBJECT DB
JSON objelerini herhangi bir convert ilemi yapmadan REST API araclyla kullanclara iletebilirsin. Eer Mongo DB kullanyorsan da database den okuma ve yazma ilemlerinde de JSON convert etmene gerek yoktur.27
QUEUED INPUTS
Data younluu fazla olan uygulamalarda; kullancy hemen bilgilendir sanki istek baarlyla tamamlanm gibi ama database e yazma isteini engelle taki younluk geene kadar. stekle daha sonra ilgilen.
Caching veya message queuing altyaps..(RabbitMQ,ZeroMQ)
Eer e zamanl olarak byk miktarlarda data alyorsanz database yavalayabilir. Bu da ileminizin bloklanmasna ve kullanc isteklerinin ge cevaplanmasna neden olabilir.28
DATA STREAMINGReal-time audio video encoding
Encode video upload olurken. nk NodeJS video yu kullanclarn upload etmesinden ok daha ksa srede encode eder. Bu da upload ile encode arasnda bir gecikme olmamas demek. Zamandan kazan; upload ileminden sonra sonra encode iin bir ek sre daha harcamaya gerek yok. Yukardaki video da bu sayede ilemi 150 kat hzla tamamlayabiliyoruz..Sadece realtime: true demek yeterli, bu ilemi yapabilmek iin.
29
PROXY
NodeJS i server-side proxy iin kullanabilirsin. nk NodeJS e zamanl bir ok balanty non-blocking mantyla stesinden gelebilir. zellikle farkl servisler iin farkl farkl istekler geldiinde ya da farkl bir ok noktadan gelen verileri toplamakta kullanldr30
BROKERAGE - STOCK TRADERS DASHBOARD
rnek: Real-time web uygulamas Broker lar iin. Ki buradan stok fiyatlarn anlk olarak takip edebilecek. Hesaplar analizler yapabilecek. Chart/Graph ile grsel olarak da uygulama desteklenebilir.31
APPLICATION MONITORING DASHBOARD
Web sitenizde anlk olarak ziyaretileri ve ne ilem yaptn izleyebilirsiniz. Hummingbird uygulamas NodeJS kullanarak bu ii yapm. Dnsenize.. Yaptnz ite anlk olarak ziyaretileri takip edebildiinizi; uan ka kii ziyaret ediyor, ne ilem yapyolar. Sizde bu sayede insanlar istediiniz noktaya ynlendirebilirsiniz. Bundan byk kazan salayabilirsiniz.32
SYSTEM MONITORING DASHBOARD
NodeJS ile gl bir web-based dashboard oluturarak bir servisin anlk durumunu izleyebiliriz.AsynchronousWebsocket ile kullanclara verileri iletmek
33
NodeJS nerelerde kullanlabilir?
SERVER-SIDE WEB APPLICATIONSAvantajl olduumuz noktalar;Eer uygulamanz youn olarak CPU kullanm(ok fazla hesaplama) yapmayacaksaMongoDB gibi JSON veri depolayan bir object DB ile alyorsanzSingle Page ApplicationWebsocket ApplicationDezavantajl olduumuz noktalar;Youn olarak CPU kullanm gerektiren iler(bu durumda cevap bloklanabilir) - Bu seneryo da thread kullanmak daha iyi bir seim olacaktr. Ya da hesaplamalarnz snrlandracaksnz..NodeJS i relational bir DB ile kullanmak olduka sknt yaratabilir. Eer relational ilemler yapcaksan, bunu Rails, Django ya da ASP.Net MVC gibi ayr platformlarda yapsan iyi olur.
NodeJS nerelerde kullanlmamal?
SERVER-SIDE WEB APPLICATION W/A RELATIONAL DB BEHIND
HEAVY SERVER-SIDE COMPUTATION/PROCESSING
Dier uygulamalar Rails gibi data access kurulumunu, DB emasn iermesine ramen; yani bir framework, bir data access layer olmasna ramen NodeJS bu aamada daha erken safadadr. Daha bu konuda olgunlamamtr.
NodeJS ile yaplan uygulamalar CPU bound deil I/O bound olmal. nk NodeJS single-thread, event loop driven mant ile alyor. 37
Yaknda...NodeJS ile SignalR arasndaki farklarAzure Cloud Service NodeJS kullanm NodeJS - NPM kurulumu ve platformun hazrlanmasReal-time Web e GiriNodeJS ile SQL connection veri depolamak, ekmekWebsocket ile Chat uygulamasZiyareti takip uygulamas