1.Server Push:
a.将浏览器主动查询信息改为服务器主动发送信息;
b.保持HTTP连接,直到Server结束发送数据并发送一个结束信号,或者客户端中断连接;
c."multipart/mixed"格式的MIME,更够使个一包含许多数据项;
d.效率更高
2.Client Pull:
a.服务器发送一批数据,在HTTP响应或文档头标记中插入指令,让浏览器“在5秒内再次装入这些数据”或“10秒内前往某URL装入数据”。当指定的时间达到时,客户端就按照服务器的指示去做,或者刷新当前数据,或者调入新的数据。
b.不保持HTTP连接,客户端被告知合时建立新连接,以及建立连接是获取什么数据。
c.HTTP响应头标,能告知客户端在指定的延时时间后执行何种动作;
d.效率更低,要重建连接;
Comet:Ajax的新应用,服务器端主动推送数据功能
1.客户端发送一个请求,服务器接收它,并使用一个无限循环,将客户端需要的数据push到response中,并进行刷新,但是该response并不关闭,继续接收新的数据并刷新,直到客户端断开连接,该循环才结束退出;
2.Comet可以通过多种方式实现,比如iFrames,Flash,ActiveX,Applet等,可以基于 AJAX 的长轮询方式,也可以基于iframe 及 htmlfile 的流方式,也可以使用客户端插件来实现;
3.目前大概有三种实现方式:
a.基于长轮询(long polling);
b.基于iframe; http://www.iteye.com/topic/841554
c.基于流(stream)
1.ajax与server-push的共同点:
使用javascript实现数据无刷新展示
2.ajax与server-push的不同点:
a.ajax:无论服务器端数据有无变化,都会定期向服务器端取数据
b.server-push:在服务器端有新数据产生的时候才对客户端进行数据反馈,但会占用连接数。
3.服务器端如何发现有新数据:
在服务器端使用多线程来监控数据的更改
4.如何推送:.
net中有个异步回调,使用它便可以实现服务器端往客户端数据的推送
1>继承IHttpAsyncHandler接口 //定义 HTTP 异步处理程序对象必须实现的协定。
02 | public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) {} |
04 | public void EndProcessRequest(IAsyncResult result){} |
06 | public bool IsReusable{get { return false ; ; }} |
08 | public void ProcessRequest(HttpContext context){ throw new NotImplementedException();} |
12 | context.Response.Write( this .value); |
13 | if (m_Callback != null ) |