2014-10-01 95 views
0

我创建了一个Web应用程序,我说我自己的API给它:因为{since},其中{since}是unix时间戳如何从我自己的webapp查询我自己的web api?

/api/v1.0/articles/new/{since} 

此API返回的新文章JSON。

我想添加自动更新到网站,并自动查询文章,而用户在网站上,但我不知道如何做到这一点。

我想用下面的JavaScript(jQuery的)来做到这一点:

setInterval(function() { 
    $.get('/api/v1.0/articles/new/{since}', function (data) { 
     /* parse data, add new articles to page */ 
     /* since = now */ 
    }); 
}, 30*1000) 

这将是正确的解决方案?我担心如果有500人访问我的网站,那么我会每30秒收到500个请求,这可能会导致我的服务器中断。

我可以尝试其他可能的解决方案吗?有什么新的方式让服务器将数据推送到Web应用程序,而不是我拉它并查询? (这是否叫做彗星ajax?)

+0

构建一个读取api的缓存。发送用户(全部500个)读取1个缓存文件。 – briansol 2014-10-01 19:53:00

回答

1

与500位用户做30秒轮询,你平均每秒钟处理约17个请求。是否会杀死你的服务器取决于你在每个请求上做了什么,你正在服务什么其他请求,你的服务器运行什么硬件等等。如果你对每个请求所做的只是对表的简单数据库查询 - 可以通过时间戳索引 - 每秒17个请求非常轻。但是,在我看来,你真的应该实现某种形式的服务器推送 - 你称之为“comet ajax”。首先,如果您的任何API调用需要超过30秒的时间,则在前一个API调用完成之前,您将执行另一个API调用,这可能会导致“雪球”效应。

服务器推送的具体方式取决于服务器堆栈上可用的内容,以及您希望客户端浏览器支持的内容。例如,如果您运行的是Node.js,则可以使用socket.io包使用网络套接字进行服务器推送。但是旧版浏览器不支持网络套接字,并且并非所有网络套接字的浏览器实现都是相同的,因此您可能需要考虑基于AJAX长轮询多部分文档流的方法。通常,您需要在服务器上安装一些代码或软件包以支持您使用的方法,不过有一些解决方案可以透明地确定哪种方法最适合每个客户端连接。 (例如,SignalR这样做,但这是针对Microsoft/.NET堆栈的。)

您可能需要阅读以下文章作为出发点,然后根据您的特定技术堆栈发布更多有针对性的问题,然后你对你需要支持哪些浏览器的假设。

http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery

+0

最优秀的答案。谢谢你,先生! – bodacydo 2014-10-01 22:40:00