Javascript 如何以增量方式显示JSON数据,而不在WEB中重复解析和显示
我有一个日志文件,它是由一个实时运行的脚本记录的,现在我将从WEB/HTML的日志中监视脚本的状态,因此我使用JavaScript更新WEB/HTML,还编写了一个CGI脚本来解析日志,并将事件状态输出到JSON以供JavaScript读取。JS脚本定期(例如每2秒)调用CGI来解析日志,并调用getJSON来读取事件状态,然后更新WEB 例如,在时间T(秒),记录的日志文件: 事件1开始 正在做事件1 事件1通行证 事件1结束 在时间T+2(秒)时,记录日志文件: 事件1开始 正在做事件1 事件1通行证 事件1结束 事件2开始 正在做事件2 事件2失败 事件2结束 时间T(秒)处的CGI可以输出: {“事件”:[[“事件1”,“传递”]} 在某个URI上,JS的getJSON将读取该URI 并且在时间T+2(秒)可输出: {“事件”:[[“事件1”,“通过”],[“事件2”,“失败”]}Javascript 如何以增量方式显示JSON数据,而不在WEB中重复解析和显示,javascript,json,perl,web,Javascript,Json,Perl,Web,我有一个日志文件,它是由一个实时运行的脚本记录的,现在我将从WEB/HTML的日志中监视脚本的状态,因此我使用JavaScript更新WEB/HTML,还编写了一个CGI脚本来解析日志,并将事件状态输出到JSON以供JavaScript读取。JS脚本定期(例如每2秒)调用CGI来解析日志,并调用getJSON来读取事件状态,然后更新WEB 例如,在时间T(秒),记录的日志文件: 事件1开始 正在做事件1 事件1通行证 事件1结束 在时间T+2(秒)时,记录日志文件: 事件1开始 正在做事件1 事
因此,在这里,我实现的CGI脚本将每2秒钟解析一次整个日志,当日志很大时,这可能会消耗大量系统资源,并对已经完成的事件重复执行操作
任何人都知道如何通过输出而不是整个日志增量解析日志,以及如何存储已完成事件的状态吗?如果您不想每次都解析整个日志文件,您应该尝试模仿以下行为:
- 打开日志并解析所有内容(第一次)
- 使用获取光标位置
- 获取数字并使用
mtime
- 将光标和inode保存在单独的文件中
- 如果它已更改,则该文件已被修改(如在logrotate之后)。你需要从头开始阅读
- 如果
已更改,请使用mtime
搜索到旧位置并继续解析setpos
- 否则,一切都没有改变
编辑:@mob的评论您在CGI中使用了什么?在哪个操作系统上?CGI解析日志并将事件状态输出到JSON。RHEL系统。我的意思是,您使用什么技术来编写CGI脚本?为什么不将最后一个事件id传递给CGI脚本,并只返回在该id之后生成的事件?@bfavaretto,谁将最后一个事件id传递给CGI?为什么附加到文件会更改inode?比较文件的大小更好。没错,当整个文件被修改时,inode会改变,通常是在logrotate之后。我将编辑我的答案。