Ajani Bilby
Ajani Bilby

Reputation: 112

NodeJS Child Process can't send net.socket fd:3

When writing a nodejs multi-threading package there is the problem when the main thread can send content though fd:3 and threads can receive the message, but then threads cannot send anything back though fd:3

Is there something I am doing wrong? (line threader.js:45-59 is where the problem shows it's self)

Package (Only on github for now while I get the package working)

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);

Upvotes: 1

Views: 252

Answers (2)

manikawnth
manikawnth

Reputation: 3229

I just figured the problem:

thread.js is like a socket Server and threader.js is like a client.
Server has to respond with in the context of the connection.
Since you are using setTimeout which itself is a separate thread that doesn't have access to the connection context, threader is not able to listen to data.

thread.js - old 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 - new 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 - new code - best way

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');
});

Upvotes: 1

Ajani Bilby
Ajani Bilby

Reputation: 112

I just rewrote the entire package again starting for a different angle and now it works...

I think the problem was to do with the thread picking.

The fixes will be pushed to github soon.

Upvotes: 0

Related Questions