2016-03-30 14 views
0

GPRSデバイスからの着信TCP接続をNodeJsで処理しています。NodeJs net.socketでsocket.pipe()を使用する必要があります

私の質問は、net.createServer(...)の範囲でsocket.pipe(socket)を使うべきですか?

gprs-> nodeとnode-> gprsのような二重通信を可能にするこの形式のpipe()を呼び出していますか?または、このメソッドを呼び出すことを避けることはできますか?あなたはあなたのコードを共有していないが、一般的に pipe()を話すことはTCPソケットとして二重通信 を達成するために必要ではありませんでした

+0

まず、1つのストリームをリダイレクトしたい場合

gprsSocket.on('data', function (data) { // echo the data back to the gprs gprsSocket.write(data); }) 

pipe()が使用されている(まったく同じではありませんが) とは基本的にこのような何かをやっています'.pipe()'は動作します。私は本当にあなたが2番目のものを持っているか分からないのですか?第2に: '.pipe()'は**常に**一方向に**です。基本的には、読み取り可能なストリームからコンテンツを読み取り、書き込み可能なストリームに書き込みます。 – freakish

+0

私はノードに多くの経験がありません。そこで、このコマンドライン[socket.pipe(socket)]とnet.createServer()の最後を置くサンプルをそこに追いました。しかし、私はこの呼び出しの影響を理解することはできません。実験で、私が[socket.pipe(socket)]を実行しなければ、私がgprsデバイスに書き戻そうとしているすべてのデータは、実際には出力には届かないと思うすべて。書き戻しは機能しません。つまり、[socket.write(...)]です。私はそれが何かの種類のエラーを投げると言っているわけではなく、データだけが失われ、Linuxのfsのヌルデバイスに書き込むようです。 –

答えて

0

は双方向な性質によるものです。

net.createServer(function (gprsSocket) { 
    gprsSocket.on('data', function (data) { 
     // incoming data 
     // every time the GPRS is writing data - this event is emited 
    }) 

    // outgoing data 
    // call this whenever you want to send data to 
    // the GPRS regardless to incoming data 
    gprsSocket.write('hello\n') 
}) 

あなたの質問に答える - いいえ、その必要はありません。 事実上のコールsocket.pipe(socket)は、受信したすべてのデータをGPRSに送り返します。あなたは2つのソケットを必要とする:あなたはすべての他の

// redirect all data to stdout 
gprsSocket.pipe(process.stdout) 
関連する問題