0

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

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

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

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

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

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

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

4

2 回答 2

0

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

无论如何,如果您想近乎实时地获取消息,您可能希望与服务器保持连接。也有一些方法可以将WebSockets 与 PHP一起使用,但 PHP 并不是最好的,因为它不是为了让脚本长时间运行而设计的(另请参阅设置 PHP Websocket 服务器到底需要什么?)。

于 2013-07-21T03:13:31.440 回答
0

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

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

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


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

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

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

于 2013-07-21T03:13:39.360 回答