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



用json在网站上获取新内容的最佳方式是什么,我在脑海中得到了以下系统:(循环)

  • client -> (do i have new content) -> server
  • 客户端<-(不)<-服务器
  • client -> (do i have new content) -> server
  • 客户端<- (yes, contentId x) <-服务器
  • client ->(获取id为x的内容)-> server
  • 客户端<- (Jim Morrison) <-服务器

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

一种现代的方法是使用服务器推送系统,如WebSockets或Socket。IO而不是客户端拉式系统,比如偶尔请求"是否有新的东西"状态。

使用这种类型的技术,从客户端(我假设它是一个web浏览器)到服务器的连接始终是开放的,并且每当服务器上发生什么事情时,服务器直接将数据推送到客户端。

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

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

如果你选择在服务器端使用Node.js并想要与浏览器交互,甚至有Now.js(见http://nowjs.com/),它允许你从服务器端调用客户端函数!

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

有许多方法可以做到这一点,最常见的是轮询(您已经在示例中概述了),其中客户端发起请求,然后在收到响应后关闭连接。第二个"类"叫做HTTP Keepalive,它有各种各样(而且还在不断增长)的实现。

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

您要查看的另一件事是服务器集群。这是一个庞大的主题,但我建议您在开始之前看看这些资源。

Web Server Load Balancing:

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

扩展MySQL:

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

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

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

doTimeout功能大大改进了普通的JavaScript setTimeout。

然后在PHP端有一个轮询函数,如果没有新内容可用,则返回0。如果内容可用,则继续并返回它。一次旅行就行了,没必要两次旅行。

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

这是一个相当一般的概述如何做到这一点,但看看jQuery。getJSON文档应该给你所有你需要的细节:http://api.jquery.com/jQuery.getJSON/

最新更新