NodeJ节流数据

时间:2014-08-21 07:44:56

标签: node.js

我想知道,如何使用javascript来实现我的用例,

我的应用收到一个帖子请求,然后是incr memcache键,然后它使用第三方API直接向用户(移动应用)发布增值。

EG。首先要求值变为1,发布1。     第二个请求值变为2,发布2 ...

在30秒内小于2k的请求可以正常工作。 如果请求数量高达10k,则用户(移动应用)可能会收到来自发布者的消息过多(耗电量)

所以我必须对节流发布调用,而不是每个请求发布,我想每秒发布一次值。在1秒内,值可以是1,然后发布1.在2秒内,值可以是100,然后发布100.这样我保存了99个发布调用。

当请求不再发生时,我不希望工作人员每秒都在运行。

2 个答案:

答案 0 :(得分:1)

每次递增时,将新值缓存到全局变量并使用setInterval将其发布到客户端。这是一个简单的例子:

var key = 0;

// Update the cache to the present
// value on application start
memcache.get('key', updateKey);

// Handle increment request and
// save the new value
app.post('/post', function(req, res){
  memcache.incr('key', updateKey);
});

// Update the cached key
function updateKey(err, val){
  key = val;
}

// Publish to clients once
// a second
function publish(){
  clients.emit(key);
}

setInterval(publish, 1000);

启动和停止此例程更为复杂,可能取决于您如何处理请求/递增值。

答案 1 :(得分:0)

查看node-rate-limiter

您可以通过多种方式实施它来解决您的问题......