Facebook实时馈送功能?

时间:2012-02-03 23:38:49

标签: php javascript jquery mysql ajax

我正在尝试制作类似Facebook直播的内容,例如:当有人喜欢某些内容或对某些内容发表评论时,页面会更新而不会刷新!我想知道哪种方法可以做到这一点?问候

2 个答案:

答案 0 :(得分:11)

Web应用程序中的实时更新是一个难题,因为处理许多同时长期TCP连接的单个服务器是hard problem

这在Apache + PHP等传统Web服务器上基本上是不可能的,因为它为每个传入连接分配了整个操作系统thread。线程有很大的开销(比如stack space的~2 MB RAM,加上你的应用程序需要的堆内存),所以只有几百个客户端同时打开你的页面可以带来一个小服务器膝盖,甚至一个超大(和超级)的百GB内存服务器只能处理几千个并发连接。

实时通信是Node真正闪耀的地方。它的单线程事件驱动架构可以轻松支持商用笔记本电脑上的2,000并发连接,因为每个传入连接都是一个很小的(几千字节)堆分配。限制因素实际上变成了CPU和底层操作系统的TCP堆栈。

我的建议是看一下Node - 这正是设计的问题。你已经了解了JavaScript,所以它只是API的一个问题,掌握了Node的异步,事件驱动的本质。

您可能希望使用Express来满足您的HTTP服务器需求,并使用Socket.io进行实时通信。

Socket.io特别精彩,因为它的客户端库抽象了所有跨浏览器支持的苦差事:

  • A-grade browsers中,它通过WebSockets连接到您的服务器。这将使您获得一个无限期保持连接的TCP套接字,您可以随时推送任意数据。
  • 在下层浏览器中,它使用回退机制:
    • 基于Flash的传输,如WebSockets,但需要Flash播放器(如果可用)
    • AJAX long polling
    • 如果这些都不起作用,还会有一些esoteric后退

答案 1 :(得分:1)

你可以使用长轮询,是的。或者,您可以开始创新并开始使用HTML5的连接功能,并实现您网站的实时性。已经有几个开箱即用的解决方案,我最喜欢的是xRTML Realtime Framework

检查出来