Comet
来源:互联网 发布:qq显示当前网络不可用 编辑:程序博客网 时间:2024/05/18 03:07
1、概念
Comet 是一种更高级的Ajax技术,经常被叫做服务器推送。Ajax 是 一种从页面向服务器请求数据的技术,而comit 则是一种服务器向页面推送的技能。
Comet 能够让信息几乎实时地推送到页面上,非常适合处理体育比赛的分数和股票报价。
2、浏览器实现
实现Comet 的方式有两种,轮询和流。
(1)轮询:分为长轮询和短轮询。
长轮询:页面发送一个请求,然后服务器一直保持打开,直到有数据可发送。发送完数据之后,浏览器关闭连接,随即又发送一个到服务器的请求。
这一过程在页面打开期间一直持续不断。
短轮询:浏览器定时向服务器发送请求,看有没有更新数据。
无论是短轮询还是长轮询,浏览器都要在接收数据之前,先发起对服务器的连接。两者最大的区别在于服务器如何发送数据。
短轮询是服务器立即发送响应,无论数据是否有效,而长轮询数等待发送响应。轮询的优势是所有浏览器都支持,因为使用
XHR 对象 和setTimeOut() 就能实现。
(2)流
流不同于上述轮询策略,因为它在页面的整个生命周期内只使用一个HTTP 连接。具体来说,就是浏览器向服务器发送一个请求,
而服务器保持连接打开,然后周期性地向浏览器发送数据。
3、例子
function createStreamingClient(url, process, finished){ var xhr = new XMLHttpRequest(), received = 0; xhr.open('get',url,true); /* 在浏览器中,随着不断从服务器接收数据,readyState 的值会周期性地变为3。 当readystate值为3时,responseText 属性就会保存接收到的所有数据。 */ xhr.onreadystatechange = function(){ var result; if(xhr.readyState == 3){ //只取得最新数据并调整计数器 result = xhr.responseText.substring(received); received += result.length; //调用process 函数 process(received); }else if(xhr.readyState == 4){ finished(xhr.responseText); } }; xhr.send(null); return xhr; } var client = createStreamingClient('streaming.php', function(data){ alert('Received : ' + data); },function(data){ alert('done!'); });
4、 SSE
SSE(Server-Sent Events,服务器发送事件)是围绕只读Comet 交互推出的API 或者模式。SSE API 用于创建到服务器的单向连接,
服务器通过这个连接可以发送任意数量的数据。服务器响应的MIME类型是 text/event-stream ,而且浏览器中的Javascript API 能解析
格式输出。SSE 支持短轮询,长轮询和HTTP流,而且能在断开连接时自动确定可是重新连接。
//传入的url 必须与创建对象的url 同源 var source = new EventSource('myevents.php'); source.onmessage = function(event){ var data = event.data; //处理数据 }; /* EventSource 对象会保存与服务器的活动连接。如果保持断开,就会重新连接。 这意味着SSE 适合长轮询和HTTP流。 强制断开,调用 close() 方法。 */ source.close(); /* 其他 API : open:在建立连接时触发 message: 在服务器接收到新事件时触发 error:在无法建立连接时触发 */
5、Web Sockets
Web Sockets的目标是在一个单独持久连接上提供全双工、双向通信。在JavaScript中创建了 web socket 之后,会有一个http请求发送到浏览器以发起连接。
在取得服务器响应后,建立的连接会使用HTTP 升级从HTTP协议交换为 Web Socket 协议。也就是说,使用标准的HTTP服务器无法实现 Web Sockets,
只有专门支持这种协议的浏览器才能工作。
由于Web Sockets 使用了自定义的协议,所以URL模式也略有不同。未加密的连接不在是 http://,而是 ws://;
加密的连接也不是 https://,而是 wss://。在使用Web Socket URL 时,必须带着这个模式,因为将来还有可能支持其他模式。
使用自定义协议而非 HTTP 协议的好处是,能够在客户端和服务器端之间发送少量的数据,而不必担心HTTP那样字节级的开销。由于传递的数据包很小,
因此 Web Sockets 非常适合移动应用。
详细博文参考:http://www.oseye.net/user/kevin/blog/78
- Comet
- comet
- comet
- Comet
- Comet
- Comet
- comet
- comet
- comet
- Comet
- Comet
- comet
- Comet
- Comet
- comet.exe
- Comet简介
- comet收集
- 理解Comet
- arm-linux内存页表创建
- Kafka 学习笔记(2) - Topic 和 Log
- Mutex 互斥量
- 怎样的刷新前把Ext的changerecords清空?
- ELF二进制目标文件详解
- Comet
- android ble蓝牙开发略解-Android 蓝牙4.0开发
- web中使用到的一些关于坐标相关知识
- C#中关于Gridview的一些属性(二、绑定数据)
- android中ListView或GridView出现在adapter中的getView出现多次position为0的情况
- 哥们别逗 了,写个脚本那真不叫运维自动化! 【转载】
- 自定义一个可以随着手指拖动的按钮
- JAVA权限修饰符(public/protected/private)
- Android内存优化:ArrayMap