推模式

《转》推模式的研究

博客分类:

 

 第一次参见公司的职称评定,评委问了一个问题,是我做权限管理那块的,说admin 管理员修改了一个用户的权限,让这个正在使用中的用户不能再 查看系统日志了 ,如何立刻反映到这个用户上。

 

    我说 可以使用一个线程根据用户ID去请求后台,吧最新的权限信息同步到前台,这也是一个笨办法,能解决问题,可以不巧妙,如果我当时对推模式有所研究 一定会回答好这个问题。

 

 

        推模式的 好处是由后台主动把信息退送到客户端 (比如浏览器),引起客户端 (比如HTML DOM结构变化)的变化,使用推模式就能很好的解决 我答辩时的问题,我那种扫描轮询的方式 会加大服务的压力

 

 

 首先了解下什么是 推模式,以及一个 推模式的开源实现 (DWR)

 

以下是来自网上:

 

ajax 推模式
http://www.iteye.com/topic/155609 
一个例子 聊天室
http://www.iteye.com/topic/199079 
DWR 长连接方式的若干问题 
http://www.blogjava.net/josson/archive/2008/03/31/189810.html

DWR推技术在开发中需要注意的ScriptSession问题 
http://www.blogjava.net/zhyiwww/archive/2009/02/24/236318.html

深入理解基于 HTTP 长连接的“服务器推”技术(Comet)
http://bbs.phpchina.com/viewthread.php?tid=100836

http://hi.baidu.com/renyangok/blog/item/f4bb66803fbdadd2bc3e1ea3.html

 

 dwr推

http://chenjumin.iteye.com/blog/690071

 

 

下面是 来自晚上的一个 聊天室的 推模式(使用DWR)的例子 我做了简单的修改

 

1. 聊天室用户信息 使用单例模式 放在一个Vector中 ,以前是网上的例子是放在list中的,这样做事为了解觉并发问题,应为 Vector 是同步的

 

2.小米同学做个一个简单的界面

 

3.对方法在session 中的用户 User 实现了 HttpSessionBindingListener 接口 用户推出 或者session 超时时候引起

 

聊天室人数变化 会直接推送到 前台页面

 

 

基本的原理是 使用http/1.1的长连接 监听某个页面,然后将服务器上的数据推送到 监听的页面,由于是服务器端主动推送数据的 所以高效 省时,节约资源

 

 

另外:

 

 web服务器 所能处理的链接数 是有限的,每个用户都开一个长链接 而不释放,当连接数达到峰值时候会 阻塞后面的链接,因此需要 连接池技术 或者 叫链接 复用 ,好在这个问题 已经有解决方案了,我自己还没实现,最近加班忙的很 等闲了 我在给以前的 chat 加上 连接池!

 

面向 Java 开发人员的 Ajax: 使用 Jetty 和 Direct Web Remoting 编写可扩展的 Comet 应用程序

http://www.ibm.com/developerworks/cn/java/j-jettydwr/

 

注:

 

1.附件中是聊天室 的 源码 导入 eclipse 可直接修改!

2.将聊天室发布在tomcat中,验证推模式

   a.首先建立  chat.xml 在 tomcat的  D:\apache-tomcat-6.0.18\conf\Catalina\localhost 下 ,内容如下(根据自己的tomcat安装目录做相应的修改) :

 

Xml代码   收藏代码
  1. <Context path="/chat" docBase="D:\workspace2\chat\WebRoot"  debug="0" reloadable="true"></Context>  
  2.                                                                                       

 

3.启动tomcat .访问 http://localhost:8080/chat 可以看到 聊天室的页面

  为了便于测试 我们需要开 两个 浏览器  分别 注册 聊天室 成员 然后 互相聊天 ,看看推模式是如何在两个页面上传送数据的

你可能感兴趣的:(模式)