如何加快jquery/php/ajax聊天室的速度

How to speed up a jquery/php/ajax chatroom?

本文关键字:聊天室 速度 ajax php 何加快 jquery      更新时间:2023-09-26

我创建了一个小型jquery和php聊天室,其中包含一些.get和.post函数以及php文档,用于向sql server读取和写入数据。它工作得很好,但小问题是,当有人发布某个东西时,它大约需要半秒钟才能出现(因为滞后)。我担心我的编码有问题。im使用

setinterval (listen, 300)

作为我用于读取新数据库条目的连续jquery函数,listen是一个带有.get-internal的函数。stackoverflow或facebook是如何做到的,让用户输入内容并立即弹出?

在将输入的聊天消息发布到数据库之前,可以尝试立即将其显示给发布该消息的用户。

像这样:

  • 用户输入消息,提交
  • 更新用户聊天窗口,以便他们立即看到
  • POST消息到数据库
  • 从数据库获取并更新所有聊天窗口

这可以使用各种技术来实现,这些技术有很多名称:长轮询、服务器发送事件、Comet、WebSockets等。

基本思想是:

爱丽丝打开脸书。她的浏览器请求更新(例如$.get),但如果没有新的更新,服务器不会响应,并且请求仍处于"等待"状态。

鲍勃打开脸书。他决定评论爱丽丝的墙。他的浏览器将他的评论发布到服务器上($.post)

服务器接受此帖子,并正确处理(保存到Alice的墙上等)但服务器也会检查是否有来自Alice的等待更新请求。如果存在,服务器会将有关此更新的信息呈现到响应流中并关闭连接。Alice的浏览器终于收到了对这个长时间挂起的请求的响应,并愉快地在通知区画了一个红色的"1"。它还立即打开另一个更新请求(以免错过任何更新请求)。

爱丽丝看到了鲍勃的评论,立即发表了。

所描述的技术被称为"长轮询",它最早是由谷歌在Gmail中引入的。

您可以使用HTML5套接字,但这些套接字还处于起步阶段,尚未得到广泛支持(即IE)。

许多系统使用Flash作为中间人,因为它可以保持连接打开。

使用这两种方法中的任何一种,您都可以使用将注释存储到数据库中的PHP代码,将其推送给每个"侦听器"。这将是最快的方法。如果你的系统非常聪明,它会在可能的地方包含所有三个HTML5套接字,在不能的地方包含Flash,并且你的定期民意调查也没有Flash。

http://pusher.com/这可能是进一步学习的一个很好的起点。

大多数拥有快速聊天功能的网站都使用一种名为comet的技术。您可以在此处阅读更多信息:http://ajaxian.com/archives/comet-a-new-approach-to-ajax-applications

它本质上是一个经过修改的服务器软件,它等待向用户返回响应,直到发送消息或消息即将超时。