日期:2014-05-17  浏览次数:20762 次

怎么样做实时网页
数据信息放在一个文件中,用php做实时网页,如果文件发生变动,就立马更新当前所在的网页,想知道用什么办法来实现比较好?之前的思路是js做轮询,每秒一次请求,如果一旦发现文件变化了,就重新加载,觉得这个不好

------解决方案--------------------
这个需求要做到真正的“实时”,主要有两个地方:

1 文件更新即时通知。
2 服务器能即时将数据发送到客户端(浏览器)。

首先,文件更新即时通知,这个你想的肯定是循环去扫描文件的最后更新时间,从这一步上你想的办法就无法做到实时。想做到实时,就要利用系统的时间驱动。比如linux 2.6内核的inotify。用c写个程序,跑个进程。当接收到这个通知后就去修改php的源代码。

服务器推,其实就是在客户端与服务器的一次http交互中,服务器循环的给客户端response数据。这个网上说的大多比较笼统,我总结一下,其实也没那么复杂。

1 需要修改web服务器的buffer。
2 关闭web服务器会主动控制buffer的模块,如gzip。
3 需要突破浏览器的buffer size,如让程序每次在response数据时填充一些空格另数据达到浏览器的buffer size。如ie是1024字节。

在apache上很好实现,在nginx上有时比较奇怪,据我一些朋友反映他们无法成功,但我在本机nginx+chrome成功了。


接下来你要考虑的就是,如何将这两点结合在一起。
------解决方案--------------------
如果页面和程序并不在同一台服务器,可采取推送的方式,就是说,在A服务器执行脚本程序生成最新页面,然后用shell脚本 将最新页面移动到B服务器