在讨论反向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的更多相关文章

  1. php开发客服系统(持久连接+轮询+反向ajax 转载 http://www.tuicool.com/articles/2mU7v2R)

    php开发客服系统( 下载源码 ) 用户端(可直接给客户发送消息) 客服端(点击用户名.即可给该用户回复消息) 讲两种实现方式: 一:iframe + 服务器推技术comet(反向ajax,即服务器向 ...

  2. 30分钟学会反向Ajax

    场景1:当有新邮件的时候,网页自动弹出提示信息而无需用户手动的刷新收件箱. 场景2:当用户的手机扫描完成页面中的二维码以后,页面会自动跳转. 场景3:在类似聊天室的环境中有任何人发言,所有登录用户都可 ...

  3. 反向Ajax,实现服务器向客户端推送消息

    反向Ajax的基本概念是客户端不必从服务器获取信息,服务器会把相关信息直接推送到客户端.这样做的目的是解决Ajax传统Web模型所带来的一个限制:实时信息很难从技术上解决.原因是,客户端必须联系服务器 ...

  4. Ajax、反向Ajax和WebSocket 概念

    Ajax 异步的JavaScript和XML(Asynchronous JavaScript and XML,Ajax),一种可通过JavaScript来访问的浏览器功能特性,其允许脚本向幕后的网站发 ...

  5. HTTP 笔记与总结(9)分块传输、持久链接 与 反向 ajax(comet / server push / 服务器推技术)

    反向 ajax 又叫 comet / server push / 服务器推技术 应用范围:网页聊天服务器,例如新浪微博在线聊天.google mail 网页聊天 原理:一般而言,HTTP 协议的特点是 ...

  6. [转]30分钟学会反向Ajax

    原文链接:http://www.cnblogs.com/learnhow/p/5708364.html 场景1:当有新邮件的时候,网页自动弹出提示信息而无需用户手动的刷新收件箱. 场景2:当用户的手机 ...

  7. 反向Ajax,第2部分:WebSocket

    转自:http://kb.cnblogs.com/page/112616/ 前言 时至今日,用户期待的是可通过web访问快速.动态的应用.这一文章系列展示了如何使用反向Ajax(Reverse Aja ...

  8. php开发客服系统(持久连接+轮询+反向ajax)

    欢迎在php严程序 - php教程学习AJAX教程, 本节课讲解:php开发客服系统(持久连接+轮询+反向ajax) php开发客服系统(下载源码) 用户端(可直接给客户发送消息)客服端(点击用户名. ...

  9. 反向Ajax之Socket.io

    1.什么是反向ajax? 传统的ajax的困惑? 新需求--当服务器端数据发生变化时,客户端(浏览器端)如何即时得到通知呢? 找一些实际的案例:客服系统.在线聊天 这类应用,有一个显著的特点: 数据并 ...

  10. 反向Ajax:WebSocket

    郭晨 软件151 1531610114 WebSocket 在HTML5中出现的WebSocket是一种比Comet还要新的反向Ajax技术,WebSocket启用了双向的全双工通信信道,许多浏览器( ...

随机推荐

  1. LeetCode-Largest Rectangle in Histogram O(n) 详析-ZZ

    http://www.cnblogs.com/felixfang/p/3676193.html Largest Rectangle in Histogram Given n non-negative ...

  2. Redis 优化之 tcp-backlog

    默认值 511 tcp-backlog:511 此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxc ...

  3. W3School学习网站

    http://www.w3school.com.cn/tags/att_form_autocomplete.asp

  4. 设计模式:代理(Proxy)模式

    设计模式:代理(Proxy)模式 一.前言    代理模式或许我们都听说过,至少知道代理(Proxy)这个东西的,否则看这篇博客也没任何意义的.什么叫做代理,代理是代替服务器去接受请求者的请求的中间人 ...

  5. GitHub & Git 基础 (YouTube中文翻译版)

    GitHub & Git 基础系列视频 播放列表 由于视频资源在YouTube上,可能需要FQ:https://code.google.com/p/chromeplus/ 视频包括以下内容 1 ...

  6. Intellij IDEA 代码提示忽略大小写

    1.0 File >>Settings 2.0 Editor >> General >> Code Completion 如下图 选择 None

  7. 高老大 ‘SQL Server 优化器特性导致的内存授予相关BUG’ 学习笔记

    今天高老大出了好文章.在这里 自己本来对这一块比较混乱,正好借这个机会学习一下. 就用高老大的脚本.需要的直接去他那里找吧,这里就省了. 加查询优化标记前后对比 可以看到GrantedMemory是5 ...

  8. redis安装和简介(1)

    一.Redis 简介 Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: R ...

  9. CopyOnWriteArrayList介绍

    CopyOnWrite容器即写时复制的容器.通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后, ...

  10. python-使用递归实现二分法

    在上一篇中简单介绍了递归的使用,请戳这里 .  在此篇中,主要介绍如何用递归实现二分法. 在使用二分法之前,首先要有个前提,那就是这个数组必须是有序数组.主要的思路为: ①先取出数组中的一个中间值, ...