Node.js'nin ne zaman kullanılacağına nasıl karar verilir?

Bu tür şeylerde yeniyim, ancak son zamanlarda Node.js'in ne kadar iyi olduğu hakkında çok şey duyuyorum. Genel olarak jQuery ve JavaScript ile çalışmayı ne kadar sevdiğimi düşünürsek, Node.js'yi ne zaman kullanacağıma nasıl karar vereceğimi merak etmeden duramıyorum. Aklımdaki web uygulaması Bitly gibi bir şey - bazı içerikleri alıyor, arşivliyor.

Son birkaç gündür yaptığım ev ödevlerinden aşağıdaki bilgileri edindim. Node.js

  • normal bir web sunucusu olarak çalıştırılabilen ve JavaScript programlarını çalıştırmaya izin veren bir komut satırı aracıdır
  • harika V8 JavaScript motorunu kullanır
  • aynı anda birkaç şey yapmanız gerektiğinde çok iyidir
  • olay tabanlıdır, böylece tüm harika Ajaxbenzeri şeyler sunucu tarafında yapılabilir
  • tarayıcı ve arka uç arasında kod paylaşımı yapmamızı sağlar
  • MySQL ile konuşalım

Karşılaştığım kaynaklardan bazıları şunlardır:

Node.js'nin Amazon'un EC2 örneklerinde neredeyse kullanıma hazır olarak çalıştırılabildiğini göz önünde bulundurarak, PHP, Python ve Ruby gibi güçlü kralların aksine ne tür sorunların Node.js gerektirdiğini anlamaya çalışıyorum. Bunun gerçekten kişinin bir dil üzerinde sahip olduğu uzmanlığa bağlı olduğunu anlıyorum, ancak benim sorum daha çok genel kategoriye giriyor: Belirli bir framework ne zaman kullanılmalı ve özellikle ne tür problemler için uygundur?

Çözüm

Node.js hakkında harika olan şeyleri özetleyerek harika bir iş çıkardınız. Node.js'nin özellikle tarayıcıdan sunucuya kalıcı bir bağlantı sağlamak istediğiniz uygulamalar için uygun olduğunu düşünüyorum. Long-polling"]1 olarak bilinen bir teknik kullanarak, kullanıcıya gerçek zamanlı olarak güncellemeler gönderen bir uygulama yazabilirsiniz. Ruby on Rails]2 veya Django gibi web devlerinin çoğunda uzun yoklama yapmak, sunucu üzerinde büyük bir yük yaratacaktır, çünkü her aktif istemci bir sunucu işlemini tüketir. Bu durum bir tarpit saldırısı anlamına gelir. Node.js gibi bir şey kullandığınızda, sunucunun her açık bağlantı için ayrı iş parçacığı tutmasına gerek yoktur.

Bu, Node.js'de çok sayıda istemciye hizmet vermek için neredeyse hiç sistem kaynağı kullanmayan bir tarayıcı tabanlı sohbet uygulaması oluşturabileceğiniz anlamına gelir. Bu tür uzun süreli bir yoklama yapmak istediğinizde, Node.js harika bir seçenektir.

Ruby ve Python'un her ikisinin de bu tür şeyleri yapmak için araçları olduğunu (eventmachine ve twisted, sırasıyla), ancak Node.js'nin bunu son derece iyi ve sıfırdan yaptığını belirtmek gerekir. JavaScript, geri arama tabanlı bir eşzamanlılık modeline son derece iyi bir şekilde yerleştirilmiştir ve burada mükemmeldir. Ayrıca, hem istemciye hem de sunucuya özgü JSON ile serileştirme ve seriden çıkarma yapabilmek oldukça şıktır.

Buradaki diğer cevapları okumak için sabırsızlanıyorum, bu harika bir soru.

Node.js'nin istemci/sunucu aralığında çok sayıda kodu yeniden kullanacağınız durumlar için de harika olduğunu belirtmek gerekir. Meteor framework]8 bunu gerçekten kolaylaştırıyor ve birçok kişi bunun web geliştirmenin geleceği olabileceğini öne sürüyor. Deneyimlerime dayanarak Meteor'da kod yazmanın çok eğlenceli olduğunu söyleyebilirim ve bunun büyük bir kısmı, verilerinizi nasıl yeniden yapılandıracağınızı düşünmek için daha az zaman harcamaktır, böylece tarayıcıda çalışan kod kolayca manipüle edebilir ve geri aktarabilir.

Burada, gevent'ten biraz yardım alarak kurulumu çok kolay olan Pyramid ve long-polling hakkında bir makale var: TicTacToe ve Pyramid ile Uzun Yoklama.

Yorumlar (4)

Node.js'nin gerçek zamanlı uygulamalar için en uygun olduğuna inanıyorum: çevrimiçi oyunlar, işbirliği araçları, sohbet odaları veya bir kullanıcının (veya robotun? veya sensörün?) uygulama ile yaptıklarının diğer kullanıcılar tarafından sayfa yenileme olmadan anında görülmesi gereken herhangi bir şey.

Ayrıca Node.js ile birlikte Socket.IO'nun gerçek zamanlı gecikme sürenizi uzun yoklama ile mümkün olandan daha da azaltacağını belirtmeliyim. Socket.IO, en kötü durum senaryosu olarak uzun yoklamaya geri dönecek ve bunun yerine web soketlerini ve hatta mevcutsa Flash'ı kullanacaktır.

Ancak, kodun iş parçacıkları nedeniyle tıkanabileceği hemen hemen her durumun Node.js ile daha iyi ele alınabileceğini de belirtmeliyim. Ya da uygulamanın olay güdümlü olması gereken herhangi bir durum.

Ayrıca, Ryan Dahl bir keresinde katıldığım bir konuşmada Node.js kıyaslamalarının normal eski HTTP istekleri için Nginx'e çok yakın olduğunu söylemişti. Yani Node.js ile inşa edersek, normal kaynaklarımızı oldukça etkili bir şekilde sunabiliriz ve olay güdümlü şeylere ihtiyaç duyduğumuzda, bunu halletmeye hazırdır.

Ayrıca her zaman JavaScript. Tüm yığında Lingua Franca.

Yorumlar (3)

Kısa kesmek için:

Node.js, çok sayıda eşzamanlı bağlantıya sahip uygulamalar için çok uygundur ve her istek yalnızca çok az CPU döngüsüne ihtiyaç duyar, çünkü olay döngüsü (diğer tüm istemcilerle birlikte) bir işlevin yürütülmesi sırasında engellenir.

Node.js'deki olay döngüsü hakkında iyi bir makale Mixu's tech blog: Understanding the node.js event loop.

Yorumlar (0)