0 0

DWR实现即时推送功能遇到的2个问题0

近日在使用DWR框架做一个网页即时推送消息的功能,遇到了两个问题
(1)推送后只有第一次是有用的,必须刷新一次页面之后才可继续用,然后继续刷新。。。(网上查了一些信息,说是用map管理scriptSession,避免新生成多余scriptiSession)
(2)我在推送信息时传了两个角色的ID,但是消息显示的时候不仅推送给那两个角色,我当前登录角色也会马上收到推送信息。
  以上两点请帮忙想一下如何解决
下面是我的部分代码:
首先是java代码:
public class PublishMessage {

    private UserService userService = AppCtxUtil.getBean(UserService.class);
    private PrescriptionConfirmService  prescriptionConfirmService = AppCtxUtil
            .getBean(PrescriptionConfirmService.class);
// 总部药师向门店推送
    public String publishMessageToStore(String message, String recordId) {

        String applicant = "";
        try {
            // 取到所有角色为药师的ID
            Conds conds = new Conds();
            conds.equal("S_ID", recordId);

            PrescriptionConfirm prescriptionConfirm = prescriptionConfirmService.fetchById(recordId);

            if (prescriptionConfirm != null) {
                applicant = prescriptionConfirm.getUserName() + ",";
                String userOrgan = userService.fetchById(applicant.substring(0, applicant.length() - 1)).getOrgan();
                Conds uConds = new Conds();
                uConds.equal("U.S_ORGAN", userOrgan);
                uConds.equal("r.s_rolename", "PHARM_STORE");
                List<User> userList = userService.fetchUserRoleByPage(uConds, null, 0, 0);
                if (userList != null) {
                    int userSum = userList.size();
                    if (userSum == 1) {
                        User user = userList.get(0);
                        applicant += user.getId() + ",";
                    }
                }
                applicant = applicant.substring(0, applicant.length() - 1);
            }
            // 推送网页脚本
            WebContext wctx = WebContextFactory.get();
            ScriptBuffer script = new ScriptBuffer();
            script.appendScript("receiveMessagesFromHQ(" + "\"" + message + "\"," + "\"" + applicant + "\"" + ");");
            ServerContext sctx = ServerContextFactory.get(wctx.getServletContext());
            String contextPath = wctx.getHttpServletRequest().getContextPath();
            Collection<ScriptSession> pages = sctx.getAllScriptSessions();
            for (ScriptSession session : pages) {
                session.addScript(script);
            }
        } catch (Exception e) {
            return "fail";
        }
        return applicant;
    }
}
其次是HTML代码(HTML代码有点多,就贴了部分哈):
$.ajax({
                                        url : "/passPrescription" + "?time=" + $.now(),
                                        type : "put",
                                        data : {
                                            id : id,
                                            remark : remark
                                        },
                                        success : function(obj) {
                                            if (null != obj) {
                                                if (obj.result == 'OK') {
                                                    alert("审核通过");
                                                    $(".main_div").load(
                                                            "/prescriptionConfirmList/1" + "/" + "id" + "?time="
                                                                    + $.now());
                                                  //发布消息
                                                    var message = "处方申请:"+id+"已通过审核,请及时复核!";
                                                    var recordId = id;
                                                    messageAjax.publishMessageToStore(message,recordId,{callback:function(data){
                                                    //alert(data);
                                                        if(data=='fail'){
                                                          alert("消息发布失败!");
                                                        }else{
                                                            if(data==''){
                                                                alert("通知信息发送失败!");
                                                            }else{
                                                                alert("已通知申请门店进行复核!");
                                                            }
                                                        }
                                                      }});
                                                } else {
                                                    alert(obj.body);
                                                }
                                            }
                                        }
                                    });

web.xml和dwr.xml是在网上照抄的,名字什么对应没问题,如果是这两个XML的问题我随后再附上内容
2013年12月19日 17:29

2个答案 按时间排序 按投票排序

0 0

可以参数 这个
http://petiro.iteye.com/admin/blogs/1562162
你现在用的是全推功能吧,里面有半推

2013年12月19日 22:01
0 0

何必自己写呢?有个叫pushlet的你可以用
例子程序网上有可以下

2013年12月19日 18:07

相关推荐

    dwr3实现推送功能

    本篇文章将详细讲解如何利用DWR 3实现推送功能。 1. **DWR 3 的基本概念** DWR 3 提供了一种安全、高效的机制,使得JavaScript可以调用Java方法,并将结果返回到页面上。这种机制是基于HTTP的异步请求,因此无需...

    dwr demo 反向推送 导向推送

    这个"**dwr demo 反向推送 导向推送**"是一个示例项目,展示了如何利用DWR来实现反向推送技术,也称为服务器推送。这种技术允许服务器主动地将数据推送到客户端,而不需要客户端不断地发起请求。 在传统的HTTP协议...

    使用dwr+spring实现消息推送

    总的来说,结合DWR和Spring,我们可以构建出一个高效、可扩展的消息推送系统,使得Web应用能够实时地与用户互动,提升用户体验。在实际项目中,还需要考虑安全性、错误处理、性能监控等方面,确保系统的稳定性和可靠...

    实现 Dwr 服务器推送

    DWR提供了一个`keepAlive`方法来实现这个功能。 四、优化与注意事项 - 考虑到性能和资源消耗,合理设置心跳间隔和推送数据的大小。 - 对于大量用户,可能需要考虑负载均衡和连接池管理。 - 由于浏览器兼容性和安全...

    dwr实现消息精确推送

    本篇文章将详细介绍如何利用DWR实现消息的精确推送功能。 #### 二、准备工作 在开始实现之前,我们需要做好以下几项准备工作: 1. **引入DWR库**:首先确保项目中已经包含了`dwr.jar`文件。 2. **配置web.xml**:...

    DWR3实现服务器端向客户端精确推送消息

    在“DWR3实现服务器端向客户端精确推送消息”这一主题中,我们将深入探讨如何利用DWR3进行服务器到客户端的消息推送,以及这种技术的优势和应用。 首先,理解DWR3的工作原理是至关重要的。DWR3通过建立一个安全的...

    DWR推送技术大全 dwr推送聊天实例

    DWR的主要功能之一是推送技术,这使得服务器可以主动向客户端发送数据,而不仅仅是响应客户端的请求。这种能力在创建实时更新的应用程序,如聊天应用,股票报价或者在线游戏时非常有用。 DWR推送技术的核心在于其...

    dwr消息推送功能

    ### dwr消息推送功能 Direct Web Remoting (DWR) 是一种开源框架,它简化了JavaScript与服务器端Java代码之间的交互。DWR 提供了一种简单的方法来将 Java 对象暴露给 JavaScript,允许 JavaScript 调用 Java 方法,...

    dwr+spring实现后台向前台推送实例

    本实例是在一些网络资料的基础上整合出来的一个:以后台向前台页面推送消息的一个完整实例工程,采用了spring、dwr反转,实现的是后台向前台不断推送消息,并管理相关用户退出;可以用在如定时任务的桌面消息提醒之...

    springMVC+dwr技术实现消息推送实例

    通过这个实例,你可以了解到如何利用SpringMVC处理业务逻辑,以及如何借助DWR实现从服务器到客户端的实时消息推送。理解这两个技术的结合,对于构建现代、交互性强的Web应用是非常有价值的。同时,这也是对传统HTTP...

    dwr推技术实现服务器推送数据

    DWR的推技术则解决了这个问题,它允许服务器在数据更新时立即推送到客户端,从而实现更实时、更高效的用户体验。 DWR的工作原理是通过在服务器端创建一个Java对象,这个对象暴露了若干方法供客户端JavaScript调用。...

    dwr3推送消息

    通过研究这些文件,你可以更深入地理解DWR3如何实现推送消息,并在自己的项目中应用这一技术。 总的来说,DWR3的推送消息功能是实现Web应用实时性的有效手段,它通过持久化的HTTP连接实现了服务器到客户端的数据推...

    Java Dwr实现消息精准推送以及js调用后台+demo

    总结起来,这个主题涵盖了使用DWR进行JavaScript与Java后台交互的基本步骤,以及利用DWR的Push功能实现消息精准推送。通过研究提供的Demo,你将能够理解和应用这些技术到自己的项目中,提高Web应用的交互性和实时性...

    springMvc + dwr 注解 实现消息推送

    本项目结合了Spring MVC和Direct Web Remoting (DWR)框架,利用注解的方式实现了一种高效的消息推送机制,支持对单个用户进行精确推送以及向指定成员或群组发送消息。无需额外的配置修改,极大地简化了开发流程。 ...

    DWR消息推送简单实例

    DWR(Direct Web Remoting...综上所述,这个"DWR消息推送简单实例"涵盖了DWR框架的基础使用、Maven工程的构建以及消息推送的实现。通过学习这个实例,开发者可以更好地理解如何在实际项目中利用DWR实现高效的双向通信。

    struts增删改+dwr消息推送

    DWR(Direct Web Remoting)则是一个允许JavaScript和Java在浏览器与服务器之间进行实时通信的库,常用于实现Ajax应用中的数据推送。 在"struts2增删改查+dwr消息推送"的项目中,开发者会首先集成Struts2框架,通过...

    dwr消息推送完整示例

    在这个“dwr消息推送完整示例”中,我们将深入探讨如何利用DWR实现实时的消息推送功能。 **一、DWR基础** 1. **安装与配置** 在开始之前,确保你的项目中已经包含了DWR的JAR文件。将它们添加到项目的类路径中,并...

    dwr实现前台监控 后台推送即时信息 入门必看资料

    在这个入门资料中,我们将深入探讨如何使用DWR来实现前台监控和后台即时信息推送。 首先,我们需要了解DWR的基本概念。DWR的核心是通过创建一个代理,这个代理可以调用服务器上的Java方法,并将结果返回到客户端。...

    dwr3消息推送

    要实现这个功能,我们首先需要理解DWR3的核心概念和工作原理。 1. **DWR配置**: - 在项目中添加DWR3的依赖库,这通常通过Maven或Gradle来完成。 - 配置DWR的`dwr.xml`文件,声明允许浏览器访问的Java类和方法。...

    dwr消息推送详细步骤

    在`dwr3实现消息精确推送详细步骤 - jsczxy2 - ITeye技术网站_files`这个文件夹中,可能包含了示例代码和教程的详细步骤。这些资源可以辅助理解每个阶段的具体操作。 10. **最佳实践** 实现消息推送时,要考虑...

Global site tag (gtag.js) - Google Analytics