Web开发中,Comet通常是指在Client和Server端维持一个长连接


当有新消息到达时,Server端可以实时把消息push到Client端


实际上,要实现“服务器推送”,不一定非要用基于http的comet来做


还可以基于socket来实现,比如:flash、applet、html5等


可以参考IBM的“Comet:基于 HTTP 长连接的“服务器推”技术


就Comet的实现来说,可以有两种方式:


1. Streaming流模式:这种方式,实际上才是真正的长连接,Client和Server端一直维持该连接


当Server端有数据时,立即把数据返回给Client,Client马上去解释处理该数据


然后该连接继续保持,等待后续的数据....


2. Long Polling长轮询模式:当Server端没有数据时,该连接一直保持着,当返回给Client端后,Server端就断掉该连接


同时,Client端再发起一个新的长连接,依次循环...


从具体的技术实现上,comet可以有以下方式:


1. Iframe,可适用于Streaming和Long Pooling这2种模式,返回的数据格式使用Chunked来进行传输,使用它最大的缺点是,浏览器上可能会有进度条或不停Loading,不过,总还是有解决办法 的,见这里


2. Ajax, 可以适用于任何浏览器的Long Pooling模式。对于Streaming模式,在Firefox和Safari下可以使用,参见这里


3. Jsonp, 只适用于Long Pooling模式,它的好处是可以跨域,但同样会有浏览器不断Loading的问题