轮询服务器为多个用户请求提供服务

时间:2014-04-24 16:07:27

标签: node.js socket.io queue polling

我需要提供从外部API到多个用户请求的数据。我想知道在这种情况下使用的策略是什么。

例如:

  • 用户1发送数据请求" A" =>服务器使用数据" A"
  • 开始轮询响应
  • 用户2发送数据请求" A" =>服务器使用数据" A"
  • 开始轮询响应
  • 用户3发送数据请求" B" =>服务器使用数据" B"
  • 开始轮询响应

然后是服务器端:

  • 收到数据请求" A"来自用户1 =>检查数据是否" A"已被调查:
    • 如果是:开始轮询数据" A"
    • 如果否:开始轮询数据" A"从外部API开始轮询到用户1
  • 收到数据请求" A"来自用户2 =>检查数据是否" A"已被调查:
    • 如果是:开始轮询数据" A"
    • 如果否:开始轮询数据" A"从外部API开始轮询到用户2
  • 收到数据请求" B"来自用户3 =>检查数据是否" B"已被调查:
    • 如果是:开始轮询数据" B"
    • 如果否:开始轮询数据" A"从外部API开始轮询到用户3

当然,我想要做的是,由于User1和User2请求相同的数据,服务器将不会向API提出两倍的请求。我不知道该怎么做。

此外,必须轮询对API的请求,即当用户提出请求且至少有一个用户仍然连接时,每10秒或30秒。

关于技术,我将不得不使用NodeJS。然后我想通过socket.io而不是ajax调用来完成所有这些。

请有人向我解释一个可以在Node中执行此操作的系统吗?

1 个答案:

答案 0 :(得分:0)

听起来您希望服务器缓存A,以便在其他用户请求时,服务器可以快速发送存储在内存中的A

Node.js代码是这样的:

var cachedData;

socket.on('requestDataA',function(data){
    var date = new Date().getTime();
    //check and see if cachedData is expired

    if(data >=cachedData.expireDate){
        cachedData=null;
    }

    if(!cachedData){
        pollServerToGetA(function(A){
            cachedData=A;
            socket.emit('dataA',cachedData);
        });
    }else{
        socket.emit('dataA',cacheData);
    }
});