Node.js® Hakkında

Asenkron, olay tabanlı JavaScript çalışma ortamı olan Node.js, ölçeklenebilir ağ uygulamaları oluşturmak için tasarlanmıştır. Aşağıdaki "hello world" örneğinde, birçok bağlantı aynı anda ele alınabilir. Her bağlantıda geri çağırım başlatılır, ancak yapılacak hiçbir iş yoksa Node.js uyuyacaktır.

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

Bu, işletim sistemi iş parçacıklarının(thread) kullanıldığı günümüzün yaygın eşzamanlılık modelinin aksinedir. İş parçacığı tabanlı ağ iletişimi nispeten yetersiz ve kullanmak için zor. Ayrıca, Node.js kullanıcıları işlemlerin kilitlenmesinden endişe duymaz, çünkü kilitler yoktur. Node.js'deki neredeyse hiçbir işlev doğrudan G/Ç gerçekleştirmez, bu yüzden işlem hiç bloklanmaz. Hiçbir şey engellemediğinden, ölçeklenebilir sistemlerin Node.js'de geliştirilmesi çok makul.

Bu dilin bir kısmı alışılmadık geldiyse, Blocking vs. Non-Blocking hakkında tam bir makale mevcut.


Node.js, Ruby'nin Event Machine ve Python'ın Twisted gibi sistemlerine tasarım olarak benzer ve bunlardan etkilenmiştir. Node.js olay modelini biraz daha ileri götürür. event loop'u bir kütüphane yerine çalışma ortamı yapısı olarak sunar. Diğer sistemlerde, genellikle event-loop'u başlatan bir blokeli çağırım vardır. Tipik olarak, davranış betiğin başlangıcındaki geri çağırımlar vasıtasıyla tanımlanmıştır ve sonunda bir sunucu EventMachine::run() gibi bir blokeli çağırım vasıtasıyla başlatılır. Node.js'de böyle bir olay-dongüsünü-başlat çağırımı yoktur. Node.js girdi betiğini yürüttükten sonra basitçe olay döngüsüne girer. Node.js yerine getirilecek daha fazla geri çağırım kalmadığı zaman olay döngüsünden çıkar. Bu davranış internet tarayıcısındaki JavaScript gibidir - olay döngüsü kullanıcıdan gizlenmiştir.

HTTP, akış ve düşük gecikme süresi göz önünde bulundurularak tasarlanan Node.js'de birinci sınıf bir vatandaştır. Bu, Node.js'yi bir web kütüphanesinin veya çatının oluşturulması için çok uygun yapar.

Node.js'nin iş parçacıkları olmadan tasarlanmış olması, ortamınızdaki birden çok çekirdeğin avantajlarından yararlanamayacağınız anlamına gelmez. Çocuk işlemler child_process.fork() API'miz kullanılarak oluşturulabilirler ve birbirleriyle iletişim kurması kolay olacak şekilde tasarlanmışlardır. Aynı arayüz üzerine kurulu cluster modülü, çekirdekleriniz üzerindeki yük dengelemesini sağlamak için işlemler arasında soketleri paylaşmanıza olanak tanır.

Yukarı