1

Node.jsアプリケーションへの特定のソケットを介して、Javaプログラムにデータを送信させています。SQliteデータベースからの情報であるすべてのデータを取得して、別の場所に送信できるようにしたい。

次のようなものが機能することがわかりましたが、データが欠落しており、表示されないこともあるため、信頼性がないようです。

stream.addListener('data', function(data){
buffer.write(data.toString());
});

ちなみに、「終了」イベントを呼び出すことができないように、ソケットを開いたままにしておく必要があります。

私は本当に stream.addListener への添付ファイルを持っていないので、私が望むように動作する場合は他のものを使用できます。基本的に私が求めているのは、node.jsを使用してソケットからデータを取得する最も効果的な方法は何ですか?

PS お時間をいただきありがとうございます

4

1 に答える 1

0

イベントは、data一度にすべてのデータが送信されるとは限りません。複数のイベントにわたってバッファを作成し、何らかの区切り文字 (改行、ヌル文字など、何でも構いません) を監視する必要があります。IRC (CoffeeScript から変換) からデータを解析しているプロジェクトの例を次に示します。parseDataは、イベントのイベント ハンドラですdata(例: socket.on('data', this.parseData);):

IrcConnection.prototype.parseData = function(data) {
  var line, lines, i;

  data = data.replace("\r\n", "\n");
  this.buffer += data;
  lines = this.buffer.split("\n");
  this.buffer = "";

  /* Put the last line back in the buffer if it was incomplete */
  if (lines[lines.length - 1] !== '') {
    this.buffer = lines[lines.length - 1];
  }

  /* Remove the final \n or incomplete line from the array */
  lines = lines.splice(0, lines.length - 1);
  for (i = 0; i < lines.length; i++) {
    line = lines[i];
    this.emit('raw', line);
  }
};
于 2012-06-21T19:58:22.017 に答える