是否有cubism.js + WebSocket的教程或示例?

时间:2013-08-05 23:23:40

标签: javascript d3.js websocket data-visualization cubism.js

是否有专门关于连接WebSockets(或其他非轮询数据源)和cubism.js的教程?

特别是,我希望能够从服务器创建数据流的实时图表,在视觉上类似于cubism page上的示例。

参考文献:   - https://github.com/square/cubism/issues/5   - http://xaranke.github.io/articles/cubism-intro/   - Using Other Data Sources for cubism.js

2 个答案:

答案 0 :(得分:2)

这是我正在玩弄的东西。它不具有权威性,但似乎有效:https://gist.github.com/cuadue/6427101

当数据从websocket进入时,将其放入缓冲区。抽取回调(我将在下面解释),发送缓冲区作为参数。检查返回代码是否“成功”或“等待更多数据”。成功意味着数据被发送到立体主义,我们可以删除此回调。

当立体主义请求一帧数据时,设置一个回调函数,检查缓冲区中的最后一个点是否在请求的最后一个立方体之后。否则,请等待更多数据。

如果有数据覆盖请求框架的停止,我们将完成此请求。如果没有API来请求历史记录,我们就必须将数据丢弃到过去。

然后,只需将缓冲区插入立体主体步长。

似乎立体主义多次从同一时间点请求数据,因此由您决定如何修剪缓冲区。我认为只是在请求的开始时间之前删除所有数据是不安全的。

答案 1 :(得分:2)

我做了一个快速而又脏的黑客:

  • Websocket填充realTimeData数组
  • Cubism从某些Web服务进行初始提取,然后从realTimeData数组中提取

    var firstTime = true;
    context.metric(function(start, stop, step, callback) {
      if (firstTime) {
        firstTime = false;
        d3.json("... {
          var historicalData = [];
          callback(null, historicalData);
        }
      } else {
        callback(null, realTimeData);
      }

请注意,cubism.js预计每次获取6个点(cubism_metricOverlap),因此请确保在realTimeData中保留6个点