dwr 推送消息

2024-05-05 02:38
文章标签 dwr 推送 消息

本文主要是介绍dwr 推送消息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

dwr + spring  实时推送消息,通过网络技术学习,做了个小功能,总结如下:


1、下载dwr.jar

官网地址:http://directwebremoting.org/dwr/downloads/

下载最新版本v3.0


2、导入jar

   

3、配置web.xml

<!-- DWR配置 START -->
<servlet><description>This is the description of my J2EE component</description><display-name>This is the display name of my J2EE component</display-name><servlet-name>DWRServlet</servlet-name><servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class><!--commet 方式--><init-param><param-name>activeReverseAjaxEnabled</param-name><param-value>true</param-value></init-param><!--测试环境下,需要开启debug模式,线上环境需要关闭-->  <init-param><param-name>debug</param-name><param-value>false</param-value></init-param><!--允许跨域--><init-param><param-name>crossDomainSessionSecurity</param-name><param-value>false</param-value></init-param><!--允许脚本标签远程--> <init-param><param-name>allowScriptTagRemoting</param-name><param-value>true</param-value></init-param>
</servlet><servlet-mapping><servlet-name>DWRServlet</servlet-name><url-pattern>/dwr/*</url-pattern>
</servlet-mapping> <!-- DWR配置 END -->

4、由Spring管理dwr

配置applicationContext-common.xml 

<!--由spring管理dwr   -->
<bean id="deviceInfo" class="com.dc.rcms.DWRDeviceInfoStatus"></bean>


5、页面引用以下js

<!--dwr消息推送 -->
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>

并且页面 初始化,加

$(function(){    dwr.engine.setActiveReverseAjax(true);  dwr.engine.setNotifyServerOnPageUnload(true);
});

6、后台直接要推送的内容

public DWRDeviceInfoStatus(){//定时向前台推送设备信息Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {<span style="white-space:pre">	</span>try{ServerContext serverContext = ServerContextFactory.get();Container container = serverContext.getContainer();ScriptSessionManager manager = container.getBean(ScriptSessionManager.class);Collection sessions = manager.getAllScriptSessions();if(sessions.size() == 0 ){return;}//得到设备部位信息状态数量Util util = new Util(sessions);List<SEntity> list=baseDao.search("select count(id) as allnum,sum(case when status=1 then 1 end) as gznum,sum(case when status=0 then 1 end) as zcnum from rcms_device ",null);if(list!=null && list.size()>0){SEntity entity=list.get(0);String jsonStr="{\"allnum\":"+repaceNull(entity.getValueAsString("allnum"))+",\"gznum\":"+repaceNull(entity.getValueAsString("gznum"))+",\"zcnum\":"+repaceNull(entity.getValueAsString("zcnum"))+"}";util.addFunctionCall("showDeviceInfo", jsonStr);}//得到所有故障点信息Util utilgzd = new Util(sessions);List<SEntity> gzlist=baseDao.search("select device_code,count(id) n from rcms_device where status =1 group by device_code order by device_code", null);if(gzlist!=null && gzlist.size()>0){String gzdjsonStr="[";for(int i=0;i<gzlist.size();i++){SEntity gzdentity=gzlist.get(i);gzdjsonStr += "{";gzdjsonStr +="\"device_code\":\""+repaceNull(gzdentity.getValueAsString("DEVICE_CODE"))+"\",";gzdjsonStr +="\"gzdnum\":\""+repaceNull(gzdentity.getValueAsString("n"))+"\"";gzdjsonStr +="},";}gzdjsonStr = gzdjsonStr.substring(0,gzdjsonStr.length()-1);gzdjsonStr = gzdjsonStr+"]" ;utilgzd.addFunctionCall("showDeviceGzdInfo", gzdjsonStr);}}catch(Exception e){}}}, 10*1000, 1000*3);}	


7、页面接收后台推送的消息

脚本处理

/* 后台自动推送设备信息 */
//显示设备正常与否信息
function showDeviceInfo(data){var jsonstr = eval( "(" + data + ")" );if(jsonstr!=null){$("#bottomcount").html("<p style=\"margin-left: 20px;margin-top: 20px; font-size: 16px;\">共<span id=\"allnum\" style=\"margin-left: 10px;margin-right: 10px;\">"+jsonstr.allnum+"</span>个   正常<span id=\"zcnum\" style=\"margin-left: 10px;margin-right: 10px;\"><a class=\"icon\" target=\"dialog\" rel=\"main\" title=\"设备部位的正常数量\" width=\"850\" height=\"500\" οnclick=\"getsitezc_gznum(0);\"><font color=\"green\">"+jsonstr.zcnum+"</font></a></span>个   故障<span id=\"gznum\" style=\"margin-left: 10px;margin-right: 10px;\"><a class=\"icon\" target=\"dialog\" rel=\"main\" title=\"设备部位码的故障数量\" width=\"850\" height=\"500\"οnclick=\"getsitezc_gznum(1);\"><font color=\"red\">"+jsonstr.gznum+"</font></a></span>个</p>");}
}
//显示所有故障点信息
function showDeviceGzdInfo(data){var gzdjsonstr = eval( "(" + data + ")" );if(gzdjsonstr!=null){$("#gzdcount").html("<ul>");for(var i=0; i<gzdjsonstr.length; i++) { $("#gzdcount").append("<a target=\"dialog\" rel=\"main\" title=\"设备部位的故障点数量\" width=\"850\" height=\"500\" οnclick=\"getsitegzdnum('"+gzdjsonstr[i].device_code+"');\"><li style=\"list-style-type:none;\"><img alt=\"警示\" src=\"img/warning.png\"/><span id=\"gzsnum\" style=\"margin-left: 5px;margin-top: 20px; font-size: 14px;\">"+gzdjsonstr[i].device_code+"  (  故障  <span style=\"margin-left: 5px;margin-right: 5px;margin-top: 10px;\"><font color=\"red\" >"+gzdjsonstr[i].gzdnum + "</font></span>个)</span></li></a></ul>");}}isfirst=2;
}

页面如下




至此,大功告成。。。




这篇关于dwr 推送消息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/960641

相关文章

【ActiveMQ】开源消息总线ActiveMQ的使用

在阅读的过程中有任何问题,欢迎一起交流 邮箱:1494713801@qq.com    QQ:1494713801     1:下载 ActiveMQ 5.6.0 Release  http://activemq.apache.org/download.html  放到d盘  2:运行apache-activemq服务:双击 activemq.bat    4:所需j

【ActiveMQ】开源消息总线ActiveMQ

在阅读的过程中有任何问题,欢迎一起交流 邮箱:1494713801@qq.com    QQ:1494713801     一、消息中间件MOM(Message-Oriented Middleware)     消息中间件是解决异步分布式系统中通讯和排队问题的中间件技术。它利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和

.net下使用cap实现消息异步处理

介绍 github地址 CAP 是一个基于 .NET Standard 的 C# 库,它是一种处理分布式事务的解决方案,同样具有 EventBus 的功能,它具有轻量级、易使用、高性能等特点。 新建项目 新建.net7web项目 安装依赖包 安装软件 安装redis和Sql Server 修改代码 新建RedisConfigModel namespace CAPStu01.

消息队列( Kafka)

使用场景 日志处理: 大并发量时 ,将日志写入消息队列 消息通讯 点对点消息队列 产品 目前生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等 **将要介绍的: Kafka** 优势 高吞吐:非常普通的硬件Kafka也可以支持每秒数百万的消息 支持通过Kafka服务器和消费集群来区分消息 支持Hadoop并行数据加载

workerman 实现推送实时数据到前端

首先要说明一下,实时推送是有两个socket服务端和两个socket的客户端 我们分别起名叫做 外层服务端 (开启服务主进程 创建一个 websoket 连接)ws:// 内层服务端 (在开户主进程的时候,内部又创建的一个 socket)text:// 外层客户端 (这是由前端的用户端 使用js 创建的一个 websocket 客户端) 内层客户端 (这是php 使用 stream_socket_

kk聊天室系统源码搭建-自适应手机电脑-秒级响应-群体消息

kk聊天室系统源码搭建-自适应手机电脑-秒级响应-群体消息-单体消息 可以无限创建聊天室,可以把单个聊天室链接拿出来单独使用,消息秒级响应,支持设置屏蔽词。 具体仔细看视频演示,不提供演示,因为青狐资源网会员用户太多,会有人乱发广告,我们没时间管理! 也可用h5转软件技术,合成app软件。 大致功能: 支持设置屏蔽词支持无限创建聊天室支持单个链接拿出使用(也可直接把链接镶嵌到

订单成功时用PHP怎么做网站后台消息提醒?

前段html js: <!-- 百度语音 -->    <div id="yuyinbb" style="display:none;"><audio   id="music"  >您的浏览器不支持 audio 标签。</audio></div><script src="http://libs.baidu.com/jquery/1.11.1/jquery.min.js" type="text

微信支付java版本之JSAPI支付+发送模板消息

目录(?)[-] 工具类公众账号设置代码实现weixin_jspay项目中代码实现3其他接口 1.工具类 工具类见:微信支付JAVA版本之Native付款 2.公众账号设置 3.代码实现 openId:openId为用户与该公众账号之间代表用户的唯一标示 以下类中涉及到生成token,关闭订单接口调用,获

第十八章-消息重推-客户端发起

消息重推主要是针对消费端消费失败,需要下次再消费的情况,RocketMq中提供了多个重推的入口,这里不一一介绍,只延续章节16.5中的重推逻辑继续讲。 ConsumeMessageConcurrentlyService.sendMessageBack public boolean sendMessageBack(final MessageExt msg, final ConsumeConcur

Java微信小程序订阅消息提醒的实现与对接

文章目录 一、准备工作1. 注册微信小程序,并开通订阅消息功能。2. 获取小程序的AppID和AppSecret。3. 在微信小程序管理后台,设置提醒模板,并获取模板ID。4. 小程序端需要获取用户订阅允许提醒的权限(1)引导用户触发订阅(2)编写订阅消息的JavaScript代码(3)用户授权订阅(4)后台发送订阅消息(5)注意事项 二、实现步骤1. 获取Access Token2. 用