Node.js Nedir?

Selamlar Arkadaşlar;

Bugün node.js üzerine biraz konuşacağız. Javascript ile server side uygulamalar yazabileceğimiz, Joyent tarafından 2009 yılında geliştirilmeye başlanmış bir Javascript Runtime platformudur. V8 denilen javascript motoru üzerinde çalışır. V8 Google tarafından geliştirilen, Chrome web browserlarının da üzerinde çalıştığı C, C++ ve javascript dilleri ile kodlanan bir enginedir. Tek amacı javascript kodunu makine koduna çevirmektir. Kesinlikle çok performanslıdır. Asenkron olarak çalışan çoklu eventler yaratıp bizzat test ettim. Response hızları inanılmazdı. I/O ve network işlemlerini non-blocking olarak çalıştıran node.js, zaman ve kaynak konusunda çok cimri. Yani örnek verilmek istenir ise çok yüksek trafikli sitelerde anlık işlemler, kullanıcı sorgulamadan aynı signalR’da olduğu gibi web socket kullanılarak client’ın ekranına çok kısa zamanda ve az kaynak tüketilerek gönderilebilir. Mesela bir servisten çekilen borsa bilgilerinin tüm clientlara gönderilmesi gibi. Bu işlemi kullanıcı sorgulamadan borsa bilgileri değiştikçe yapılacaktır. Gerçek zamanlı (real time) uygulamalar web soket teknolojisi kullanılarak node.js ile performanslı bir şekilde yapılabilir.

linkedinpaypal_logo

Şimdi biraz da dünyadan örnekler verelim. Node.js’e geçen popüler firmalardan biri Linkedin’dir. Mobil sunucu tarafında Node.js ’e geçmeden önce Rails kullanıyordu. Node.js ’e geçtikten sonra server maliyeti 1/10 düşmüştür. Bazı işlemlerde 20 kata varan hız artışı olmuştır. Bence en güzel örnek Paypall. Hem de daha yakın tarihli. Paypall çalışma paltformunu riske etmemek için, direkt Node.js’e geçişi yerine Java ve Node.js olarak 2 plaftormda paralel olarak geliştirme yapmıştır. Sonuçta Node.js java uygulamasına göre 2 kat daha fazla saniyelik istemi karşılamıştır. Üstelik Node.js tek çekirdekli bir işlemci üzerinden çalışırken java uygulaması beş çekirdekli işlemci üzerinde çalışmaktadır. Yani Node.js maliyeti 1/5’e indirmiştir. Ayrıca response time’ı %35 hızlanmıştır.

Node.js’i https://nodejs.org/ ‘dan aşağıdaki gibi kolaylıkla indirilebilir.

node

Uygulamanın kurulduğu yere ‘node’ yazıp enter’a basılarak, javascript kodunun server-side olarak yazılabilecek platforma kavuşulmuş olunur. Örneğin ben aşağıda console’a yazı yazdırdım.

node2

Şimdi gelelim ilk örneğimize: Aşağıda görüldüğü gibi bir http server oluşturulur. 2 parametre alır(req: request ve res: response). response ile sayfanın header’ının content-type‘ı “text/plain” ve içine yazılacak yazı belirlenir. req.url‘e göre  yazılacak yazı koşula konur. Koşuldan kasıt Url’deki req.url‘e göre sayfaya basılan yazı değiştirilir. listen ile server’ın çalışacağı port ve local Ip belirlenir. Console log’a server’ın başladığı yazılır. İlgili kod NodeTest.js adında bir dosyanın içine konup kaydedilir.

D:\nodejs\NodeTest.js:

Aşağıdaki gibi node.js’i yüklediğimiz yerde node <ilgili javascript(.js) dosyası> çağrılır.

node

Ekran çıktıları:

nodejs

Böylece IIS olmadan  ilk sayfamızı yayımladık. Şimdi gelelim npm konusuna. Bu konu ile ilgili makaleye buradan ulaşabilirsiniz. Aynı nuget’de olduğu gibi node.js’de npm ile istenilen paketi indirip kod geliştirmede kullanabilir. Örnek olarak /bora ile sayfaya gelindiğinde sayfaya basılan “Bora Canakkaleye Hosgeldin.” yazısını url’ uygun bir şekle çevirelim. Aynı makalelere verilen ismin url’e dönüştürülmesi gibi. npm install urlify ile ilgili paket yüklenir. Urlify ile ilgili npm sayfasına buradan erişebilirsiniz.

İlgili kod aşağıdaki gibi değiştirilir. İndirilen urlify paketi options değerleri belirlendikten sonra ilgili yazı urlify(text) ile url’e uygun hale getirilir.

Urlify kullanılış şekli:

NodeTest.js:

Örnek Çıktı:

url

Biraz da Client Ve Server Socket mantığı üzerine konuşalım. Istemci / sunucu modeli ağ, bilgisayar tarihinin en temel olgularından biridir. Günümüzde birçok uygulama client/server modeli üzerine kurgulanmaktadır. Bu örnekte bir server socket yazılıp belli bir port dinlenecektir. Client bağlanınca, server tarafından ona data gönderip, ondan gelen data yazdırılacaktır. Aynı şekilde client socket yazılıp ilgili server’a bağlanınca client tarafından ilgili server’a data gönderilip, ondan gelen data yazdırılacaktır.

socketServer.js: Öncelikle net.createServer ile server socket yaratılır. Sonra server.listen gelicek clientlar belli bir porttan(9099) dinlenir. Eğer client connect olur ise clientdan gelen data (client.on(‘data’, function(data) {}) ve client’ın disconnect bilgileri (client.on(‘end’, function() {}) ile yazdırılır. client.write() ile bağlanan client’a data gönderilir.

socketClinet.js: Client Socket server’a belli bir IP ve Port ile bağlanır ve data alışverişinde bulunur. Server’a  net.connect (Ip,Port) ile bağlanır. client.write() ile server’a data gönderir. client.on(‘data’, function(data) {} ile serverdan ilgili data alınır.

Önce socketServer sonra clientServer çalıştırılır.

  1. server
  2. client

Örnek ekran çıktısı aşağıdaki gibidir: Böylece server ve client arasındaki iletişim node.js ile socket kullanılarak sağlanmış olunur.

screen

Böylece node.js’e giriş yapmış olduk. Sayfalarda update yapamak için server’ı restart etmek ve visual studio gibi bir ortamda kod geliştirilememesi gibi eksiklikler haricinde gösterdiği performance ve düşük maliyeti ile neden bu kadar popüler  olduğunu bana bir daha gösterdi. Özellikle web servisleri ve asenkron konularında kesinlikle göz ardı edilmemesi gereken bir Javascript Runtime Platformudur.

Yeni bir makalede görüşmek üzere hoşçakalın.

Herkes Görsün:

Bunlar da hoşunuza gidebilir...

28 Cevaplar

  1. Romario dedi ki:

    2. örnekteki (Client Ve Server Socket) kodları denedim, “Error: ECONNREFUSED” hatasıyla karşılaştım. Windows XP makinam. Hatayı gideremedim.

    • borsoft dedi ki:

      Selamlar;

      .Öncelikle portu değiştirip denemeni tavsiye ederim.
      .Bir de makinadaki firewall ayarlarına bir bakamak gerekebilir. Belki belli portları engelliyordur.

      İyi çalışmalar.

  2. veli dedi ki:

    Elinize sağlık Bora Hocam;
    Çok güzel bir yazısı olmuş. Bende windows8 ile tüm kodlar çok güzel çalıştı.

    Bilginize..

  3. Romario dedi ki:

    Başka port denedim ve Firewall’u kapadım yine çalışmadı fakat diğer Windows XP laptopumda denedim, çalıştı. Şu anki Windows’umun Networking kısmı sorunlu olmalı kesin.

    Ancak yine bir sorum var: Client Ve Server Socket bağlantısı yaparken ‘net’ modülü kullanılıyor fakat başka biryerde ‘WebSocket’ kullanıldığını gördüm aradaki fark nedir?

    • borsoft dedi ki:

      Selam ömer;
      Çalışmasına sevindim. Bana örnek kod gösterirsen sana daha cok yardım edebilirim.

      Hoşçakal.

  4. Tahsin dedi ki:

    Selamlar Bora Hocam,
    Değerli paylaşımlarınız için teşekkür ederiz, yakından takip etmekteyim.
    Sizin signalr tecrübeniz malum, bundan yola çıkarak Nodejs ve Signalr karşlılaştırmalı bilgi verebilir misiniz? İkisi arasında performans, güvenlik, geliştirebilirlik yönetebilirlik güven verme avantaj dezavantaj gibi konularda sizin görüş ve tecrüblerinizi almak isterim.
    Bende nodejs ile başlayıp tecrübeler edindikten sonra daha çok signalr ile devam etmekteyim.Bunda en büyük etkenlerden biri server tarafında bütün işi JS ye bırakmak gibi.
    Bu konuda bilgilendirici bir makale yazabilirseniz çok fayadalı olacağını düşünüyorum.
    İyi çalışmalar, tekrar teşekkür ederim.

    • borsoft dedi ki:

      Selamlar Tahsin;
      Öncelikle yorumun için teşekkürler.
      Bunun için bir karşılaştıma videosu yapabilirim. Ama hızlıca performans dersen sanki node.js bir adım önde. Ama geliştirme kolaylığı ve yönetilebilirlik signalR daha ağır basıyor.
      Güvenlik konusunda 2 side gayet güvenli hale getirilebilir. Kullanacağın database göre seçimlerin değişebilir. Mesela MongoDb kullanılacak ise tabiki node.js ama Sql kullanılacak ise .Net teknolojilerini tercih edilmesi daha avantajlı olabilir. Azure tarafında 2 side gayet güzel çalışıyor o konuda da bir sıkıntı yok. Yani 2 sininde kendine göre + ve – leri var. İlk etapta aklıma gelenler bunlar. Ama bunlar tabiki benim görüşlerim. Asıl doğru sonuçları ölçümler gösterir. Vakit bulduğumda, 2’si ile de daha detaylı testler yapıp sayılarla konuşmayı tercih ederim:) Bu aralar bolca üniversitelere gideceğimden dolayı biraz yoğunum. Tarihler kesinleştikçe hepsini twitter’dan duyuracağım. İyi çalışmalar.

  5. Mustafa dedi ki:

    Merhaba hocam;

    Bende SignalR ve NodeJS performans karşılaştırması hakkında video bekleyenlerdenim. Bir önceki yorumda karşılaştırma videosu yayınlayacağınızı belirtmişsiniz, ben mi bulamadım, yoksa daha çekmediniz mi?

    Eğer video çekilmedi ve performans konusunda öğrenebildiğiniz bir bilgi varsa paylaşırsanız sevinirim teşekkür ederim :)

    • borsoft dedi ki:

      Selam Mustafa;
      Karşılaştırma videosu çekmeye bir türlü fırsatım olmadı. Hatırlattığın için teşekkürler. Enkısa zamanda bu konuya el atıcağım.

      Hoşçakal…

  6. Enis Çiftçi dedi ki:

    Emeğinize sağlık. Gerçekten güzel bir yazı olmuş.

  7. Ümit dedi ki:

    Hocam node.js zamanla php nin yerini alabilir mi? Çünkü node.js üzerinden mysql’den veri çekmek mümkün. Bu durumda php ihtiyaç kalmıyor gibi görünüyor. Kısaca php – mysql vs node.js – mysql

    • borsoft dedi ki:

      Selam Ümit,

      Hepsinin yeri ayrı :)
      Bence yerini almaz. 2 side güçlü ve kullanışlı.

      İyi çalışmalar.

  8. Ümit dedi ki:

    Hocam node.js mysql modülü ile php ye olan ihtiyacı kaldırıyor gibi görünüyor. Kısaca php – mysql vs node.js – mysql

  9. Tarık dedi ki:

    Merhaba, son cevabınızın 18 Eylül olması biraz ümit kırıcı ama sorayım:

    node.js konusundan bu gün bilgisayarıma yüklediğim Secunia PSI sayesinde haberdar oldum, güncellememi istedi.
    Kısa bir araştırmadan sonra siteniz dahil bunun yazılımcı taraflı olduğunu gördüm.

    Sorum şu ki, bir win 10 son kullanıcısı olarak bunu yüklememenin bana faydası nedir?

    Teşekkürler.

    • borsoft dedi ki:

      Selamlar Tarik,

      Ben her zaman cevap yazarım :) Senin kafana takacağın hiçbir problem yok. Secunia PSI Uygulaması arkada Nodejs kullanıyordur. Sağlıklı ve son versiyonunu kullanılması için güncelleme istemiştir. Eğer Secunia PSI’ı kullanmayacak isen nodejs’i kaldıra bilirsin. Ama boyutu az ve hiçbir zararı yoktur. Ayrıca güvenlik açığı oluşturmaz. Bence kodlamaya başlayıp NodeJs ile neler yapılabiliyor, socket nedir gibi başlıklara göz atabilirsin:) Bakarsın birgün sen de developer olursun :)

      Hoşçakal. Hep böyle meraklı kal!

  10. Barbaros KUZ dedi ki:

    Bora Hocam Merhaba;
    Paylaşımlarınız bizler için çok değerli.Hata bulma amacında değilim sadece çalıştırmak da sorun yaşayan arkadaşlar olabilir.
    D:\nodejs\NodeTest.cs: ifadesini D:\nodejs\NodeTest.js: olarak düzenleyebilir misiniz?

    Teşekkürler

    • borsoft dedi ki:

      Selam Barbaros,

      Teşekkürler. Düzelttim. Niye yanlış anlıyım :) Zaten yanlış yazmışım :)
      Eline sağlık..

      Hoşçakal…

  11. kemal dedi ki:

    Merhaba hocam node.js yeni başladım node.js de local de bir modül kurmaya çalıştığımda

    “npm WARN optional Skipping failed optional dependency /chokidar/fsevents:
    npm WARN notsup Not compatible with your operating system or architecture: fsevents@1.0.0”

    gibi hatalar veriyor sebebi sizce ne olabilir.Kurduğum paket sorunsuz çalışıyor ama bu hatayı alıyorum

    • borsoft dedi ki:

      Selam,

      Kurulumla ilgili bir uyumsuzluk sorunu.
      Şunu deniyebilirsin: npm update –no-optional

      İyi çalışmalar.

      • Kemal dedi ki:

        Hocam tekrar merhaba bu kodu denedim yine aynı hatayı veriyor. Bu tam olarak npm sürümüyle yüklenen modül arasındaki versiyon uyumsuzluğu mudur.Global yüklemede böyle bir hata almıyorum.Ayrıca bu hatayı vermeye devam ettiğinde yazdığım projede bir sorun çıkarır mı? Başka ne gibi bir çözümü olabilir?İnternette araştırdım kalıcı bir çözümü yok galiba…

  12. gokhan gungor dedi ki:

    Merhabalar node js uygulamaları sürekli çalışır hale nasıl getirebiliriz ? Command promp kapanınca sayfaya erişemiyorum . Bunun çozumunu arastırdır. Forever diye b,rsey buldum. Command Prompt kapanınca web sayfasına erişime devam edebiliyorum çok güzel. Ancak pc ye restart atınca yine erişemiyorum. Node uygulamalarının windows servis seklinde çalıstırabilmemiz mümkün müdür

  13. Azat dedi ki:

    Hocam Merhaba,

    .net üzerinde çalışıyorum şu sıralar Node.js merakımı geçti araştırma öğrenme üzerindeyim, fakat merak ettiğim bir konu var acaba .net gibi katmanlı mimari veya OOP yapısı mevcutmudur. Varsa örnek bir yapı veya link gönderebilir misiniz

  14. Onur dedi ki:

    Hocam selamlar,

    Öncelikle yazınız için çok teşekkür ederim. Sizden istediğim yakın bir zamanda MEAN Stack ve Angular FullStack kavramlarına örnek bir proje ile değinebilir misiniz ?

    Tekrar teşekkür ederim ,
    Saygılarımla.

  15. Alp dedi ki:

    Düzeltme : Node.js bir framework değildir. Node.js bir Javascript Runtime Environment’dır.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir