论反向ajax
在讨论反向ajax之前,说一下我大二写的一个聊天程序,通过前端ajax不断向服务器发送请求(通过http连接),服务器进行一次数据库查询,然后返回结果,断开与服务器的链接(绝大部分都是无用的结果)来维持聊天界面的局部刷新,这种方法称为短链接轮询,对服务器造成的压力很大。
前天又用反向ajax写了一个即时聊天程序,通过长连接和ob缓存来实现服务器到浏览器的数据传输,而这个长连接并不是想socket那样的通道,它本质也是轮询。但是ajax就很懒,也很赖皮,每次来服务器家串门(检测是否有新消息),都会喋喋不休的向服务器要数据(通过一个while死循环),直到服务器给了数据(满足了ajax的请求),这个请求才会回到浏览器。然后又死皮赖脸地来找服务器要数据服务器一次次地给,xhr又一次次地要。
所以,ajax并不严格意义上的长链接,只是比短链接长一些,每次请求完成执行回调时,在前一次请求的基础上又立马进行一次请求,除非设置了超时;万一这个服务器很喜欢xhr,一要就给(当然这种情况是我们很喜欢的,借此只是说明一下这个长连接的本质),不就是个短链接嘛!
然后再说说我用反向ajax碰到的问题吧,我一个死不要脸的xhr请求(所谓的长连接,检测新消息)丢过去,等了半天也没反应,然后我又丢了一个可爱的xhr小宝宝丢给服务器,可服务器并不觉得这个小宝宝可爱,小宝宝送到服务器家门口服务器都不理。很明显之前的长连接阻塞了小宝宝,但小宝宝是我异步请求的,不应该是和长连接排在一个队呀!
解决办法:原来我消息的发送者定义为$_SESSION['user']['nc'],在操作session时,会先经过session文件的处理,然而这个长连接已经占了(此时session文件是会被php锁上的),第二个session无法处理,就一致阻塞在服务器家门口咯!而打开这扇们的钥匙,当然是关闭session,在与服务器进行长连接时
加上:session_write_close();问题成功解决。

另外PHP开发即时的程序最好用socket,搭配前端的websocket,真正实现了不断开的数据即时传输,目前windows系统php虽然提供了socket接口,但还没有真正的封装,需要自己编写socket类。如果计算机网络并不是太好,可以试着使用workman这个框架,它实现了socket的封装,并且有大量可扩展的
功能。
论反向ajax的更多相关文章
- php开发客服系统(持久连接+轮询+反向ajax 转载 http://www.tuicool.com/articles/2mU7v2R)
php开发客服系统( 下载源码 ) 用户端(可直接给客户发送消息) 客服端(点击用户名.即可给该用户回复消息) 讲两种实现方式: 一:iframe + 服务器推技术comet(反向ajax,即服务器向 ...
- 30分钟学会反向Ajax
场景1:当有新邮件的时候,网页自动弹出提示信息而无需用户手动的刷新收件箱. 场景2:当用户的手机扫描完成页面中的二维码以后,页面会自动跳转. 场景3:在类似聊天室的环境中有任何人发言,所有登录用户都可 ...
- 反向Ajax,实现服务器向客户端推送消息
反向Ajax的基本概念是客户端不必从服务器获取信息,服务器会把相关信息直接推送到客户端.这样做的目的是解决Ajax传统Web模型所带来的一个限制:实时信息很难从技术上解决.原因是,客户端必须联系服务器 ...
- Ajax、反向Ajax和WebSocket 概念
Ajax 异步的JavaScript和XML(Asynchronous JavaScript and XML,Ajax),一种可通过JavaScript来访问的浏览器功能特性,其允许脚本向幕后的网站发 ...
- HTTP 笔记与总结(9)分块传输、持久链接 与 反向 ajax(comet / server push / 服务器推技术)
反向 ajax 又叫 comet / server push / 服务器推技术 应用范围:网页聊天服务器,例如新浪微博在线聊天.google mail 网页聊天 原理:一般而言,HTTP 协议的特点是 ...
- [转]30分钟学会反向Ajax
原文链接:http://www.cnblogs.com/learnhow/p/5708364.html 场景1:当有新邮件的时候,网页自动弹出提示信息而无需用户手动的刷新收件箱. 场景2:当用户的手机 ...
- 反向Ajax,第2部分:WebSocket
转自:http://kb.cnblogs.com/page/112616/ 前言 时至今日,用户期待的是可通过web访问快速.动态的应用.这一文章系列展示了如何使用反向Ajax(Reverse Aja ...
- php开发客服系统(持久连接+轮询+反向ajax)
欢迎在php严程序 - php教程学习AJAX教程, 本节课讲解:php开发客服系统(持久连接+轮询+反向ajax) php开发客服系统(下载源码) 用户端(可直接给客户发送消息)客服端(点击用户名. ...
- 反向Ajax之Socket.io
1.什么是反向ajax? 传统的ajax的困惑? 新需求--当服务器端数据发生变化时,客户端(浏览器端)如何即时得到通知呢? 找一些实际的案例:客服系统.在线聊天 这类应用,有一个显著的特点: 数据并 ...
- 反向Ajax:WebSocket
郭晨 软件151 1531610114 WebSocket 在HTML5中出现的WebSocket是一种比Comet还要新的反向Ajax技术,WebSocket启用了双向的全双工通信信道,许多浏览器( ...
随机推荐
- wpf 转型 android开发总结
今年马上就要过去了,这一年中我经历了从wpf转型到qt/qml,然后最近又要开始搞android,从我个人的经验来看不论是qml还是android从框架和设计上都跟wpf类似,并且移动端的设计因为很多 ...
- Netty入门2之----手动搭建HttpServer
在上一章中我们认识了netty,他有三大优点:并发高,传输快,封装好.在这一章我们来用Netty搭建一个HttpServer,从实际开发中了解netty框架的一些特性和概念. netty.png 认识 ...
- MVC Dropdownlist数据绑定 默认值
@Html.DropDownList("Data", (SelectList)ViewBag.Data, new { @class = "form-control cho ...
- 学习Road map Part 04 自动驾驶、SLAM、ROS、树莓派
学习Road map Part 04 自动驾驶.SLAM.ROS.树莓派
- OC Copy and MutableCopy的使用
#import <Foundation/Foundation.h> @interface Student : NSObject <NSCopying> // copy代表set ...
- 理解Underscore中的uniq函数
uniq函数,是Underscore中的一个数组去重函数,给它传递一个数组,它将会返回该数组的去重副本. 1 ES6版本去重 在ES6版本中,引入了一个新的数据结构——set,这是一种类似数组的数据结 ...
- 魅族首页导航效果(不兼容IE)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- CRT公钥登录
1.实现原理: 通过CRT生成的密钥对,把公钥上传到Linux服务器指定用户下的.ssh目录中,在客户端上只需输入秘钥的密码即可登陆,而且验证一次以后可以免密码登陆 2.具体过程: 转自:http:/ ...
- web页面显示当前系统时间并定时刷新
function showCurrentDate(){ var today,hour,second,minute,year,month,date; var strDate ; today=new Da ...
- Cocos2d-x 3.1.1 学习日志3--C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u011292087/article/details/37598919 有关const成员.stati ...