2016-03-24 16 views
1

Güncel sonrası isteği:Node.js'de posta isteği nasıl sıraya konulur?

app.post('/rImage', rawBody, function (req, res) { 
// ---- check here, if this process is running ? ---- 
    var data = req.rawBody; 
    var escapedData = data.replace(/([<>|&^])/g, "\^$1"); // Windows CMD escaping 
    exec('cscript /nologo C:/PS/Automation/render.vbs C:/PS/Automation/image.jsx"'+escapedData + '"', 
    function (error, stdout, stderr) { 
     console.log('stdout: ' + escapedData); 

     if(error !== null) { 
     console.log('exec error: ' + error); 
     } 
     res.send(stdout); 
     //request finished 
    }); 
}); 

Nasıl sonuncusu bittiğinde bir sonraki istek kaldırdığı anlamına yüzden bu bir kuyruk sistemi uygulamak olabilir?

Adnvance'de teşekkürler!

cevap

2

Bunun için kütüphaneler olabilir. Ancak, bu gibi kesmek olabilir: "kötü bir adamın kuyruğunda" için https://jsfiddle.net/fc15afw5/1/

+0

1:

var queue = []; var active = false; var check = function() { if (!active && queue.length > 0) { var f = queue.shift(); f(); } } app.post("..", body, function(req, res) { queue.push(function() { active = true; exec("yourprogram arg1 arg2..", function() { // this is the async callback active = false; check(); }); }); check(); }); 

İşte işlevselliğini gösteren bir keman var. Kütüphaneler için, [async] 'ı (https://github.com/caolan/async#queue) deneyin. [RabbitMQ] (https://www.rabbitmq.com/) –

+0

gibi biraz daha altyapıya dayalı bir şey de yapabilirsiniz. Async kitaplığı çok ilginç görünüyor, bunu daha önce bilmiyordum. Fakat eğer doğrudan bir uygulamaya geçeceksek, yukarıdaki kodda ne geliştirirsin? - Biraz daha zengin bir erkeğin kuyruğunu yapmak için ;-) –

+0

Ne yaptığımıza, neden sıraya koyduğumuza, eğer onu büyütmeye ihtiyacımız varsa, vb. bağlıdır. biraz VBScript yürütüyor muyuz? Bu durumda, bir şeyi değiştireceğimi sanmıyorum çünkü sadece betiğin yalnızca bir seferde yürüdüğünden emin olmak istiyoruz (eşzamanlı olarak çalıştırılırsa VBScript'in kırılacağını varsayalım). Eşzamanlı çalışma sayısı söz konusu olduğunda esneklik istiyorsak, async.queue'ye ulaşabilirim. Eğer bir çeşit yavaş işlemse, başka bir sunucuya boşaltabiliriz, RabbitMQ kullanabilirim. –

İlgili konular