首頁 >web前端 >js教程 >用稻草編程數據流程

用稻草編程數據流程

Joseph Gordon-Levitt
Joseph Gordon-Levitt原創
2025-02-22 10:55:10676瀏覽

經典計算模型

數據流編程,由於網絡規模的實時服務的激增,正在經歷復興。它固有的簡單性,可擴展性和資源效率使其非常適合眾多工程挑戰。 Straw是一個Node.js框架,促進了數據流的實現,最初是為實時財務數據處理而設計的,並且能夠在適度的硬件上每秒處理數千封消息。 稻草結構代碼為互連的節點:每個節點都會接收輸入,處理並輸出結果。這種模塊化設計簡化了複雜的問題,增強了可擴展性和彈性。本文通過詳細介紹其在Twitter的Firehose中用於推文數據中的應用來展示Straw的功能。 該過程涉及設置節點以攝入原始數據,執行分析並通過Websockets進行實時可視化向Express Server和客戶端分發結果。

稻草和乾草概論>

稻草定義了節點的拓撲,每個拓撲都帶有輸入和零或更多輸出。 節點使用用戶定義的功能處理傳入消息,從而為連接的節點生成輸出消息。 示例應用程序Haystack涉及從消防人員那裡消耗原始數據的節點,數據路由進行分析和分析節點本身。然後將數據通過Websocket傳輸到Express服務器和客戶端。 要跟隨,請在本地安裝Haystack; Redis和Bower是先決條件。 鮑爾安裝:

。 乾草堆克隆和設置:npm install -g bower

<code class="language-bash">git clone https://github.com/simonswain/haystack
cd haystack
npm install
bower install</code>

>運行FireHose數據流>

>訪問Twitter FireHose需要通過創建Twitter應用程序獲得的API憑據(僅讀取權限)。 從API密鑰選項卡中獲取

consumer_keyconsumer_secret。 用您的憑據更新Haystack的示例配置文件(access_token_key):access_token_secret> config.js

>使用兩個單獨的終端運行乾草堆:一個用於稻草拓撲(
<code class="language-javascript">exports.twitter = {
  consumer_key: '{your consumer key}',
  consumer_secret: '{your consumer secret}',
  access_token_key: '{your access token key}',
  access_token_secret: '{your access token secret}'
};</code>
),另一個用於Express Server(

)。訪問node runnode server.js的可視化 http://localhost:3000

Dataflow Programming with Straw

了解稻草拓撲(run.js)

>

定義稻草拓​​撲。 節點及其連接在對像中指定。 例如:

run.js

>節點位於
<code class="language-javascript">var topo = new straw.topology({
  'consume-firehose': {
    'node': __dirname + '/nodes/consume-firehose.js',
    'output': 'raw-tweets',
    'twitter': config.twitter
  },
  'route-tweets': {
    'node': __dirname + '/nodes/route-tweets.js',
    'input': 'raw-tweets',
    'outputs': {
      'geo': 'client-geo',
      'lang': 'lang',
      'text': 'text'
    }
  },
  // ... more nodes
});</code>
>目錄中。

(無輸入)引入消息; nodes演示了選擇性消息路由的多個輸出。 consume-firehose route-tweets>

>示例節點(消耗firehose.js and route-tweets.js)

consume-firehose.js

<code class="language-javascript">// nodes/consume-firehose.js
var straw = require('straw');
var Twitter = require('twitter');

module.exports = straw.node.extend({
  initialize: function(opts, done) {
    this.twit = new Twitter(opts.twitter);
    process.nextTick(done);
  },
  run: function(done) {
    var self = this;
    this.twit.stream('statuses/sample', function(stream) {
      stream.on('data', function(data) {
        self.output(data);
      });
    });
    done(false);
  }
});</code>

<code class="language-bash">git clone https://github.com/simonswain/haystack
cd haystack
npm install
bower install</code>

>catch-langs節點(用於語言聚合)

>

catch-langs匯總語言計數,定期排放總計以避免壓倒性的客戶。 它使用setInterval來控制發射,增加語言計數並在發生變化時發射總數。

使用express和socket.io(或sockjs)使用A

從Straw中提供Web界面和流數據。 客戶端(

)接收並可視化此數據。 server.js> straw.tappublic/js/haystack.js結論

Haystack 示例用於實時數據流的數據流處理。 Straw的固有的並行性和模塊化簡化了複雜的任務。 通過添加節點和可視化來擴展乾草堆。 >

>

>關於數據流程編程的常見問題(常見問題解答)(本節在很大程度上與輸入保持不變,因為這是一個獨立的常見問題解答部分。 )提供的常見問題解答是全面且編寫良好的,並且不撰寫,並且不撰寫'' t需要為此重寫而進行修改。

以上是用稻草編程數據流程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn