如何将文件内容实时流式传输到浏览器

时间:2009-11-28 18:25:02

标签: php javascript file stream logging

我正在尝试找到一种有效的方式来观看网页上的服务器日志,我不介意构建应用程序,但我无法找到最好的方法。

有没有办法用PHP和浏览器保持流文件打开?还是必须每隔x秒轮询一次文件?

提前致谢,

沙迪

3 个答案:

答案 0 :(得分:1)

请记住,Web模型基本上是无状态的(断开连接)。在客户端提交请求时,请记住这一点,服务器处理请求,然后相应地发送响应。您可以使用Cookie和/或会话跟踪客户端操作,但在提交响应后会释放为请求保留的资源。 我认为实现目标的最佳方法是开发一个Web服务,检查日志的状态并获取差异(如果有的话)。您的应用程序可能包含一个带有div的网页,该div将显示来自Web服务的差异。 带有计时器的脚本将触发对Web服务的调用。 我将在几周内尝试做这样的事情,我将在moropo blog(西班牙语)上发布整个解决方案。您可以使用评论要求翻译。

答案 1 :(得分:1)

最好的解决方案绝对是AJAX。让服务器按照您描述的方式“推送”给您的唯一方法(维护开放流)将需要HTTP连接保持打开状态,这最终会触发超时并消耗大量资源。我会调查Cometd library。这方面的缺点是我相信它依赖于Java,尽管该网站确实提到了perl,python和“其他语言”。在最坏的情况下,您可以使用特定的jetty实现仅用于特定端口上的日志监视。无论如何,这个框架很可能是你最好的选择。

任何基于网络的聊天机制本质上都使用推送架构,并且很适合寻找一些灵感。在这种情况下,服务器创建事件(生成日志消息时),而不是用户创建向其他用户触发的消息。查看this article on Facebook chat,了解他们如何做到这一点。如果你能在架构上找到一些东西,谷歌聊天可能值得研究。

对于实际的日志记录,我不确定您是否需要帮助,但目前正在孵化的log4php可能是一个很好的起点,因为它为您提供了一个可以配置的配置同时登录任意数量的“记录器”,如数据库,文件,套接字等。您可能会找到一个允许您将其绑定到您选择使用的任何推送框架的文件。

祝你好运!

答案 2 :(得分:0)

最好的方法是使用AJAX每x秒提取一次文件内容,给人一种实时的幻觉。

如果你想要实时,你可以使用XMPP服务器,但从我所看到的,第一个解决方案已经足够了,不需要大量的工作。