Node.js 为多个用户请求提供服务的轮询服务器
我需要将从外部API获取的数据提供给多个用户请求。我想知道在这种情况下应该采取什么策略 例如: 用户1发送数据A的请求=>服务器开始轮询带有数据A的响应 用户2发送数据A的请求=>服务器开始轮询带有数据A的响应 用户3发送数据B=>服务器开始轮询数据B响应的请求 然后,对于服务器端: 接收到来自用户1的数据A请求=>检查是否已轮询数据A: 如果是:开始轮询数据A 如果否:从外部API开始轮询数据A并开始轮询用户1 接收到来自用户2的数据A请求=>检查是否已轮询数据A: 如果是:开始轮询数据A 如果否:从外部API开始轮询数据A并开始轮询用户2 接收到来自用户3的数据B请求=>检查数据B是否已被轮询: 如果是:开始轮询数据B 如果否:从外部API开始轮询数据A并开始轮询用户3 当然,我想做的是,由于User1和User2请求相同的数据,服务器不会向API发出两次请求。我不知道怎么做 此外,当用户发出请求且至少有一个用户仍处于连接状态时,必须每10或30秒轮询一次对API的请求 关于技术,我将不得不和NodeJS一起做。然后我考虑通过socket.io而不是ajax调用来完成所有这些Node.js 为多个用户请求提供服务的轮询服务器,node.js,socket.io,queue,polling,Node.js,Socket.io,Queue,Polling,我需要将从外部API获取的数据提供给多个用户请求。我想知道在这种情况下应该采取什么策略 例如: 用户1发送数据A的请求=>服务器开始轮询带有数据A的响应 用户2发送数据A的请求=>服务器开始轮询带有数据A的响应 用户3发送数据B=>服务器开始轮询数据B响应的请求 然后,对于服务器端: 接收到来自用户1的数据A请求=>检查是否已轮询数据A: 如果是:开始轮询数据A 如果否:从外部API开始轮询数据A并开始轮询用户1 接收到来自用户2的数据A请求=>检查是否已轮询数据A: 如果是:开始轮询数据A 如
有人能给我解释一下一个可以在Node中实现这一功能的系统吗?听起来您希望服务器缓存一个,以便在其他用户请求时,服务器可以快速发送一个存储在内存中的 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);
}
});
谢谢,我做了一个小测试,它为其他用户提供缓存数据。但是我做的这些都没有日期/过期的东西。你能给我解释一下吗?这是否意味着我必须设置缓存过期时间?如果ie我每30秒轮询一次,那么我的缓存可能会每45秒过期一次?@BobbyShark我只是假设A会经常更改,并且在一定时间后,A将需要刷新,以便用户始终获得最新的数据,而不是旧的副本。将到期的日期将是到期日期。如果日期超过expireDate,这意味着应该从服务器中提取内容。您应该尽可能不频繁地轮询服务器,同时确保您获得的是最新版本的