• 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代码   收藏代码
    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.   
    25.   <servlet-mapping>  
    26.      <servlet-name>dwr-invoke</servlet-name>  
    27.      <url-pattern>/dwr/*</url-pattern>  
    28.   </servlet-mapping>  
    29.   <welcome-file-list>  
    30.     <welcome-file>client.html</welcome-file>  
    31.   </welcome-file-list>  
    32. </web-app>  

     

    dwr.xml代码如下:

    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代码如下:

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

     client.html代码如下:

    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.   
    7.     function callBack(data){      
    8.            alert(data);     
    9.         }    
    10.     function receiveMessages(id) {  
    11.             $('orderNotice').innerHTML = "收到id为" + id + "的新订单!";  
    12.             $('orderNotice').show();  
    13.         }  
    14.      
    15. </script>  
    16. </head>  
    17. <body onload="dwr.engine.setActiveReverseAjax(true);">  
    18. <textarea rows="20" cols="20" id="news_id"></textarea>  
    19. <br />   
    20. <div id="orderNotice"></div>   
    21. </body>  
    22. </html>  

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

    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.       
    14.     function sendinfo(){   
    15.        myrevsrse.noticeNewOrder(12);  
    16.     }    
    17. </script>  
    18. </head>  
    19. <body>  
    20. <input type="text" name="newcontent">  
    21. <input type = "button" value="发消息" onclick="sendnews()"/>   
    22. <br />  
    23. <input type = "button" value="send 2" onclick="sendinfo()"/>  
    24. <br />    
    25. </body>  

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


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

  • 相关阅读:
    angular7新特性
    ES6基本语法入门
    uni-app 请求封装
    Node.js- Express框架
    webpack知识分享
    【JS】深入理解JS原型和继承
    JavaScript 变量作用域和声明提升
    在元素上写事件和addEventListent()的区别
    webStrom快捷键快速创建React组件
    vue移动端 实现手机左右滑动入场动画
  • 原文地址:https://www.cnblogs.com/james1207/p/3341717.html
Copyright © 2020-2023  润新知