5

Bir node.js yöneticisi değilim, bu konuda daha fazla bakış açısına sahip olmak istiyorum.Küme ve düğüm webworker ile yüksek performanslı bir node.js uygulaması oluşturma

Sadece çok sayıda eşzamanlı bağlantıyı değil, aynı zamanda uzun süren işleri de işleyen bir HTTP node.js web sunucusu oluşturuyorum. Varsayılan olarak, node.js bir işlemde çalışır ve sonraki bir bağlantıyı yürütmek için uzun süren bir kod parçası varsa kod, önceki bağlantıda ne yaptığını bitirene kadar beklemelidir.

Örneğin

:

Yani
var http = require('http'); 
http.createServer(function (req, res) { 

    doSomething(); // This takes a long time to execute 

    // Return a response 
}).listen(1337, "127.0.0.1"); 

Ben node-webworker kitaplığı kullanarak ayrı konuda tüm uzun süren işleri çalıştırmak için düşünüyordum:

var http = require('http'); 
var sys = require('sys'); 
var Worker = require('webworker'); 
http.createServer(function (req, res) { 

    var w = new Worker('doSomething.js'); // This takes a long time to execute 

    // Return a response 
}).listen(1337, "127.0.0.1"); 

Ve her şey daha fazla ölçülebilir hale getirmek için, ben Her bir CPU çekirdeği için yeni bir düğüm işlemi oluşturmak için cluster'u da kullanmayı düşündüm. Ben cluster ile farklı süreçler yoluyla müşteri bağlantılarını dengelemek için bekliyoruz Bu şekilde

(Ben dört çekirdekli üzerinde çalıştırırsanız en 4 düğüm süreçlerini diyelim) ve sonra node-webworker ayrı iş parçacığı üzerinde uzun süren bir iş yürütmek.

Bu yapılandırmada bir sorun var mı?

cevap

0

Bu tür bir şey için daha esnek bir mimari sağlaması gerektiği için Q-Oper8'i kontrol etmek isteyebilirsiniz. Tam bilgi için:

https://github.com/robtweed/Q-Oper8

+1

Son güncelleme 2 yıl önce –

3

Bu yazı birkaç aylık olduğunu görüyoruz, ama biri geliyor olması halinde buna bir yorum sağlamak istedik.

"Varsayılan olarak, node.js bir işlemde çalışır ve sonraki herhangi bir bağlantıyı yürütmek için uzun süren bir kod parçası varsa, kodun önceki bağlantıda ne yaptığını sona erdirene kadar beklemesi gerekir."

^- Bu tam olarak doğru değil. Eğer doomom(); yanıtı geri göndermeden önce tamamlamanız gerekir, sonra evet, ancak eğer değilse, Node.js'nin merkezinde bulunan Eşzamansız işlevselliği kullanabilir ve hemen geri dönebilirsiniz. arka fon.

Ben senin sunucuda aşağıdaki kodu ekleyerek görülebilir açıklayan ettiğimi hızlı bir örnek: vurursanız sunucuyu

setTimeout(function(){ 
    console.log("Done with 5 second item"); 
}, 5000); 

birkaç kez, istemci üzerinde hemen yanıt alırsınız yan, ve sonunda yanıt gönderildikten sonra konsol mesajları saniye ile doldurun.

1

Neden sadece kopyalayıp bir dosya halinde kodu yapıştırın ve

$ jx mt-keep:4 mysourcefile.js 

gibi JXcore üzerinde çalıştırmak ve nasıl performans görmüyorum. Tek bir iş parçacığının güvenliğini bırakmadan gerçek bir çoklu iş parçacığına ihtiyacınız varsa JX'i deneyin. % 100 node.JS 0.12+ uyumludur. Konuları yumurtlayabilir ve bunların hepsinde ayrı bir node.js uygulamasını çalıştırabilirsiniz.