2017-01-21 6 views
1

nodejsマルチスレッドパッケージを作成すると、メインスレッドがfd:3を介してコンテンツを送信でき、スレッドがメッセージを受け取ることができますが、 fd:3NodeJS子プロセスはnet.socket fd:3を送信できません。3

私が間違っていることはありますか? (行がthreader.js:問題は、それが自己だ示し、ここで45-59である):

var Thread = require("threader"); 

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

ログアウトが正しく、それは新しいnet.Socket({FD:3})を追加し、「Logginが働いて」いる場合、スレッドを開始すると – user3151330

+0

を送信中に表示されますどのような任意の例であり(上。 'data')、それが何らかのデータを取得したときには、「受信したレコードをfd:3でスレッドで」ログアウトする必要があります。スレッドを開始してから10ms後にnet.socketを介して「I piped a thing」を送信し、メインスレッドは「メインスレッドでfd:3を受け取る」と言わなければならないが、それは起こりません – Hobgoblin101

+0

何か興味深いのは、このコードは "SENT FROM THREAD 0"だけログアウトするだけで、 3自動閉鎖か何か? > https://github.com/Hobgoblin101/Threader/blob/master/test2.js – Hobgoblin101

答えて

1

私はこの問題を考え出し:

thread.jsは、ソケットサーバーのようなもので、threader.jsは、クライアントのようなものです。
サーバーは接続のコンテキストで応答する必要があります。
あなた自身が接続コンテキストへのアクセス権を持たない別のスレッドであるsetTimeoutを使用しているので、スレッドはデータを聞くことができません。

thread.js - 古いコード

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 - 新しいコード

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 - 新しいコード - 最良の方法

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

私は、同じスレッドでいくつかのコードを実行するのが遅れているのではなく、別のものではないと思っていました。 – Hobgoblin101

0

起動コード(私が働いてパッケージを取得しながら、今のところだけgithubの上の)

Package私はちょうど別の角度のために始まってパッケージ全体をもう一度書き直しましたが、今は動作します...

問題はスレッドピッキングと関係があったと思います。

修正はすぐにgithubにプッシュされます。

+0

私はちょうど答えを掲載しました。しかし、もし書き直された方が偉大ならば、それを先に進めるべきです。 – user3151330

関連する問題