2012-01-04 129 views
1

我已经创建了一些.get和.post函数以及读取和写入数据到sql server的php文档的小jquery和php聊天室。它工作正常,但小问题是当某人发布某些内容时,需要大约半秒的时间才会显示(因为延迟)。 我担心我的编码有问题。 即时通讯使用如何加快jQuery/php/ajax聊天室?

setinterval (listen, 300) 

用于读取新的数据库条目我连续jQuery函数,听与内不用彷徨功能。如何做stackoverflow或Facebook做到这一点,使用户键入内容并立即弹出?

+0

我认为其他人实施阿贾克斯推(彗星)见http://www.ape-project.org/ – ianace 2012-01-04 03:29:40

+0

Facebook不 – xbonez 2012-01-04 03:30:27

回答

2

也许尝试显示输入的聊天消息立即发布给用户,然后发布到数据库。

像这样:

  • 用户输入信息,提交
  • 更新用户的聊天窗口,使他们看到它立即
  • POST信息数据库从数据库
  • GET和更新所有聊天窗口
+0

可能工作! – Robert 2012-01-04 03:36:16

0

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

许多系统都使用Flash作为中间人,因为这可以使连接处于打开状态。

使用这两种方法中的任何一种,您都可以使用将代码评论存储到数据库的PHP代码将其推送给每个“监听者”。这将是最快的方式。如果你的系统超级聪明,它将包含所有三个 - HTML5套接字,它可以不在Flash中,而你的常规轮询也没有Flash。

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

1

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

基本思路是这样的:

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

Bob打开Facebook。他决定对爱丽丝的墙壁发表评论。他的浏览器将他的评论发布到服务器($ .post)。

服务器接受这个帖子,正确处理它(保存到Alice的墙上等) 但是ALSO服务器检查是否有来自Alice的等待更新请求。如果存在,服务器将有关此更新的信息呈现到响应流中并关闭连接。 爱丽丝的浏览器终于​​得到了对这个长期挂起请求的回应,并愉快地在通知区域绘制了一个红色的“1”。它也立即打开另一个更新请求(不要错过任何)。

Alice看到来自Bob的评论,该评论即时提供。

该技术被称为“长轮询”,它首次由谷歌在Gmail中推出。