1

我正在构建的应用程序对 Facebook Graph API 进行了大量调用(但它可以是任何具有速率限制的 API)。为了论证的缘故,假设限制是每 10 分钟 600 个请求。

我正在使用https://github.com/jhurliman/node-rate-limiter来限制单个线程,但我需要做的是在宏应用程序级别限制所有 Facebook API 调用,以便应用程序作为整体不超过该限制。

我真的不知道如何做到这一点。我对节点相当陌生,甚至不知道解决方案会是什么样子。

最好知道 Facebook 的速率限制是针对每个应用程序还是每个经过身份验证的用户。我假设应用程序,因此这个问题。

4

1 回答 1

2

如果您需要根据所有请求的聚合来限制对特定资源的访问,我将创建一个单独的 http 服务来封装和控制对该资源的所有访问。

假设您使用的是 express 并且您的应用程序在端口 80 上运行,如下所示:

var express=require('express'),
    app=express();

app.get(route,function(req,res){
  ... do things here that need access to the FB Graph API
});

app.listen(80);

我将以下行添加到您的 app.js,创建一个在端口 8080 上运行的新服务器:

var fbApiGatewayApp=express();

fbApiGatewayApp.get('/fb',function(req,res){
  ... provide access to FB Graph API here
});

fbApiGatewayApp.listen(8080);

您为其创建的路由控制对 FB API 的访问。

重构您的原始应用程序,使其在需要向 FB API 提交请求时调用此新网关服务上的路由(通过 http.js)。

然后,您可以对这项新服务进行速率限制以满足 FB 的要求。

我还会让它拒绝所有不是来自您的主应用程序(在 localhost - 127.0.0.1 上运行)的请求,以限制来自外界的访问。(同样可以使用防火墙来完成。)

于 2013-07-05T20:08:15.263 回答