字体: | 推荐给好友 上一篇 | 下一篇

Comet使用123-Ruby开发者

发布: 2007-8-10 10:15 | 作者: skyover | 来源: | 查看: 13次

Comet是最新的服务器push客户端技术,网友们一定听说过,即使没听说过,那Gmail Google talk

meebo也都体验过,这些就是使用的comet技术,使浏览器能在最短的延迟下获取新数据,并且不占很多带宽,comet就是long term

connection的意思,我写一个Comet最简单的教程:

1.最简单的长连接,实现长连接很简单,以jsp servlet为例,以下代码就能实现长连接

就是一个死循环,所以jsp结素不了,自然连接无法关闭

2.一个比较实用的comet

加入了打印时间,以及线程睡眠时间,降低cpu占用率,注意使用out.flush强制清cache,不然jsp会等程序结素后再写输出流,那样就看不到效果了,也什么都看不到,因为永远结素不了

3.客户端获取comet数据

是比较简单的一种,使用xmlhttp对象连接comet地址,在readystate为3时获取数据,并且此连接永远不结素,就是到状态4,但是这个

demo不可以在ie上面跑,因为ie对于iframe和xmlhttp的数据进行保护,在连接结束之前任何iframe内部的dom和xmlhttp的

responseText都是空,都是不可获得的,但是ie使用comet也不是没有办法,还是走以前serve

push老路子,iframe+script标记,script标记可以立即执行不等连接结素,代码:

while(true)

{

Date ttt= new java.util.Date();

out.println("");

out.flush();

Thread.sleep(2000);

}

是还是有个小问题,这代码如果执行,开始10秒大概还是没反映,好似ie需要等待frame进行cache一下,但是10秒后,连续5个alert之后就

每隔2秒alert了,解决办法,在jsp前面写一些无意义文本呀,空格呀,就正常了,不知道是不是发送什么特殊header也可以,请知道的回答一下

吧,实际使用中把alert换成top.回调函数,里面的秒换成新的数据对象就可以了,格式可以是数组,字符串,对象,JSON什么都可以.

后,comet是可以大大降低延迟,降低带宽占用,但是也是有问题的,比如以这个例子:

1.如果关闭浏览器,你还是可以看到servlet还是在运行,循环还是在继续,无法停止,我也不知道怎么停止,请高人解答

2.无法跨域,无论基本的xmlhttp还是iframe的top回调都是无法跨域的,虽然iframe比xmlhttp要好,至少可以发出请求,但是由

于安全限制,不可以继续访问top资源,跨域还是script方法最好,但是没听说过script远程调用支持comet的,我也没试过,如果支持,那请

说明一下

我来说两句

内容:

验证:

发表评论

最新评论

删除 Guest  post at 2008-1-21 19:30:23
5

查看全部评论……(共1条)

 

评分:0

我来说两句

seccode