如何加快jquery/php/ajax聊天室的速度
How to speed up a jquery/php/ajax chatroom?
我创建了一个小型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
它本质上是一个经过修改的服务器软件,它等待向用户返回响应,直到发送消息或消息即将超时。
- 滚动条在聊天室中不起作用
- 如何使用socket IO检查有多少参与者连接到我的聊天室
- 向聊天室发送消息 socket.io 节点.js
- 从特定行加载聊天室.html文档
- 如何为动态聊天室配置高速公路(crossbar.io)
- 聊天室的可靠计时器
- 即时消息,聊天室 - 用于 LAMP
- 如何设置离线环境来测试我的 Google App Engine 聊天室
- 如何在 Firechat 中创建聊天室
- 在创建jquery+PHP+MySQL聊天室时遇到问题
- 如何完成滚动聊天室的制作
- 如何加快jquery/php/ajax聊天室的速度
- 用于聊天室的AJAX, jQuery, javascript
- 节点聊天室,存储消息在数组或只是redis
- 我用插座做了一个简单的聊天室.如何防止XSS攻击?
- 使用Memcache构建PHP/Javascript聊天室
- 隐藏聊天室脚本,直到单击按钮
- 对一些Javascript聊天室代码进行逆向工程
- Angular聊天室Web应用程序
- 用图片代替文字聊天室