如何通过 AJAX 脚本检查已包含在 HTML 文档中的文件的更改?

Posted

技术标签:

【中文标题】如何通过 AJAX 脚本检查已包含在 HTML 文档中的文件的更改?【英文标题】:How do i check for a change in a file that has been included in an HTML doc through an AJAX script? 【发布时间】:2013-07-21 02:26:39 【问题描述】:

为了练习和学习 javascript 和 AJAX,我正在为浏览器内 IM 客户端编写 JavaScript。

我需要能够检查文本文件的文件大小是否发生变化,该文本文件用作 40-80 个包含消息的 SQL 条目的临时存储,以便它可以更新显示。

目前我正在使用setInterval 函数定期检查使用简短 php 脚本的文件大小变化,但这可能会导致问题,如果间隔过长,消息会延迟,如果间隔较短,这意味着很多php脚本运行速度非常快,占用服务器资源。

如果主要关注的是减少服务器资源的使用,那么最好的方法是什么? (我正在使用我拼凑的技术含量相当低的 PC 运行我的服务器(2gb 内存,2.8ghz AMD seperon 处理器))

最好,我想使用由发送消息的人触发的 AJAX 事件来执行此操作,即当用户 B 通过按 Enter 触发编辑文件的事件时,将触发用户 A 端的更新 html 文件的函数

有什么想法吗?我愿意为这个特定问题提供任何解决方案。为了更好地了解我正在尝试做的事情,我给出了我希望在特定语言中发生的事情的具体示例。

如果有一种不是 JavaScript/PHP 的方法可以做到这一点,我也愿意将其作为一种选择进行探索。

【问题讨论】:

你能展示你目前正在使用的代码吗? 【参考方案1】:

使用 PHP 执行此操作可能有点麻烦。您可以尝试执行long polling 之类的操作,在此您保持 HTTP 请求打开,直到服务器有新数据要发送给用户。如果经常发送消息,这可能并不理想。您可能需要考虑使用事件驱动的网络技术,例如 node.js 和 Socket.IO。

无论如何,如果您想近乎实时地获取消息,您可能希望与服务器保持连接。也有使用WebSockets with PHP 的方法,但PHP 并不是最好的,因为它的设计目的不是让脚本长时间运行(另请参阅What exactly entails setting up a PHP Websocket Server?)。

【讨论】:

嗯...我认为用 php 来做是行不通的。谢谢,我会研究 node.js 和 Socket.IO 您可以使用 PHP 提出解决方案,但使用这种类型的应用程序并不容易或不太可能推荐。【参考方案2】:

浏览器和 HTTP/AJAX 通常以“拉”模式工作。浏览器/或 AJAX 向服务器发送请求,然后服务器回复响应。

服务器通常没有太多规定可以联系浏览器,“推送”事件。然而,这可以通过长时间运行的请求来模拟,当事件/或事件发生时,服务器会将数据写入该请求。

例如,这可能是一个在 10-30 秒超时后回答“空”的请求。或者如果其队列中有事件,服务器会立即返回 & 回答。


使用 Java 服务器很容易做到这一点,几年前我在一个主要集成项目中成功地将它用于事件通知。

但是我不确定 PHP 有多少能力(可能非常接近于零)来维护整体服务器状态、在线程/请求之间协调或通信,或维护事件队列。

您可以研究类似在 Tomcat 上运行的 Java webapp。您只需要一个基本的 web.xml 和一个 Servlet 类,您就可以从那里构建任何东西。

【讨论】:

以上是关于如何通过 AJAX 脚本检查已包含在 HTML 文档中的文件的更改?的主要内容,如果未能解决你的问题,请参考以下文章

检查文本区域是不是包含符号并删除符号后的所有内容

如何在进行检查期间定位二进制文​​件?

关闭浏览器时如何在队列中执行非常繁重的任务(在后台运行)?

如何通过包含 & 和/或换行符的 ajax 传递 textarea 数据?

AJAX/jQuery 和 MySQL?

检查待处理的 AJAX 请求或 HTTP GET/POST 请求