网友的提问:

项目中用到了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代码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7. <servlet>
  8. <servlet-name>dwr-invoke</servlet-name>
  9. <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
  10. <init-param>
  11. <param-name>debug</param-name>
  12. <param-value>true</param-value>
  13. </init-param>
  14. <init-param>
  15. <param-name>activeReverseAjaxEnabled</param-name>
  16. <param-value>true</param-value>
  17. </init-param>
  18. <!--
  19. <init-param>
  20. <param-name>classes</param-name>
  21. <param-value>java.lang.Object</param-value>
  22. </init-param> -->
  23. </servlet>
  24. <servlet-mapping>
  25. <servlet-name>dwr-invoke</servlet-name>
  26. <url-pattern>/dwr/*</url-pattern>
  27. </servlet-mapping>
  28. <welcome-file-list>
  29. <welcome-file>client.html</welcome-file>
  30. </welcome-file-list>
  31. </web-app>

dwr.xml代码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr//dwr20.dtd">
  3. <dwr>
  4. <allow>
  5. <create javascript="myrevsrse" creator="new">
  6. <param name="class" value="com.src.MyReverse"/>
  7. </create>
  8. </allow>
  9. </dwr>

MyReverse.java代码如下:

  1. package com.src;
  2. import java.util.Collection;
  3. import org.directwebremoting.ScriptBuffer;
  4. import org.directwebremoting.ScriptSession;
  5. import org.directwebremoting.ServerContext;
  6. import org.directwebremoting.ServerContextFactory;
  7. import org.directwebremoting.WebContext;
  8. import org.directwebremoting.WebContextFactory;
  9. import org.directwebremoting.proxy.dwr.Util;
  10. public class MyReverse {
  11. public void sendMes(String mes){
  12. System.out.println("kao shi si bestllll...");
  13. send("系统消息:"+mes);
  14. }
  15. public void send(final String output) {
  16. org.directwebremoting.WebContext web = WebContextFactory.get();
  17. String page = web.getServletContext().getContextPath()+"/client.html";
  18. Collection sessions = web.getScriptSessionsByPage(page);
  19. System.out.println("size=="+sessions.size());
  20. Util utilAll = new Util(sessions);
  21. utilAll.addFunctionCall("callBack", output); //callBack是client.jsp里面的javascript函数,output是传递过去的参数
  22. //utilAll.setValue("news_id", output, false);
  23. //这种方法也可以,直接将client.html里id为news_id的textarea的值设置为output的值
  24. }
  25. public void noticeNewOrder(int id) {
  26. WebContext wctx = WebContextFactory.get();
  27. ScriptBuffer script = new ScriptBuffer();
  28. script.appendScript("receiveMessages(")
  29. .appendData(id)
  30. .appendScript(");");
  31. ServerContext sctx = ServerContextFactory.get(wctx.getServletContext());
  32. Collection<ScriptSession> pages = sctx.getScriptSessionsByPage("/DwrEg/client.html");
  33. for (ScriptSession session : pages) {
  34. session.addScript(script);
  35. }
  36. }
  37. }

client.html代码如下:

  1. <html>
  2. <script type="text/javascript" src="dwr/engine.js"></script>
  3. <script type="text/javascript" src="dwr/util.js"></script>
  4. <head>
  5. <script type="text/javascript">
  6. function callBack(data){
  7. alert(data);
  8. }
  9. function receiveMessages(id) {
  10. $('orderNotice').innerHTML = "收到id为" + id + "的新订单!";
  11. $('orderNotice').show();
  12. }
  13. </script>
  14. </head>
  15. <body onload="dwr.engine.setActiveReverseAjax(true);">
  16. <textarea rows="20" cols="20" id="news_id"></textarea>
  17. <br />
  18. <div id="orderNotice"></div>
  19. </body>
  20. </html>

推送界面dopush.html的代码如下:

  1. <html>
  2. <script type="text/javascript" src="dwr/engine.js"></script>
  3. <script type="text/javascript" src="dwr/util.js"></script>
  4. <script type="text/javascript" src="dwr/interface/myrevsrse.js"></script>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  7. <title>Insert title here</title>
  8. <script type="text/javascript">
  9. function sendnews(){
  10. var new_content = dwr.util.getValue("newcontent");
  11. myrevsrse.sendMes(new_content);
  12. }
  13. function sendinfo(){
  14. myrevsrse.noticeNewOrder(12);
  15. }
  16. </script>
  17. </head>
  18. <body>
  19. <input type="text" name="newcontent">
  20. <input type = "button" value="发消息" onclick="sendnews()"/>
  21. <br />
  22. <input type = "button" value="send 2" onclick="sendinfo()"/>
  23. <br />
  24. </body>

同样,这里的问题也是怎么实现点对点的信息推送,这儿只是实现了向所有的clent.html页面推送信息,以后接着总结。。。。

tomcat集群http://blog.csdn.net/lifetragedy/article/details/7712691

dwr消息推送和tomcat集群的更多相关文章

  1. dwr消息推送

    闲来无事,把自己关于对dwr消息推送的实现过程描述一番. 首先第一步,当然在工程中是加入dwr.jar了,接着在web.xml中配置以下代码 <servlet> <servlet-n ...

  2. MPush开源消息推送系统:简洁、安全、支持集群

    引言由于之前自己团队需要一个消息推送系统来替换JPUSH,一直找了很久基本没有真正可用的开源系统所有就直接造了个轮子,造轮子的时候就奔着开源做打算的,只是后来创业项目失败一直没时间整理这一套代码,最近 ...

  3. spring websocket 和socketjs实现单聊群聊,广播的消息推送详解

    spring websocket 和socketjs实现单聊群聊,广播的消息推送详解 WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随 ...

  4. 利用Kafka的Assign模式实现超大群组(10万+)消息推送

    引言 IM即时通信场景下,最重要的一个能力就是推送:在线的直接通过长连接网关服务转发,离线的通过APNS或者极光等系统进行推送.   本文主要是针对在线用户推送场景来进行总结和探讨:如何利用Kafka ...

  5. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  6. dwr简单应用及一个反向ajax消息推送

    由于项目中最近需要用到dwr实现一些功能,因此在网上和dwr官网上找了一些资料进行学习.在此记录一下.(此处实现简单的dwr应用和dwr消息反向推送) 一.引入dwr的包 <dependency ...

  7. WEB消息推送-原理篇

    这篇文章主要讲述B/S架构中服务器“推送”消息给浏览器.内容涉及ajax论询(polling),comet(streaming,long polling).后面会附上源代码. 最近在工作有这么一个需求 ...

  8. Redis存储Tomcat集群的Session

    Redis存储Tomcat集群的Session 如何 做到把新开发的代码推送到到生产系统中部署,生产系统要能够零宕机.对使用用户零影响. 设想 是使用集群来搞定,通过通知负载均衡Nginx,取下集群中 ...

  9. CometD的消息推送

    CometD 框架 CometD 框架是基于 HTTP 的事件驱动通信解决方案.CometD 框架提供了一个 Java 服务器部件和一个 Java 客户端部件,还有一个基于 jQuery 和 Dojo ...

随机推荐

  1. 用CSS+Jquery实现一个漂浮的窗体

    一.项目需求: 实现一个用于网站主页面 从窗体左上角开始飘到右下角 之后又飘到右上角 十秒之后消失的效果. 二.需求分析: 首先 应当想要漂浮的内容放在一个容器内,也就是一个DIV,设计它的样式,不管 ...

  2. Android 控件 之 Menu 菜单

    http://www.cnblogs.com/Mrs-cc/archive/2012/07/21/2603042.html 1.OptionsMenu (选项菜单)用法总结   使用方法: 方法一:添 ...

  3. 设置tomcat启动超时,不会自动停止

    tomcat启动时如果1000ms没有起来,服务就会自动停止.设置位置如下

  4. 用户组,AD域控简介

    “自由”的工作组    工作组(WORK GROUP)就是将不同的电脑按功能分别列入不同的组中,以方便管理.比如在一个网络内,可能有成百上千台工作电脑,如果这些电脑不进行分组,都列在“网上邻居”内,可 ...

  5. 使用EasyUI导入的js顺序

    使用Jquery Easy UI要导入的js顺序<1>.引用Jquery的Js文件<script src="jquery-easyui-1.3.4/jquery-1.8.0 ...

  6. Debug your C# project more efficiently

    I am a very beginner working with C# and Visual Studio 2013. When I debug my project, I always reope ...

  7. 64位系统下System32文件系统重定向

    前言 因为一次偶然的机会,需要访问系统目录“C:/Windows/System32“文件夹下的内容,使用的测试机器上预装了win7 64系统.在程序运行中竟然发生了该文件路径不存在的问题!!通过查看网 ...

  8. 【HDU3487】【splay分裂合并】Play with Chain

    Problem Description YaoYao is fond of playing his chains. He has a chain containing n diamonds on it ...

  9. PHP不依赖系统自动执行机制

    不依赖系统,以及不依赖yii事物机制,则考虑人为触发.触发可以写在总体的公共页面上,但是考虑到对数据库以及WWW服务器的压力问题,程序的延迟问题,需要对执行函数进行一些优化. 首先,我们考虑对数据库的 ...

  10. QTP的DataTable操作整理(注---不知转载多少遍)

    返回值:数字 示例: 以下示例使用 GetRowCount 方法查找 MySheet 运行时数据表中最长的列中的总行数,并将其写入报告. rowcount = DataTable.GetSheet(& ...