如何从流中访问数据?

时间:2013-10-24 17:00:06

标签: javascript json node.js

我正在使用此库:mTwitter

我的问题是,当我想使用流媒体功能时:

twit.stream.raw(
  'GET',
  'https://stream.twitter.com/1.1/statuses/sample.json',
  {delimited: 'length'},
    process.stdout  
);

我不知道如何访问生成process.stdout的JSON。

2 个答案:

答案 0 :(得分:1)

您可以使用来自stream.Writable的可写流。

var stream = require('stream');
var fs = require('fs');

// This is where we will be "writing" the twitter stream to.
var writable = new stream.Writable();

// We listen for when the `pipe` method is called. I'm willing to bet that
// `twit.stream.raw` pipes to stream to a writable stream.
writable.on('pipe', function (src) {

  // We listen for when data is being read.
  src.on('data', function (data) {
    // Everything should be in the `data` parameter.
  });

  // Wrap things up when the reader is done.
  src.on('end', function () {
    // Do stuff when the stream ends.
  });

});

twit.stream.raw(
  'GET',
  'https://stream.twitter.com/1.1/statuses/sample.json',
  {delimited: 'length'},

  // Instead of `process.stdout`, you would pipe to `writable`.
  writable
);

答案 1 :(得分:0)

我不确定你是否真的明白streaming这个词的意思。在node.js中,stream基本上是文件描述符。该示例使用process.stdout,但tcp套接字也是流,打开文件也是流,管道也是流。

因此streaming函数旨在将接收到的数据直接传递给流,而无需手动将数据从源复制到目标。显然,这意味着您无法访问数据。想想在unix shell上像管道一样流式传输。这段代码基本上是这样做的:

twit_get | cat

实际上,在节点中,您可以在纯js中创建虚拟流。因此可以获取数据 - 您只需要实现流。查看流API的节点文档:http://nodejs.org/api/stream.html