2014-12-03 59 views
0

对于学校,我必须创建一个基于AJAX/PHP的聊天室,其中有人可以通过输入用户名并加入点击加入。 我已经掌握了所有的工作,但是我做了一些问题,不管我做这件事的方式是否是正确的做法。关于数据库性能和更多的问题

通过示例的一个问题是,我正在使用javascript的setInterval来每秒从数据库中取出最新的5条记录。但是如果有人在网站上更改了这段时间呢?并让它每秒钟都在查询数据库?我正在考虑存储上次执行的查询日期,并检查它是否实际上是我设置的1秒钟。但我在哪里存储这个?我不想将它存储在我的数据库中,因为我将不得不查询数据库。

另一个问题是,专业聊天框实际上是用x时间间隔来检查数据库中的新记录吗?如果不是,他们如何去做呢?

自动柜员机我是在一个点,我不完全知道我应该如何去做这件事,是否有一个经验丰富的PHP开发人员可以给这些答案?

+2

AJAX轮询很旧。在Socket.io中使用Node.js。即时的! – 2014-12-03 14:42:06

+0

谢谢@AliGajani我会看看!虽然这个项目必须使用AJAX制作。我仍然会看看它。 – Jordy 2014-12-03 14:46:20

+0

他们不能改变网站本身的时间间隔,这意味着他们正在访问你的服务器来摆弄你的代码。但他们可以轻松使用客户端JS调试器来摆弄浏览器中加载的代码。 – 2014-12-03 14:47:20

回答

1

每5秒钟请求服务器一次(有或没有数据库查询)是昂贵的并且不会扩展。而不是让客户端请求每个固定的时间间隔,让服务器在有新消息时通知客户端。为此,您需要更持久的连接。有两种常见的测量方法:

  • 的Ajax长轮询:通常情况下,Web服务器将关闭其连接一旦成功服务于内容。长时间投票背后的想法是保持长时间连接,并通过简单的方式提供内容。一旦有新消息,它就会提供给客户端。一旦连接超时,它重新打开一个新的连接。 WebSocket允许Web浏览器和服务器通过其WebSocket协议(类似于HTTP协议)进行持久连接。WebSocket允许Web浏览器和服务器通过其WebSocket协议(类似于HTTP协议)进行持久连接。有些浏览器还不支持此功能。