宝玉

专注于web开发技术
随笔 - 114, 评论 - 1517 , 引用 - 583

浅谈Web下的即时寻呼技术

Web下(不考虑使用activex控件的那种)即时寻呼一般都是基于“拉”技术,即每隔一段时间向服务器获取最新消息,然后反映到客户端,基于“拉”技术,一般有几种形式:

  1. frame/iframe刷新:一般是用一个隐藏的iframe/frame页面,定时刷新,从服务器获取最新消息,并执行脚本,将消息反映到客户端。
    这种方法的好处是兼容性好,适用于所有支持frame和脚本的浏览器,缺点就是因为是网页直接刷新,有可能在某些机子上每次刷新都会有“吧嗒”的声音,如果浏览器状态栏可见,上面的进度条会一闪一闪的,比较烦人。例如微软最新推出的Msn Web Messenger即是基于此技术。
  2. XmlHttp/XmlDom无刷新:这种无刷新技术一度让Web开发者亢奋不已。在客户端,XmlDom可以根据URL获取服务器端的Xml文件并返回为一个XmlDocument,而XmlHttp不仅可以获取xml和html,还可以向服务器端发送一个XmlDocument,而且,结合客户端脚本的定时器:setTimeout("Function()", TimeoutInterval),定时从服务器获取数据。
    尤其要注意一点是不管是XmlDom还是XmlHttp,都有“同步”和“异步”之说,如果是“同步”,则浏览器会等到把所获取的Xml全部下载完才继续执行,如果是“异步”,则浏览器会不管它有没有下载完,直接继续下一步执行。对于Web即时寻呼,还是推荐使用“异步”方式,因为“同步”方式很可能会造成浏览器“假死”的情况,对客户来说很不友好。使用“异步”就可以避免这个问题,然后可以在onreadystatechange事件中判断是否已经加载完,然后解析消息。
    这种方式的好处是对于客户来说感觉不到浏览器在刷新,缺点是必须要客户端是IE,并且安装了msxml,所以兼容性不是很好。
    BTW: 听说Asp.Net 2.0对于这种无刷新进行了封装,可惜没试过,不知道兼容性如何:)
  3. 脚本调用WebService无刷新:WebService是个好东西,js也可以调用webserice,微软专门有一个WebService.htc,将对WebService的调用进行了封装,可以非常方便的调用,其实即使没有WebService.htc,我们也可以自己来解析,因为WebService实质也就是xml了,在客户端可以结合XmlDom来解析。然后借助定时器,也可以做到无刷新来获取服务器端消息。
    这种方式的优缺点和第二种方式差不多。国外有个聊天室就是使用的这种技术。

对于我正在开发的WebMessenger,我是打算类似于Asp.Net Forums,可以灵活的换皮肤,并且根据浏览器,如果可以用XmlHttp,就用XmlHttp,如果不能使用XmlHttp,就使用frame刷新。

发表于 2004年9月4日 21:44

评论

# 浅谈Web下的即时寻呼技术

Ping Back来自:blog.csdn.net
2004-11-16 10:37 | morepower

# re: 浅谈Web下的即时寻呼技术

想请教下楼主,用浏览器来解决在线交流问题,本人想应该可以用类似于 MSN 这样的通讯软件来解决,象 HOTMAL 一样,当你登陆 HOTMAIL 后,点击“联系人”,在这个页面里将会把你 MSN 中的联系人及他的MSN状态都打在页面上,只要点击这个页面上相应的联系人的MSN图标就可以打开,MSN对话窗口与那个人交流了,这是怎么做到呢?
我想要实现功能的话应该是:1得到用户列表。2,得到状态列表。3,启动 MSN 对话
在这里我比较疑惑的是启动 MSN 对话。我看 HTML 标记是这样,其中的"xxx@hotmail"指某个用户
<tr name=xxx@hotmail.com' id="35c51766-a1b1-4ff2-b084-c00891847dbc">
<td align=center>
<input type=checkbox name="ADDR35c51766-a1b1-4ff2-b084-c00891847dbc" onClick="CCA(this)" id="messenger">
</td>
<td width=1%></td>
<td nowap>
<a href="#" onclick="javascript:DoAD('','Msngr&strUsrView=');return false;">xxx</a>
</td>
<td>
<a href="#" onclick="javascript:DC();return false;">xxx@hotmail.com</a>
</td>
<td></td>
</tr>

出现 MSN 图标的应该是这段 “<td width=1%></td>”但是可以看出这里什么都没有,不知道是怎么启动 MSN 对话筐的,还请指点。
2004-11-24 19:14 | chochoc

# re: 浅谈Web下的即时寻呼技术

msn messenger安装后,网页中可以直接以网页组件调用了。包括这些状态图片,也是在msn messenger的网页组件在作用:)
2004-11-24 20:20 | 宝玉

# re: 浅谈Web下的即时寻呼技术

明白了,谢谢!!
2004-11-25 18:50 | chochoc

# re: 浅谈Web下的即时寻呼技术

我想请教一下,“异步” 和 “同步” 的区别在什么地方?
既然“同步”会造成浏览器停止响应,那我们为什么还要有个“同步”呢?不如都采用“异步”好了。
2004-11-30 3:20 | 木头天使

# re: 浅谈Web下的即时寻呼技术

如果对于很小的xml文件,是不会出现这种问题的,只是对于很大的xml同步时会出现IE停止响应。同步有个好处就是必须这个xml加载完了再往下面继续执行
2004-11-30 3:25 | 宝玉

# re: 浅谈Web下的即时寻呼技术

多谢指点!
2004-11-30 4:57 | 木头天使

# re: 浅谈Web下的即时寻呼技术

我使用你说第三项技术写了个web聊天室,功能也算齐全,目前正在为内存泄漏发愁呢,多方查找,发现应是WebService.htc造成的,现在还未找到解决的方法呢。
2004-12-1 21:24 | 代玉

Post Comment

主题  
姓名  
主页
校验码  
内容   
京ICP备 05050892号