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...

44 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

    • borsoft dedi ki:

      sELAM aZAT,

      Node.Js ile OOP yazabilmen mümkün. Bunun için tavsiye edilen genelde mootools şeklinde bir tool.

      İyi çalışmalar.

  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.

  16. Mehmet dedi ki:

    nodejs ile bor oyun yaptim. Ancak sunucu tarafinda io.emit ya da socket.broadcast.emit kullandigim takdirde sunucu asiri kasiliyor.2 kisi dahi oynarken kasiyor. Sirf bu yuzden gunlerdir cabaladigim oyunu biraktim. Sunucu tarafinda socket.emit kullandigimda sorun yok. Gayet hizli. Ama benim bu veriyi tum istemcilere yollamam gerek. Bu konuda hicbir kaynak bulamadim. Bu konuda bir öneriniz var mi ?

    • borsoft dedi ki:

      Selamlar Mehmet,

      Bence nodejs yerine bir de .Net Core 2.0’a fırsat ver. Bir de socket için SignalR kullan. Ve Scale et. SignalR scale için Redis, Azure veya Sql kullanabilirsin. Ondan sonra performance’ı göre. SignalR’ı 3 makinaya scale ettin mi sonucu bana da bildir.

      İyi çalışmalar.

  17. Burak Tagtekin dedi ki:

    Bora hocam merhabalar,
    Node js ile yazdığımız websitelerini illa cloud yada virtual server’a mı kurmamız gerekir?
    Türkiyede hostingler zamanla php mysql hizmeti verdikleri gibi zamanla node ve NoSql hizmeti vermeye başlarlarmı düşünceleriniz nelerdir

    • borsoft dedi ki:

      Selam Burak,

      NoSql hizmeti veren firmalar biliyorum. NodeJs hizmeti de bence zamanla olur diyorum. Ama belki o da vardır. Bilgi dahilimde değil. Arz talep meselesi. Eğer talep artar ise mutlaka hizmeti de gelir.

      İyi çalışmalar.

  18. onur değer dedi ki:

    Bilgiler için teşekkürler, açıklayıcı ve faydalı olmuş.

  19. Seime dedi ki:

    Merhaba hocam,
    Node.js ve sublime text gibi programlar için gerekli bir bilgisayarin minimum ne tür özellikleri olmasi gerekir? Benim tablet bilgisayarım oldugu icin maalesef programlari kursam dahi kullanma imkanim olmadi. Cevabiniz icin tesekkur ederim :)

  20. Sezer dedi ki:

    Türkçe kaynak konusunda değerli , verimli , ilgili ,bilgili içerik üreten bir kişisiniz . Ellerinize sağlık , Bora bey :)

  21. yusuf dedi ki:

    Bora bey merhaba ,
    Real time veri akışı için sizce en iyi çözüm nedir.
    Bu arada paylaşımlarınızı çok beğendim elinize sağlık.

    • borsoft dedi ki:

      Selamlar Yusuf,
      Öncelikle teşekkürler..

      Şimdi en iyi çözüm, soruna ve önceliğe göre değişiklik gösterir. Sizin amacınız nedir?

  22. Anıl dedi ki:

    Bora bey nodejs ile neler yapilabilir hangi alanda kullanabiliriz biraz bilgi verebilir misiniz? Teşekkür

  23. Halil dedi ki:

    Teşekkürler

  24. Muhammet dedi ki:

    Webrtc nodejs yazilimdan anlayan biri varsa yazilima ozellik ekletecem telim 0530 680 05 47 ismim muhammet

  25. Muhammmet dedi ki:

    Bende node.js yazılımı var chat sohbet olarak yazilimda calisian 2 3 tane yazilimci oldu ama ufak tefekleri yapdilar ozellik eklediler ama nedense coklu konusma sitemi yapdirmak istedim bilenlerde yok cocum hasta yok musait degilim dediler anlaycaniz bekliom öyle saglam yazilimci bekliyorum bu arada birsenpanel.com adresinden giris yapip demo girise gelirseniz node .js yazilimi chat larak görürsunüz yardim edecekeler cin yazdim bu yazimi

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.