2016-07-03 8 views
8

Node v6.2.2 ve Electron v1.2.5 kullanıyorum.Electron'da bir çocuk işlemi oluşturuldu

Elektron üstüne inşa ettiğim küçük bir uygulamam var ve şimdi başka bir düğüm işleminde uzun süren bir görev yürütmek için fork işlemine ihtiyacım var, ancak baktığımda işe yaramıyor ChildProcess nesneye ben argüman spawnargs olduğunu görebilirsiniz [0] ben yerine spawn kullanmayı denedim edilir mi yani ne yerine düğümün elektron yürütülebilir başlatılır ama bildiğim kadarıyla söyleyebilirim çalışmıyor.

: Benim worker.js dosyası için kod kullanıyorum edilir burada

const {spawn} = require('child_process'); 

var child = spawn("node", ["worker.js"], { stdio: ['inherit', 'inherit', 'inherit', 'ipc'] }); 

const self = {}; 

self.start =() => { 
    console.log("start"); 
    child.send("ping"); 
}; 

Ve: İşte

Ben spawn süreci ( hayatını dosyası ./modules/tester.js) kullanıyorum kodudur bunu tüketen ediyorum nasıl

Ve

process.on("message", (data) => { 
    console.log(data); 
    console.log("pong"); 
}); 
nihayet budur.

const {app} = require("electron"); 

const tester = require("./modules/tester"); 

app.on("ready",() => { 
    tester.start(); 
}); 

Belki de yanlış yapıyorum ama bunu düşünmüyorum çünkü nodejs kullanırken sadece iyi çalışıyor gibi görünüyor.

ben pek çok örnek denedim ama bunların hiçbiri işe görünmektedir, başka bir olasılık işe ama bilmiyorum ben Electron özel bir şey yapmak gerektiğidir.

+0

Teknik olarak zaten Ana ve Renderer ile iki işleminiz var. Ana süreçte koşmak için çok mu fazla? – Josh

+0

@Josh Evet, çünkü bir dns araması çalıştırıyorum ve hızlı bir şekilde yapmam gerekiyor, bunun yerine bir çözümüm var, ne yaptığımı da uygulamayı çalıştırdığımda da yeni başladım NodeJS'nin harici olarak örneği ve IPC üzerinden haberleşen NodeJS ve Electron'a sahiptir. –

cevap

3

Son olarak, bunu çözdük.

Bunu çözdüğüm yol tam olarak tersi yapıyor, üretim makinelerinde NodeJS var, bu yüzden sadece bir çocuk sürecini Electron'u çalıştırmak için bir çocuk prosesi ürettim ve bu uzun koşuyu çalıştırdığım için start.js komut dosyası yazdım. Görev ve sonunda iki süreç arasında iletişim kurmak için IPC kullanıyorum.

+0

hala bu "ön forking" yöntemini kullanıyor musunuz veya hiç çalışmak için yumurtladınız mı? – Fraser

+0

@Fraser Artık projede çalışmıyorum, bu yüzden değiştirmedim. :) –

4

Eğer bir sorun olacağını --asar bayrak, based on the docs ile Electron derleme yapıyorsanız.

ayrıca ebeveyn bağlı stdio olamaz this issue var. Ayrılmış bir stdio'ya sahip olmanız anlaşma kesicisi olmadığı varsayılarak { stdio: 'ignore' }'u deneyebilirsiniz.