代码之家  ›  专栏  ›  技术社区  ›  Jeremy Friesner

如何在web浏览器中实现日志窗口?

  •  2
  • Jeremy Friesner  · 技术社区  · 16 年前

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

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

    有什么诀窍能让这个成功吗?我可以把它作为Java小程序来实现,但是我更喜欢轻量级/简单的东西,或者只使用HTML或者可能的HTML+JavaScript。另外,我希望避免让web浏览器“轮询”服务器,因为这可能会带来太多的延迟(如果重新加载延迟较大),或者会给系统增加负载(如果延迟较小)。

    3 回复  |  直到 12 年前
        1
  •  0
  •   nc3b    16 年前

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

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

      0=未初始化 1=加载 2=加载 3=互动 4=完成

    显然3和4是你要照顾的。当您获得输出时,您只需将responseText写入div,就可以了。看 here 用于xmlhttpobject属性和用法。

        2
  •  1
  •   Matt Ball    16 年前

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

    诀窍在于 Comet ,这实际上是ajax+长轮询。

        3
  •  0
  •   Hani Q    12 年前

    因为这已经很旧了。你可以使用网络套接字