1.参考网上人家 dwr2.0 是怎么保存每个客户端的ScriptSession,可以保持客户端id,也可以通过设置ScriptSession的属性来达到目的。
2.参考下面的方面来实现过滤。
Browser.withPageFiltered(page,new JsSessionFilter() ,new Task());
JsSessionFilter类代码如下
package com.thinkdual.extend.dwr;
import java.util.List;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.ScriptSessionFilter;
import com.thinkdual.cfg.user.CfgUser;
import com.thinkdual.extend.listener.OnLineUser;
import com.thinkdual.util.StrUtil;
/**
* ---------------------------------------------<br>
* 过滤那些用户没必要收到消息<br>
* <br>
* Version: 1.0<br>
* Author: wuqingshun<wukele@gmail.com><br>
* DateTime: 2011-1-24 上午11:48:03<br>
* ---------------------------------------------<br>
* 修改版本历史<br>
* *********************************************<br>
* Author:<br>
* DateTime:<br>
* 内容:<br>
* *********************************************<br>
*/
public class JsSessionFilter implements ScriptSessionFilter {
private String roleids = "";
public JsSessionFilter(String roleids) {
this.roleids = roleids;
}
/**
* 如果返回ture,则该ScriptSession发送信息,返回false则该ScriptSession过滤掉。
*/
@Override
public boolean match(ScriptSession scriptSession) {
String userUnid = (String) scriptSession.getAttribute("userUnid");
userUnid = StrUtil.checkNull(userUnid);
List<CfgUser> users = OnLineUser.users;
if("".equals(userUnid)) return false;
if("".equals(roleids)) return true;
for(int i = 0; i < users.size();i++) {
CfgUser user = users.get(i);
if( user.getUnid().equals(userUnid)) {
return true;
}
}
return false;
}
}
Task类
package com.thinkdual.extend.dwr;
import java.util.Collection;
import java.util.Iterator;
import org.directwebremoting.Browser;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;
/**
* ---------------------------------------------<br>
* 说明<br>
* <br>
* Version: 1.0<br>
* Author: wuqingshun<wukele@gmail.com><br>
* DateTime: 2011-1-24 下午06:47:11<br>
* ---------------------------------------------<br>
* 修改版本历史<br>
* *********************************************<br>
* Author:<br>
* DateTime:<br>
* 内容:<br>
* *********************************************<br>
*/
public class Task implements Runnable {
private String msg = "";
public Task(String msg) {
this.msg = msg;
}
@Override
public void run() {
//获取所有根据我们写的过滤器返回true的ScriptSession
//网上很多都是调用ScriptSessions.addScript(scriptString)这个对所有客户端都发送信息
Collection sessions = Browser.getTargetSessions();
ScriptSession scriptSession;
for (Iterator i = sessions.iterator(); i.hasNext();) {
scriptSession = (ScriptSession) i.next();
ScriptBuffer scriptbuffer = new ScriptBuffer("openMsg('" + msg + "');");
scriptSession.addScript(scriptbuffer);
}
}
}
分享到:
相关推荐
在“DWR3实现服务器端向客户端精确推送消息”这一主题中,我们将深入探讨如何利用DWR3进行服务器到客户端的消息推送,以及这种技术的优势和应用。 首先,理解DWR3的工作原理是至关重要的。DWR3通过建立一个安全的...
DWR (Direct Web Remoting) 是一种开源的Java技术,它允许Web应用程序在客户端和服务器之间进行实时的、双向的数据交换,从而实现类似桌面应用的交互体验。在“dwr推技术反转聊天事例”中,我们将探讨DWR如何用于...
DWR的推技术则解决了这个问题,它允许服务器在数据更新时立即推送到客户端,从而实现更实时、更高效的用户体验。 DWR的工作原理是通过在服务器端创建一个Java对象,这个对象暴露了若干方法供客户端JavaScript调用。...
总的来说,DWR3的推送消息功能是实现Web应用实时性的有效手段,它通过持久化的HTTP连接实现了服务器到客户端的数据推送,简化了实时通信的开发过程。理解和掌握这一技术,对于构建高效的交互式Web应用具有重要意义。
5. **推送技术**:DWR的推技术利用了JavaScript的`poll`和`callback`机制,服务器端可以周期性检查新消息,并通过DWR自动调用客户端的回调函数,将新消息推送到客户端。 6. **实时显示**:在客户端,使用AJAX更新...
`Browser.withCurrentPageFiltered`就是用来实现半推的,它允许你指定只向当前页面或满足某些条件的页面发送数据。 在DWR 3中,实现全推和半推的关键在于配置和使用DWR的接口。首先,你需要在服务器端创建一个DWR...
本篇文章将详细讲解如何利用DWR 3实现推送功能。 1. **DWR 3 的基本概念** DWR 3 提供了一种安全、高效的机制,使得JavaScript可以调用Java方法,并将结果返回到页面上。这种机制是基于HTTP的异步请求,因此无需...
这个"**dwr demo 反向推送 导向推送**"是一个示例项目,展示了如何利用DWR来实现反向推送技术,也称为服务器推送。这种技术允许服务器主动地将数据推送到客户端,而不需要客户端不断地发起请求。 在传统的HTTP协议...
总的来说,DWR推送技术通过Comet实现了高效的服务器到客户端的数据推送,简化了实时Web应用的开发。结合提供的源码示例"j-jetty-dwr-comet-src",开发者可以深入理解DWR的工作原理,并学习如何在实际项目中应用这项...
这是,以上两个版本的升级版,在原有的基础上,增加了 清空聊天记录,上线通知,用户id,及登录的所在地(ip),聊天信息可选择颜色, ps: 测试的时候记得将 info.txt(聊天信息保存文件) 绝对路径覆盖源码中,以前的路径,
压缩包内的"chat(dwrAjax反转)"文件可能是DWR聊天室的示例,它展示了如何使用DWR的推技术实现一个简单的实时聊天应用。在这个示例中,用户可以通过JavaScript与服务器进行交互,发送消息,同时服务器也能在接收到新...
用户输入的消息通过DWR调用发送到服务器,同时,DWR Push机制会将新收到的消息实时推送到客户端,更新聊天窗口。 4. **后端实现**: 在Java后端,我们需要创建一个DWR配置文件(通常为`dwr.xml`),定义允许的远程...
通过DWR的Push技术,服务器可以主动向客户端推送消息,而不仅仅是响应客户端的请求。这种模式在群聊系统中特别有用,因为它可以让所有在线用户实时接收到新消息,无需频繁轮询服务器。 **3. 流技术** 在聊天系统中...
服务器推是一种技术,它允许服务器主动地将数据发送到客户端,而不需要客户端(通常是Web浏览器)发起新的请求。这对于实时性要求高的应用,如聊天室、股票报价或者在线游戏等,是非常关键的。传统的HTTP协议是基于...
用户可以选择与某个好友或群组进行对话,消息发送后,DWR会将消息发送到服务器,并推送给指定的接收方。 - **实时状态更新**:除了消息推送,DWR还可以用于在线状态的实时更新。当用户上线、下线或更改状态时,其他...
但在服务器推送技术中,服务器主动将数据推送到客户端,而无需客户端发起新的请求。这种技术对于实时性要求高的应用,如聊天室、股票交易、在线游戏等,具有显著优势。 **DWR的服务器推送实现**: DWR使用一种称为...
- 实现客户端监听和接收推送数据的逻辑,可能涉及事件处理和数据渲染。 - 在旧版IE上进行测试和优化,确保兼容性。 6. **最佳实践** - 为了提高效率,可以使用长轮询或WebSocket作为服务器推送的备选方案,但...
需要注意的是,虽然DWR3已经是一个较老的框架,但其核心思想——Web上的远程调用和实时推送,仍然是现代Web开发中的重要技术。在实际项目中,开发者可能会选择更新的技术,如WebSockets或者Server-Sent Events (SSE)...
在Web开发中,"服务器推"是一种技术,允许服务器主动地将数据发送到客户端,而无需客户端发起新的请求。DWR(Direct Web Remoting)是一个开源Java库,它简化了JavaScript和Java之间的交互,使得在Web应用中实现...
通过学习和研究这个源码,开发者可以了解到如何使用DWR库实现服务器向客户端的实时数据推送,掌握DWR的基本配置和API使用,同时也能理解如何设计和实现一个简单的聊天系统。这对于理解Ajax通信、提升Web开发技能,...