2017-01-21 2 views
1

Beim Schreiben eines Nodejs Multithreading-Paket gibt es das Problem, wenn der Haupt-Thread Inhalt über fd senden kann: 3 und Threads können die Nachricht empfangen, aber dann Threads nicht alles zurücksenden fd: 3NodeJS Child Process kann nicht senden net.socket fd: 3

Gibt es etwas, was ich falsch mache? (Linie threader.js: 45-59 ist, wo das Problem zeigt es selbst)

Package (Nur auf Github für jetzt, während ich das Paket erhalten arbeiten)

Start up-Code:

var Thread = require("threader"); 

var task = Thread.task(function(){ 
    //Do some calculation 
}, function(){ 
    //When the calculation response has been sent 
}); 
task('a', 2); 
+0

Gibt es irgendein Beispiel, was beim Senden – user3151330

+0

angezeigt wird, wenn ein Thread gestartet, wenn abmeldet richtig „Loggin arbeiten“, dann fügt es eine neue net.Socket ({fd: 3}). Auf ("Daten") und wenn es irgendwelche Daten gibt, sollte es nur "RECEIVED CONENT THOUGH fd: 3 in thread" ausloggen, nachdem 10ms eines Threads, der es startet, "I piped a thing" durch die net.socket und dann in der Hauptfaden sollte es sagen "Receive fd: 3 in Hauptthreader", aber das passiert nie – Hobgoblin101

+0

Etwas Interessantes ist, dass dieser Code nur "SENT FROM THREAD 0" ausloggen wird, nichts anderes, es sitzt nur da läuft, kann fd: 3 automatisch geschlossen oder so? > https://github.com/Hobgoblin101/Threader/blob/master/test2.js – Hobgoblin101

Antwort

1

Ich dachte nur das Problem:

thread.js wie ein Socket-Server ist und threader.js ist wie ein Client.
Server muss im Zusammenhang mit der Verbindung antworten.
Da Sie setTimeout verwenden, das selbst ein separater Thread ist, der keinen Zugriff auf den Verbindungskontext hat, kann der Threader keine Daten abhören.

thread.js - alter Code

pipe.on('data', function(chunk){ 
    console.log('RECEIVED CONENT THOUGH fd:3 in thread'); 
    console.log(chunk.toString()); 
}); 

setTimeout(function() { 
    pipe.write('I piped a thing'); 
}, 2000); 

thread.js - neuer Code

pipe.on('data', function(chunk){ 
    console.log('RECEIVED CONENT THOUGH fd:3 in thread'); 
    console.log(chunk.toString()); 
}); 


pipe.write('I piped a thing'); 

OR thread.js - neue Code - bester Weg

pipe.on('data', function(chunk){ 
    console.log('RECEIVED CONENT THOUGH fd:3 in thread'); 
    console.log(chunk.toString()); 
    //Real 2 second work but not on a separate thread using setTimeout 
    pipe.write('I piped a thing'); 
}); 
+0

Ich dachte, dass Timeout, was nur eine verzögerte Ausführung von Code im selben Thread, nicht eine andere. – Hobgoblin101

0

Ich habe nur das gesamte Paket neu geschrieben, beginnend für einen anderen Winkel und jetzt funktioniert es ...

Ich denke, das Problem war mit der Thread-Kommissionierung zu tun.

Die Fixes werden bald auf github gepusht.

+0

Ich habe gerade die Antwort geschrieben. Aber egal, wenn Sie neu geschrieben werden, dann sollten Sie weitermachen mit dem – user3151330