2012-01-22 11 views
5

私はデータの次のチャンクを送信する前にソケットをフラッシュしようとしている:Node.js:ソケットをフラッシュする方法は?

var net = require('net'); 

net.createServer(function(socket) { 
    socket.on('data', function(data) { 
     console.log(data.toString()); 
    }); 
}).listen(54358, '127.0.0.1'); 

var socket = net.createConnection(54358, '127.0.0.1'); 

socket.setNoDelay(true); 
socket.write('mentos'); 
socket.write('cola'); 

これは、しかし、例えば、setNoDelayオプションにもかかわらず、機能しません。 "mentos \ ncola"の代わりに "mentoscola"を表示します。これをどうやって解決するのですか?

答えて

5

WriteableStream api、関連する例を見ると、自分で区切りや区切り文字を設定する必要があるようです。

exports.puts = function (d) { 
    process.stdout.write(d + '\n'); 
}; 

あなたのソケットが流れているので、あなたがストリーミングする可能性があるので、データはあなたの直接制御せずに読み込む/書き込まれ、#writeはあなたのデータを変更したり、書き込みの間で分割する意味していると仮定しませんソケット上の大きな情報であり、他のデリミタを設定することができます。

私は間違いなくこの分野の専門家ではありませんが、それは私にとって論理的な答えのようです。

編集:これはNodejs streamingの複製である、との結論が、私は指定された答えと同じであった:、ストリームでの作業はライン・バイ・ラインされていない独自の区切り文字を設定します。

0

おそらく、同じティックで書かれたすべてのデータがバッチとして送信されます。

おそらく、受信側では、ノードはデータイベントを送信する前に別々のデータセグメントを結合します。

+7

多分、多分、... – nalply

関連する問題