使用JSON获取新内容的最佳流程是什么?

时间:2011-11-25 01:04:26

标签: php json

使用json在网站上获取新内容的最佳方式是什么?我脑子里想到了以下系统:(循环播放)

  • 客户 - > (我有新内容) - >服务器
  • client< - (nope)< - server
  • 客户 - > (我有新内容) - >服务器
  • client< - (是,contentId x)< - server
  • 客户 - > (获取id x的内容) - >服务器
  • client< - (Jim Morrison)< - server

这是最好的方法吗?该应用程序将用于超过10000多个用户,Facebook如何做到这一点,并仍然保持每个人超级最快?

4 个答案:

答案 0 :(得分:2)

一种现代化的方法是使用像WebSockets或Socket.io这样的服务器推送系统,而不是偶尔请求“有新的”状态的客户端拉动系统。

使用这种类型的技术,客户端(我假设它是一个Web浏览器)始终与服务器之间存在开放连接,并且每当服务器上发生某些事情时,服务器都会将数据推送到客户端直接

有关代码和示例,请查看http://socket.io/

并非所有服务器端技术都与这种类型的方法兼容,但一个非常好的方法是Node.js,它允许您在Javascript中编写事件驱动的服务器端代码。见http://nodejs.org

如果您选择在服务器上使用Node.js并希望与浏览器进行交互,甚至还有Now.js(请参阅http://nowjs.com/),它允许您实际从服务器调用客户端上的函数!

答案 1 :(得分:0)

facebook使用点对点技术,这意味着它们拥有自己的信息云。任何服务器都可以要求任何服务器提供信息,或者从何处获取该信息。

答案 2 :(得分:0)

有很多方法可以做到这一点,最常见的是轮询(在您的示例中已经概述),客户端在其中发起请求,然后在收到响应后关闭连接。第二个“类”称为HTTP Keepalive,其中包含implementations的各种(且不断增长的)列表。

HTTP Keepalive的主要优点是,一旦建立初始连接,就没有TCP连接开销(或SSL)。

您要查看的另一件事是服务器clustering。这是一个很大的话题,但我建议您先看看这些资源,然后再开始使用。

Web服务器负载平衡:

http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html http://wiki.nginx.org/HttpUpstreamModule

扩展MySQL:

http://dev.mysql.com/doc/refman/5.5/en/replication.html

请注意,有很多方法可以扩展网站,我希望其他人可以发布替代方案进行评估。

答案 3 :(得分:0)

我会在浏览器端使用jQuery这个非常好的插件:http://benalman.com/projects/jquery-dotimeout-plugin/

doTimeout功能在纯JavaScript setTimeout上大大改进。

然后在PHP端有一个轮询函数,如果没有新内容可用则返回0。如果内容可用,请继续并返回。一个人会做两次旅行是没有意义的。

如果内容可用,只需在php端使用json_encode。在浏览器中展开您的内容并根据需要附加。

这是对如何执行此操作的一般概述,但查看jQuery.getJSON文档应该可以为您提供所需的所有详细信息:http://api.jquery.com/jQuery.getJSON/