dwr消息推送和tomcat集群
网友的提问:
项目中用到了dwr消息推送。而服务端是通过一个http请求后 触发dwr中的推送方法。而单个tomcat中。服务器发送的http请求和用户都在一个tomcat服务器中。这样就能精准推送到每个客户端用户 中。现在配置了apache集群后,通过负载均衡,apache把服务器的这个http请求也给分配给一个tomcat容器中。这样的话,在别的tomcat容器中的用户就接受不要消息了。有什么好的办法让这个请求分配给每个tomcat容器。
提取到的知识点是
dwr消息推送、apache集群、负载均衡
http://tonl.iteye.com/blog/1399027
使用DWR反转实现信息推送(一)
除了利用Pushlet实现信息推送外,DWR反转同样可以实现推送。
DWR的简单配置方法已经在以前的博客中写过。所以这里直接贴代码:
新建web工程,这里命名为DwrEg,包结构如下:

web.xml代码如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <servlet>
- <servlet-name>dwr-invoke</servlet-name>
- <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
- <init-param>
- <param-name>debug</param-name>
- <param-value>true</param-value>
- </init-param>
- <init-param>
- <param-name>activeReverseAjaxEnabled</param-name>
- <param-value>true</param-value>
- </init-param>
- <!--
- <init-param>
- <param-name>classes</param-name>
- <param-value>java.lang.Object</param-value>
- </init-param> -->
- </servlet>
- <servlet-mapping>
- <servlet-name>dwr-invoke</servlet-name>
- <url-pattern>/dwr/*</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>client.html</welcome-file>
- </welcome-file-list>
- </web-app>
dwr.xml代码如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr//dwr20.dtd">
- <dwr>
- <allow>
- <create javascript="myrevsrse" creator="new">
- <param name="class" value="com.src.MyReverse"/>
- </create>
- </allow>
- </dwr>
MyReverse.java代码如下:
- package com.src;
- import java.util.Collection;
- import org.directwebremoting.ScriptBuffer;
- import org.directwebremoting.ScriptSession;
- import org.directwebremoting.ServerContext;
- import org.directwebremoting.ServerContextFactory;
- import org.directwebremoting.WebContext;
- import org.directwebremoting.WebContextFactory;
- import org.directwebremoting.proxy.dwr.Util;
- public class MyReverse {
- public void sendMes(String mes){
- System.out.println("kao shi si bestllll...");
- send("系统消息:"+mes);
- }
- public void send(final String output) {
- org.directwebremoting.WebContext web = WebContextFactory.get();
- String page = web.getServletContext().getContextPath()+"/client.html";
- Collection sessions = web.getScriptSessionsByPage(page);
- System.out.println("size=="+sessions.size());
- Util utilAll = new Util(sessions);
- utilAll.addFunctionCall("callBack", output); //callBack是client.jsp里面的javascript函数,output是传递过去的参数
- //utilAll.setValue("news_id", output, false);
- //这种方法也可以,直接将client.html里id为news_id的textarea的值设置为output的值
- }
- public void noticeNewOrder(int id) {
- WebContext wctx = WebContextFactory.get();
- ScriptBuffer script = new ScriptBuffer();
- script.appendScript("receiveMessages(")
- .appendData(id)
- .appendScript(");");
- ServerContext sctx = ServerContextFactory.get(wctx.getServletContext());
- Collection<ScriptSession> pages = sctx.getScriptSessionsByPage("/DwrEg/client.html");
- for (ScriptSession session : pages) {
- session.addScript(script);
- }
- }
- }
client.html代码如下:
- <html>
- <script type="text/javascript" src="dwr/engine.js"></script>
- <script type="text/javascript" src="dwr/util.js"></script>
- <head>
- <script type="text/javascript">
- function callBack(data){
- alert(data);
- }
- function receiveMessages(id) {
- $('orderNotice').innerHTML = "收到id为" + id + "的新订单!";
- $('orderNotice').show();
- }
- </script>
- </head>
- <body onload="dwr.engine.setActiveReverseAjax(true);">
- <textarea rows="20" cols="20" id="news_id"></textarea>
- <br />
- <div id="orderNotice"></div>
- </body>
- </html>
推送界面dopush.html的代码如下:
- <html>
- <script type="text/javascript" src="dwr/engine.js"></script>
- <script type="text/javascript" src="dwr/util.js"></script>
- <script type="text/javascript" src="dwr/interface/myrevsrse.js"></script>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>Insert title here</title>
- <script type="text/javascript">
- function sendnews(){
- var new_content = dwr.util.getValue("newcontent");
- myrevsrse.sendMes(new_content);
- }
- function sendinfo(){
- myrevsrse.noticeNewOrder(12);
- }
- </script>
- </head>
- <body>
- <input type="text" name="newcontent">
- <input type = "button" value="发消息" onclick="sendnews()"/>
- <br />
- <input type = "button" value="send 2" onclick="sendinfo()"/>
- <br />
- </body>
同样,这里的问题也是怎么实现点对点的信息推送,这儿只是实现了向所有的clent.html页面推送信息,以后接着总结。。。。
tomcat集群http://blog.csdn.net/lifetragedy/article/details/7712691
dwr消息推送和tomcat集群的更多相关文章
- dwr消息推送
闲来无事,把自己关于对dwr消息推送的实现过程描述一番. 首先第一步,当然在工程中是加入dwr.jar了,接着在web.xml中配置以下代码 <servlet> <servlet-n ...
- MPush开源消息推送系统:简洁、安全、支持集群
引言由于之前自己团队需要一个消息推送系统来替换JPUSH,一直找了很久基本没有真正可用的开源系统所有就直接造了个轮子,造轮子的时候就奔着开源做打算的,只是后来创业项目失败一直没时间整理这一套代码,最近 ...
- spring websocket 和socketjs实现单聊群聊,广播的消息推送详解
spring websocket 和socketjs实现单聊群聊,广播的消息推送详解 WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随 ...
- 利用Kafka的Assign模式实现超大群组(10万+)消息推送
引言 IM即时通信场景下,最重要的一个能力就是推送:在线的直接通过长连接网关服务转发,离线的通过APNS或者极光等系统进行推送. 本文主要是针对在线用户推送场景来进行总结和探讨:如何利用Kafka ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- dwr简单应用及一个反向ajax消息推送
由于项目中最近需要用到dwr实现一些功能,因此在网上和dwr官网上找了一些资料进行学习.在此记录一下.(此处实现简单的dwr应用和dwr消息反向推送) 一.引入dwr的包 <dependency ...
- WEB消息推送-原理篇
这篇文章主要讲述B/S架构中服务器“推送”消息给浏览器.内容涉及ajax论询(polling),comet(streaming,long polling).后面会附上源代码. 最近在工作有这么一个需求 ...
- Redis存储Tomcat集群的Session
Redis存储Tomcat集群的Session 如何 做到把新开发的代码推送到到生产系统中部署,生产系统要能够零宕机.对使用用户零影响. 设想 是使用集群来搞定,通过通知负载均衡Nginx,取下集群中 ...
- CometD的消息推送
CometD 框架 CometD 框架是基于 HTTP 的事件驱动通信解决方案.CometD 框架提供了一个 Java 服务器部件和一个 Java 客户端部件,还有一个基于 jQuery 和 Dojo ...
随机推荐
- qt 工具栏和菜单栏
在前面的QMainWindow的基础之上,我们开始着手建造我们的应用程序.虽然现在已经有一个框架,但是,确切地说我们还一行代码没有写呢!下面的工作就不那么简单了!在这一节里面,我们要为我们的框架添加菜 ...
- Java 8 被动迭代式特性介绍(转自IBM)
编程语言一般都需要提供一种机制用来遍历软件对象的集合,现代的编程语言支持更为复杂的数据结构,如列表.集合.映射和数组.遍历能力是通过公共方法提供,而内部细节都隐藏在类的私有部分,所以程序员不需要了解其 ...
- 洛谷比赛 堕落的Joe
/*暴力50*/ #include<iostream> #include<cstdio> #include<cstring> #define maxn 100010 ...
- (转载)记录函数 getStyle() 获取元素 CSS 样式
设置元素(element)的css属性值可以用element的style属性,例如要将element的背景色设置为黑色,可以这么做: element.style.backgroundColor = ' ...
- WPF Binding值转换器ValueConverter使用简介(二)-IMultiValueConverter
注: 需要继承IMultiValueConverter接口,接口使用和IValueConverter逻辑相同. 一.MultiBinding+Converter 多值绑定及多值转换实例 当纵向流量大于 ...
- ASP.NET Excel数据导出数据库
/// <summary> /// 根據gridview導出excel /// </summary> /// <param name="ctl"> ...
- Flyweight 模式
如果一个应用程序使用了太多的对象, 就会造成很大的存储开销. 特别是对于大量轻量级 (细粒度)的对象,比如在文档编辑器的设计过程中,我们如果为每个字母创建一个对象的话,系统可能会因为大量的对象而造成存 ...
- IOS DLNA PlatinumKit库的使用
前段时间进行了IOS DLNA的开发,使用的是PlatinumKit库.网上查了很多资料都未果,经过自己的摸索,遂将如何使用PlatinumKit进行DLNA的开发分享给大家. 1.PlatinumK ...
- confluence的权限管理
上一篇解讲如何破解,安装confluence5.8.10,这次主要是看权限管理的实现.因为公司对知识的管理不仅是简单的分享,还要求不同权限的人看到不同的内容,所以在一开始就需要对权限这一块有所了解,以 ...
- springMVC整合jedis+redis,以注解形式使用
前两天写过 springMVC+memcached 的整合,我从这个基础上改造一下,把redis和springmvc整合到一起. 和memcached一样,redis也有java专用的客户端,官网推荐 ...