2012-05-30 10 views
5

GET paramlarını kodlayan ve bazı kodlanmış formattaki verileri döndüren bir web sunucusu için nodejs kullanıyorum. Kod çözme/kodlama, eşzamanlı gözüken nodejs kripto modülü kullanılarak yapılır. Tek bir talebe cevap vermek için harcanan süre yeterince hızlıyken, olay döngüsünü engellemek hizmeti eşzamanlı olarak zayıf bir şekilde gerçekleştirdi.nodejs içinde CPU bağlı görevlerini uygulama yolları

Gereksinim basit, kodlama/kod çözme işlevini etkinlik döngüsü dışında yapın.

  1. ayrı bir işlem (child_process veya küme)

Bu sadece, bu amaç için ayrı bir işlem olabilir ya da, ancak kodlamak yana/kod çözme alt süreçte bloke olacaktır, bu alt işlem durur yeni mesajlar almak için, yani iki dizenin çocuk süreç olarak kodlanması durumunda asla tek bir durum olmayacaktır.

    her istek için
  1. ayrı iplik (iş parçacığı-a-gogo'ait veya lif veya düğüm-WebWorker)

, kodlama/kod çözme işlemi gerçekleştirmek için her bir istek için ayrı bir iş parçacığı oluşturmak ama hiçbiri Modüller beklendiği gibi çalışır, yani thread-a-gogo npm ile kurulmaz, fiber run(), node-webworker not working'da ayrı bir iş parçacığı oluşturmadı.

Birisi benzer bir sorunla karşılaştı veya basit mesaj geçişi ile nodejs'de kolayca iş parçacığı oluşturmanın bir yolu var mı.

+0

: kümede ile

http://nodejs.org/api/cluster.html#cluster_cluster_fork_env

, bu gibi bir şey çalışacak engelleme/etkin beklemenizi pasif olay odaklı stiline dönüştürmek için – ControlAltDel

+0

CPU'nun görevleri bağlı olduğunu ve düğümün uygun olmadığını düşünüyorum. Öyleyse, örneğin Java'yı kullanmanız daha iyidir ve nod/java'nın birbirleriyle etkili bir şekilde iletişim kurmasına izin verin. – Alfred

+0

nodejs'de CPU ile ilişkili görevlerin korkunç olduğunu ve dolayısıyla ayrı ayrı kripto modülünün ayrı ayrı ele alınmasını beklediğini anlıyorum. Fakat Java/C üzerinde geçiş yapmaktan başka seçenek yok mu? – mdprasadeng

cevap

1

Bu, düğümün alt süreçleri için yerleşiktir. Burada Dokümanlar: Ayrıca küme kullanabilirsiniz

http://nodejs.org/api/child_process.html#child_process_child_send_message_sendhandle

: cevap # İhtiyacınız 1 içindedir

if (cluster.isMaster) { 
    var worker = cluster.fork(); 
    worker.send('encodeThisString'); 

} else if (cluster.isWorker) { 
    process.on('message', function(msg) { 
    var encrypted = crypto.doSomeEncryption(msg); 
    process.send(encrypted); 
    }); 
}