2010-05-04 96 views
2

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

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

是否有一些技巧可以使这项工作?我可以实现它作为一个Java小程序,但我更喜欢更轻量级/简单的东西,或者只使用HTML或可能使用HTML + JavaScript。此外,我想避免让Web浏览器“查询”服务器,因为这会引起太多延迟(如果重新载入延迟很大)或将负载放在系统上(如果延迟很小)

回答

0

好吧,既然你说你是愿意做它在javascript:

  • 让你的过程中不断写,而不关闭连接
  • 在客户端(浏览器)使用xmlhttpobject和监视就绪状态。

    0 =未初始化 1 =装载 2 =加载 3 =交互 4 =完全

明显3,4你以后找什么。当你得到输出时,你所要做的就是将responseText写入一个div,然后设置好。查看here的xmlhttpobject属性和用法。

1

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

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

0

因为现在这已经很老了。你可以使用网络套接字来做这件事