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
转载于:https://www.cnblogs.com/james1207/p/3341717.html
dwr消息推送和tomcat集群相关推荐
- netty多台服务器 推送消息,基于Netty的消息推送服务器集群设计与实现
徐龙光 何顶新 摘 要:消息推送是当前移动应用中十分必要的一项技术,服务者需要使用消息推送以保持用户活跃度,提高应用存留率.为了满足消息推送的需求和增强推送系统的性能,采用Netty网络编程框架并搭建 ...
- pushlet实现单机-集群服务端消息推送
一.什么是pushlet? 1.pushlet推送是一种将java后台数据推送到web页面的框架技术,实现了comet. 2.comet是一个用于描述客户端和服务器之间交互的术语,即使用长期保持的ht ...
- CoolQ/DingTalk 实现CI/CD消息推送到群
基于Gitlab 的 CI/CD 流程搞好后,需要将CI Job或流水线的执行状态通知到给相关QA或者开发人员,整个大前端组,项目系统工程数量>15个,所以有必要聚合CI/CD相关自动化流水线信 ...
- 配置Hi提醒实现股票行情监测信息推送到飞书群机器人消息教程
通过配置Hi提醒通道完成后可推送信息至你的飞书群中,一次配置持久使用. 一.创建飞书机器人: 1.登录飞书PC端,选择群 首先选择需要增加机器人的群,在窗口右侧点击[设置]图标弹出菜单 点击窗口中的[ ...
- 持续集成之群聊机器人消息推送:钉钉 vs 企业微信
企业微信和钉钉都有面向群的消息推送机器人,两者的使用非常相近,也有一些细节上的特性的区别,这篇文章将结合前面的使用示例进行总结. 使用方式 不同点 企业微信:先创建群,然后在群中添加机器人,可添加多个 ...
- 持续集成之消息推送:钉钉与企业微信的群聊机器人通用示例
使用钉钉和企业微信的群聊机器人可以进行消息推送,这篇文章使用一个简单的脚本来说明其使用方式. 推送消息的方法 钉钉或者企业微信的群机器人都可提供消息推送的功能,相关的机器人的添加和消息推送的方法可以参 ...
- 基于Java实现企业微信群聊机器人-文件上传+消息推送(保证可用)
基于Java实现企业微信群聊机器人-文件上传+消息推送 1.pom.xml(注意版本尽量保持一致) 2.文件工具类 3.企业微信请求类 4.企业微信响应类 5.发送方法 6.企业微信机器人创建和配置 ...
- 【超全总结】集成环信消息推送注意事项(华为、oppo、vivo等)
环信即时通讯 IM 支持集成第三方厂商的消息推送服务,为 Android 开发者提供低延时.高送达.高并发.不侵犯用户个人数据的离线消息推送服务. 当客户端应用进程被关闭等原因导致用户离线,环信即时通 ...
- 干货 | Reactive模式在Trip.com消息推送平台上的实践
作者简介 KevinTen,携程后端开发工程师,关注Reactive和RPC领域,深度参与开源社区,对Reactive技术有浓厚兴趣. Pin,携程技术专家,Apache Dubbo贡献者,关注RPC ...
最新文章
- 阿里数据:2020七大数据技术领域趋势展望
- 数据库-优化-案例-max()函数优化
- C4.5-Release8中Ross Quinlan对缺失值的处理
- mysql日期条件如何应用_MySQL如何使用时间作为判断条件
- 车载电脑中控软件_数字图书馆智能化系统集成-ipad中控软件
- LeetCode 1013. 将数组分成和相等的三个部分
- 用tensorflow搭建RNN(LSTM)进行MNIST 手写数字辨识
- CMake 常用命令和变量
- Ubuntu12.04 安装(无法将 grub-efi 软件包安装到/target/中,如果没有 GRUB 启动引导期,所安装的系统无法启动)...
- 近 10 年新秀编程语言大 PK,Pick 它!
- 詹皇比肩乔丹!如何防住他?这是AI给出的回答
- UML类图关系全面剖析
- 第一个mybatis项目
- php mysql日期转换成时间戳_php日期转时间戳,指定日期转换成时间戳【转】
- [06]项目实战-移动端流体布局
- 数据挖掘 / 机器学习——决策树
- c语言获取windows路径,获取Windows/System/Temp目录路径
- Linux系统的权限管理
- mac使用hbuilderx安卓模拟器调试app
- ERROR: resetting DM9000 -> not responding dm9000 not found at 0x88000000问题解决
热门文章
- 并发编程(一)__volatile关键字
- 初次使用Android Studio问题,Android Studio往项目中添加图片
- 处理错误:ORA-27101: shared memory realm does not exist
- 在sae上编译代码是所遇到的问题
- 【mysql】二级索引----聚簇索引和非聚簇索引-----
- [Java学习]Striing StringBuffer StringBuilder 的比
- springMVC - 之拦截器
- thinkphp集成系列之phpmailer批量发送邮件
- Python_问题收录总结
- 苹果风格:分享一组免费的自定义 MacOS 图标