`

PHP ServerPush 数据推送技术 即反向Ajax

 
阅读更多

随着人们对即时性应用需求的不断上升,服务推送技术在聊天、消息提醒尤其是社交网络服务技术开始兴起,成为实时应用的数据流核心。这篇文章试图探讨的便是各种适合于PHP的数据推送的实现方式以及其优劣。

1. 什么是Server Push

想象在聊天应用中,如果使用传统的ajax来承担消息的传入,那么一般是通过每隔一定时间拉取一次信息的方式实现,但是其实这种方式有大量查询是浪费的。聊天等Web应用更需要服务器在特定时间来主动告知前端有新的消息即Push,而不是前端每时每刻问服务器:“来消息了吗?”即Pull。这也正是为什么这个技术常被叫做反向ajax。

其他别名:Comet,反向Ajax

2. 如何实现Push

其实所谓的推送技术也没有多么复杂,目前从大类上有3种,一种仍然建立在ajax基础上,还有一种建立在框架基础上,最后一种抛弃了传统的HTTP协议,使用Flash或者HTML5的WebSockets技术。接下来将对这三种类别产生的不同的方式进行探讨。

1) Ajax 长轮询

Ajax长轮询从本质上来说仍然是一种pull,但是实时性较高,无用请求减少很多,是一种不错的Push实现方案。不过它只减少了网络上的无谓消耗。

核心: 客户端发起一个ajax请求,服务端将请求搁置(pending)或者说挂起,直到到了超时时间(timeout)或需要推送时返回;客户端则等待ajax返回后处理数据,再发起下一个ajax请求。即一个持续时间比常规请求要长很多的ajax请求。

优点: 兼容性较高,实现简单

缺点: 对于php这种语言来说,如果要做到实时,那么服务端就要承受大得多的压力,因为搁置到什么时候往往是不确定的,这就要php脚本每次搁置都进行一个while无限循环。

当然,如果服务器刷新每秒级,那尚可接受,只是实时性上退化了。

注意: 浏览器有连接数限制。我得出的结论是如果当前页面上有一个ajax请求处于等待返回状态,那么其他ajax请求都会被搁置(Chrome, Firefox已测)。如果页面有一般ajax需求怎么办?解决方法是开个iframe框架,框架中使在另一个域名下进行Comet长轮询,需要注意跨域问题。

PHP实现: Jquery+php实现comet

相关:Ajax跨域和js跨域解决方案

2) Frame 长连接

受到ajax启发,出现了框架下的长连接。

核心: Frame中发起一个普通请求,服务器将其搁置;需要推送时输出直接执行

脚本,然后继续保持连接。如果担心超时问题可以改成框架论询。

优点: 与1一样具有高兼容特性

缺点: 最大的问题是如果框架在载入,那么浏览器就好一直显示“载入中”,这就弱爆了(解决方法参见文末的相关阅读资源)。同样服务器也要能hold住大量循环……另外,是否有同域连接限制没测试。

3) Flash/HTML5 WebSockets

用flash来发起WebSockets,秒杀前面一切问题。

优点: 标准化, RealTime, Push

缺点: 服务器需要能应对WebSockets;还有如果既没有Flash又不支持HTML5的怎么办?

PHP实现: Start Using HTML5 WebSockets Today

6) 使用兼容封装层(socket.io)

以上每种方法都有优劣,那么终极解决方案便是合在一起!能WebSockets时候就WebSockets,不支持HTML5特性就退化到Flash,没有Flash则退化到Ajax长轮询。

优点: 高度封装,编写非常容易,几乎不需要关心如何去实现的。实时,超低负载,高并发。

缺点: 其实算不上缺点,socket.io的服务器端要求是node.js,而不是php。

个人看法: 如果你是独立主机,能运行程序,那么socket.io配合node.js是个非常高效的选择。为什么呢?因为它还可以避免php的服务端高负载。

 

http://socket.io/

http://nodejs.org/

分享到:
评论

相关推荐

    一个完整的用ajax反转 server push(服务器主动向页面推送数据)技术实现的web聊天室源码

    在Web开发中,服务器主动向客户端推送数据的技术被称为Server Push,它是实时Web应用程序的重要组成部分,尤其是在构建聊天室、实时通知系统或在线游戏等场景中。本项目是一个利用Ajax反向推送(Comet技术)实现的...

    .net实现Server Push(服务器推送)源码

    在.NET开发环境中,"Server Push"技术是一种允许服务器主动向客户端发送数据,而不仅仅是响应客户端请求的方法。这种技术常用于实时应用,如聊天系统、股票报价、在线游戏等,能够提高用户体验并降低延迟。以下是对...

    ServerPush(服务器推送)

    在Web开发中,服务器推送(Server Push)是一种技术,它允许服务器主动将数据发送到客户端,而无需等待客户端的请求。这种机制打破了传统的HTTP协议的请求-响应模型,提高了实时性和交互性。在ASP.NET框架下实现...

    反向ajax

    **反向Ajax(Reverse Ajax)**,又称为**Comet技术**,是Web开发中的一种创新方式,主要用于实现服务器向客户端的实时数据推送。在传统的Ajax应用中,主要是客户端通过JavaScript向服务器发送异步请求,获取数据并...

    服务器推送技术资料 server push

    该技术源于Ajax技术的广泛应用,它改变了Web应用仅能通过用户触发请求获取数据的方式,实现了服务器端数据的实时推送。 在传统的Web访问机制中,浏览器作为客户端(Browser)只能发起请求,服务器(Server)被动...

    反向ajax教程 (自己整理的两篇)

    反向Ajax,也称为Comet...总之,反向Ajax是Ajax技术的一种扩展,通过服务器主动推送数据增强了Web应用的实时性。通过轮询、Comet和PiggyBack等技术,开发者可以构建更加动态和响应式的Web应用,提供更优质的用户体验。

    Flex与java Server Push数据

    标题中的“Flex与Java Server Push数据”涉及到的技术是基于Adobe Flex客户端和Java服务器端的数据实时推送技术。在Web开发中,传统的HTTP协议是基于请求-响应模型的,但这种模式无法实现服务器主动向客户端推送数据...

    server push

    在基于DWR的Server Push实现中,服务器端会持续监测数据变化,并在有新数据时立即推送到客户端。这个过程通常包括以下步骤: 1. **设置DWR**: 首先,你需要在Java项目中集成DWR框架,通过在web.xml中配置DWR的...

    基于 AJAX和Webservice 的长轮询方式ServerPush技术模拟

    传统的 HTTP 协议是基于请求-响应模式的,即客户端发起请求,服务器响应数据,这并不适合实时数据推送。为了解决这个问题,开发人员引入了 ServerPush 技术,其中一种常见实现方式就是利用 AJAX 和 Webservice 的长...

    push(实现消息推送)

    但推送技术需要服务器能够主动向客户端发送数据,这就需要用到长连接或者WebSocket等技术。在这个项目中,"PushServer"可能就是实现了这种功能的服务器端代码,它负责接收推送消息并分发到各个客户端。 在Android...

    ASP.NET(C#) ServerPush

    ASP.NET (C#) ServerPush 是一种技术,用于在服务器端主动向客户端推送数据,而无需客户端持续发起请求。在传统的HTTP协议中,浏览器与服务器之间的通信基于请求-响应模型,即客户端发起请求,服务器返回响应。然而...

    ajax+"服务器推送"简单web聊天

    为了实现实时通信,一种常见的解决方案是“Ajax+服务器推送”技术,本文将围绕这个主题,特别是通过JSP实现一个简单的Web聊天应用,探讨其工作原理和技术细节。 【服务器推送】: 服务器推送是一种在服务器端主动向...

    serverpush聊天室

    - **性能**:ServerPush可能导致服务器资源消耗增加,因此需要优化推送策略,例如使用缓冲区管理消息队列,避免频繁的小数据推送。 7. **文件结构**: 压缩包中的"ChatRoom"很可能包含了聊天室项目的源代码,包括...

    java中的Servlet实现Server_Push技术的聊天室!

    在Servlet中实现Server Push技术,可以实现如实时消息推送、股票价格更新等功能,其中聊天室是一个典型的例子。 ### 实现原理 在传统的HTTP协议中,通信模式通常是请求-响应模式,即客户端发起请求,服务器返回...

    SQL SERVER 微信推送消息功能

    实现 SQL SERVER 数据库中的微信推送功能,可以将一些报警消息发送到微信讨论组或者微信订阅号、公众号、服务号,需要有认证的微信订阅号或者微信服务号

    服务器推送技术

    源码在服务器推送技术的实现中扮演着关键角色,因为它涉及到网络协议的解析、数据处理和事件驱动编程。开发者通常会使用如Node.js、Java、Python等支持异步I/O的编程语言来编写服务器端代码,以实现高效的推送逻辑。...

    web聊天 serverpush servlet实现

    本篇将主要讨论使用Servlet实现的Server Push技术,即服务器端主动向客户端推送数据。 【描述】: 这篇博客(原文链接:https://zw7534313.iteye.com/blog/703114)详细介绍了如何利用Servlet实现一个简单的Web...

    push-notification-server, 向iOS或者Android设备发送推送通知的服务器代码.zip

    push-notification-server, 向iOS或者Android设备发送推送通知的服务器代码 推送通知服务器这可以用于向iOS或者Android设备发送推送通知。 Android推送通知SERVER_KEY - 如果你没有 SERVER_KEY,请使用本教程中的...

Global site tag (gtag.js) - Google Analytics