javascript数据推送

这要介绍三种数据推送方式:

1. Comet:基于Http长连接的服务器推送技术

2.基于WebSocket推送方案

3.SSE(Server-Send Event):服务器推送数据新方式

 

Comet:基于Http长连接的服务器推送技术

这是一种最原始也是最好用的数据推送技术,服务器不释放不停的往客户端输送资源。

Comet:基于 HTTP 长连接的服务器推送技术,Comet 是一种 Web 应用架构。服务器端会主动以异步的方式向客户端程序推送数据,而不需要客户端显式的发出请求。Comet 架构非常适合事件驱动的 Web 应用,以及对交互性和实时性要求很强的应用。

首先建立php来看php如何不释放输送资源,创建一个data.php文件:

你会发现页面只会一次输出,不能连续输出。这个时候我们调整代码,添加一个sleep()函数让他睡一会儿:

 (注意此方法在apache环境中有效,其他环境可能会整体输出,并无缓冲输出效果)

这种效果就达到了,效果,但是我们只是在后端执行。

下面我们将介绍如何让前端和后端结合来实现这样的效果:

我们先写一个ajax来调用刚才的页面,创建index.html文件

你会发现,这个请求一直在继续。

httplonglianjie

无法立刻输出页面,这是因为php端一直执行并未执行完。jquery的ajax会一直等待后台执行完毕才会输出。那如何处理呢。

首先我们修改服务器端php代码:

前端代码更改为:

你会发现前端我们做了一个死循环,来不断调用后端方法。

当然你也可以这样来做服务器端代码php改写成这样也可(php为死循环时想让前端输出需要加入exit函数):

这样折腾一圈其实没啥用。

我们用ajax循环请求服务器端数据,也就说服务器是死的,js调用。网络请求特别昂贵。下面来了解更加高级的websocket技术

 

基于WebSocket推送方案

基于WebSocket 的推送方案,在浏览器中通过http仅能实现单向的通信,comet可以一定程度上模拟双向通信,但效率较低,并需要服务器有较好的支持; flash中的socket和xmlsocket可以实现真正的双向通信,通过 flex ajax bridge,可以在javascript中使用这两项功能. 可以预见,如果websocket一旦在浏览器中得到实现,将会替代上面两项技术,得到广泛的使用.面对这种状况,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并达到实时通讯。如聊天室等。

下面就来了解一下前端浏览器的websocket和node.js之间的交互,首先你不必须安装socket.io.

让我们来新建一个index.html文件,此文件放入node项目目录的views文件夹中:

下面在我们的main.js里我们做一些简单的调用:

下面我们来看看node的app.js

 

SSE(Server-Send Event):服务器推送数据新方式

服务器推送数据的新方式SSE,传统的网页都是浏览器向服务器”查询”数据,但是很多场合,最有效的方式是服务器向浏览器”发送”数据。比如,每当收到新的电子邮件,服务器就向浏览器发送一个”通知”,这要比浏览器按时向服务器查询(polling)更有效率。服务器发送事件(Server-Sent Events,简称SSE)就是为了解决这个问题,而提出的一种新API,部署在EventSource对象上。目前,除了IE,其他主流浏览器都支持。

例如,股票和实时推送数据很需要他。

首先建立php文件:

建立html文件

下面来看看主要方法

EventSource访问服务器获得服务器源, EventSource提供事件的说明

表 . EventSource 对象提供的标准事件
名称 说明 事件处理方法
open 当成功与服务器建立连接时产生 onopen
message 当收到服务器发送的事件时产生 onmessage
error 当出现错误时产生 onerror

 

One comment

  1. 前段时间研究了一下goeasy,代码简洁易读,服务稳定。后台推送只需要两行代码, js前端推送也只需要3,4行,而且文档齐全,还提供了后台查询信息收发情况,所以我觉得GoEasy推送服务是个不错的选择。官网: https://goeasy.io/

发表评论