【问题标题】:How to implement a log window in a web browser?如何在 Web 浏览器中实现日志窗口?
【发布时间】:2011-02-15 16:31:26
【问题描述】:

我有兴趣在我的联网设备中添加一个基于 HTML/web 浏览器的“日志窗口”。具体来说,我的设备有一个定制的网络服务器和一个事件日志,我希望能够让一个网络浏览器窗口打开,例如http://my.devices.ip.address/system_log 并让事件在发生时在 Web 浏览器窗口中显示为文本。然后,人们可以使用它作为一种快速的方法来监控系统正在做什么,而无需运行任何特殊的软件。

我的问题是,实现这一点的最佳方法是什么?我已经尝试了显而易见的方法——只要让我设备的嵌入式 Web 服务器无限期地保持 HTTP/TCP 连接打开,并在事件发生时将必要的文本写入 TCP 套接字——但问题在于大多数 Web 浏览器(例如 Safari)在服务器关闭之前不显示网页 TCP 连接已关闭,因此结果是日志数据永远不会出现在 Web 浏览器中,它就像页面一直在等待加载。

有什么诀窍可以使这项工作发挥作用吗?我可以将它实现为 Java 小程序,但我更喜欢更轻量/更简单的东西,要么只使用 HTML,要么可能使用 HTML+JavaScript。另外我想避免让网络浏览器“轮询”服务器,因为这会引入过多的延迟(如果重新加载延迟很大)或给系统增加负载(如果延迟很小)

【问题讨论】:

    标签: javascript html http logging


    【解决方案1】:

    如果您不想使用轮询,您或多或少会完全在浏览器之外编写日志查看器。但是,编写轮询非常简单,它可以很好地减少延迟和系统负载(正如您提到的那样)。

    这个技巧是使用Comet,本质上是Ajax + 长轮询。

    【讨论】:

      【解决方案2】:

      好吧,既然你说你愿意用javascript来做:

      • 让您的进程持续写入,而不关闭连接
      • 在客户端(浏览器)中使用 xmlhttpobject 并监控就绪状态。

        0 = 未初始化 1 = 加载 2 = 已加载 3 = 交互式 4 = 完成

      显然 3 和 4 是您所关注的。当你得到输出时,你所要做的就是将 responseText 写入一个 div,然后你就设置好了。查看 here 了解 xmlhttpobject 属性和用法。

      【讨论】:

        【解决方案3】:

        因为这已经很老了。您可以为此使用网络套接字

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-22
          • 2019-02-25
          • 1970-01-01
          • 2010-11-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多