`

服务器推送——PushLet的应用<一>

阅读更多

   背景 最近,公司需要做一个设备监控方面的项目,前台采用ExtJs、后台采用SSH框架+SNMP技术实现。但是由于设备监控大多数时候都需要后台实时的与页面进行信息传递,平时只做过前台主动向后台发送请求,然后获取信息的,而从后台主动向前台发送消息的还没做过。只好问度娘、谷哥,知道了“服务器推送技术”,进而知道了PushLet这个东东,然后在网上开始扒资料,但是网上的资料都差不多(你们懂的),例子普遍的都是类似于IM即时聊天的实现。虽然如此,这些资料依然给了我莫大的帮助,在此非常感谢那些资料的贡献者(无论是原创还是转载者^_^)!

      好了,废话少说,翠花,上例子!

 

        Step1 首先当然要获取pushlet开发包

             http://sourceforge.net/projects/pushlets/files/pushlets/2.0.4/pushlet-2.0.4.zip/download

        下载后解压,获取lib下的pushlet.jar  pushletclient.jar 、以及webapps\pushlet\WEB-INF\classes下的  log4j.properties  pushlet.properties   sources.properties。

 

        Step-2 在src目录中添加  log4j.properties、pushlet.properties、 sources.properties ,待会儿需要对sources.properties进行修改和配置。

 

         Step-3 配置Web.xml 在Web.xml中加入如下内容:

 

<servlet>
		<servlet-name>pushlet</servlet-name>
		<servlet-class>nl.justobjects.pushlet.servlet.Pushlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<!-- Define the Servlet Mappings. -->
	<!-- The pushlet -->
	<servlet-mapping>
		<servlet-name>pushlet</servlet-name>
		<url-pattern>/pushlet.srv</url-pattern>
	</servlet-mapping>

     

           Step-4 创建自己的事件源

package com.fornew;

import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Random;

import nl.justobjects.pushlet.core.Event;
import nl.justobjects.pushlet.core.EventPullSource;

public class PushLet implements Serializable{
	private static final long serialVersionUID = 1L;

	static public class PushEvent extends EventPullSource{
		public int i = 1;
		@Override
		protected long getSleepTime() {
			return 3000; //设置休眠时间(getSleepTime)
		}

		@Override
		//创建事件(pullEvent)其中,业务部分就写在pullEvent()方法中即可,这个方法会被定时调用。
		protected Event pullEvent() {
			Event event =Event.createDataEvent("/fornew/push"); //事件与jsp页面"绑定"
			StringBuffer str = new StringBuffer("富二代【").append(i++).append('】');
			str.append(this.getRandomStr());
			try {
				//转码,否则中文在页面出现乱码,且会使页面“掉线”
				event.setField("hw",new String(str.toString().getBytes("UTF-8"), "ISO-8859-1"));
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			} 
			return event;
		}
		//产生随机数,便于页面观察
		public String getRandomStr(){
			Random random = new Random();
			return Math.abs(random.nextInt())+"";
		}
	}
}

 

            Step-5  在上面加入的sources.properties中配置事件源

                原配置如下(不是html代码哈):

source1=nl.justobjects.pushlet.test.TestEventPullSources$TemperatureEventPullSource
source2=nl.justobjects.pushlet.test.TestEventPullSources$SystemStatusEventPullSource
source3=nl.justobjects.pushlet.test.TestEventPullSources$PushletStatusEventPullSource
source4=nl.justobjects.pushlet.test.TestEventPullSources$AEXStocksEventPullSource
source5=nl.justobjects.pushlet.test.TestEventPullSources$WebPresentationEventPullSource
source6=nl.justobjects.pushlet.test.TestEventPullSources$PingEventPullSource

       将其删除或者注释掉,加入自己的事件源,如下 (不是html代码哈)

 

source1=com.fornew.PushLet$PushEvent

 

           Step-6  编写index.jsp页面如下:

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page isELIgnored="false"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<base href="<%=basePath%>">
		<title>PushLet-示例</title>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<script type="text/javascript" src="pushlet/ajax-pushlet-client.js"></script>
		<script type="text/javascript">
		PL._init();
		PL.joinListen('/fornew/push');
		function onData(event){
		var str = event.get("hw");
		var elId = document.getElementById('wxh');
		//产生随机颜色值
		var getColor = function(){
		var r = Math.ceil(Math.random()*256).toString(16);
		r = r.length==1?'0'+r:r;
		return r;
		}
		var color = '#';
		color =(color + getColor() + getColor() + getColor());
		//产生随机颜色值,便于观察
		elId.value = str;
		elId.style.color=color;
		}
		</script>
	</head>
	<body>
	<div>
	<input type="text" id="wxh" size="50" name="wxh" maxlength="80" value="500"/>
	</div>
	</body>
</html>

  

注意: 需要引入pushlet的js脚本(ajax-pushlet-client.js)

         其中比较重要的是这段JavaScript代码,PL._init()、PL.joinListen("")为固定用法,必须写,且顺序固定。joinListen中的“字符串”与自定义事件源中的createDataEvent中的“字符串”相对应另外function onData(event)方法也为固定用法、为pushlet脚本自定义页面响应函数。

 

		<script type="text/javascript">
		PL._init();
		PL.joinListen('/fornew/push');
		function onData(event){
		var str = event.get("hw");
		var elId = document.getElementById('wxh');
		//产生随机颜色值
		var getColor = function(){
		var r = Math.ceil(Math.random()*256).toString(16);
		r = r.length==1?'0'+r:r;
		return r;
		}
		var color = '#';
		color =(color + getColor() + getColor() + getColor());
		//产生随机颜色值
		elId.value = str;
		elId.style.color=color;
		}
		</script>

      

 

          自此,编译、部署项目,在浏览器中访问该项目,后台Java程序每隔3秒将会向index.jsp推送一次信息。

 

                参考: http://edwin492.iteye.com/blog/1124751

               个人说明:

                1 、为表示对相关资料贡献者的尊重,转载、参考内容均有特殊说明并附出处【 URL

                2 、由于知识面、技术能力有限,内容主要面向应用、没有过多关于原理性的介绍。

                另外文中阐述若有   不 ( ) 正确之处,望广大网友“友好”指正。

 

  • PushLet_A.rar (16.9 KB)
  • 描述: 源码(导入MyEclipse可用)
  • 下载次数: 166
分享到:
评论
8 楼 杜甫很忙 2012-11-20  
心痛泪流 写道
杜甫很忙 写道
try {   
               //转码,否则中文在页面出现乱码,且会使页面“掉线”   
               event.setField("hw",new String(str.toString().getBytes("UTF-8"), "ISO-8859-1"));   
           } catch (UnsupportedEncodingException e) {   
                e.printStackTrace();   
            }    


在TOMCAT下, 客户端JSP界面通过event.get("hw")可以获取到正确的中文
在Weblogic9.2下,获取到的是乱码,JSP采用GBK编码格式,请问是什么问题呢?

  额 这个我也只在Tomcat下做过测试,应该还是编码造成的吧!


这个问题解决了,需要使用java.net.URLEncoder.encode一下
7 楼 心痛泪流 2012-11-20  
杜甫很忙 写道
try {   
               //转码,否则中文在页面出现乱码,且会使页面“掉线”   
               event.setField("hw",new String(str.toString().getBytes("UTF-8"), "ISO-8859-1"));   
           } catch (UnsupportedEncodingException e) {   
                e.printStackTrace();   
            }    


在TOMCAT下, 客户端JSP界面通过event.get("hw")可以获取到正确的中文
在Weblogic9.2下,获取到的是乱码,JSP采用GBK编码格式,请问是什么问题呢?

  额 这个我也只在Tomcat下做过测试,应该还是编码造成的吧!
6 楼 心痛泪流 2012-11-20  
cuisuqiang 写道

呵呵。。Mark你的连接了,前期只是做了个Demo,那个模块暂时放一边了,可能的话后期再继续!
5 楼 杜甫很忙 2012-11-14  
try {   
               //转码,否则中文在页面出现乱码,且会使页面“掉线”   
               event.setField("hw",new String(str.toString().getBytes("UTF-8"), "ISO-8859-1"));   
           } catch (UnsupportedEncodingException e) {   
                e.printStackTrace();   
            }    


在TOMCAT下, 客户端JSP界面通过event.get("hw")可以获取到正确的中文
在Weblogic9.2下,获取到的是乱码,JSP采用GBK编码格式,请问是什么问题呢?
4 楼 cuisuqiang 2012-10-10  
crazy_cf 写道
楼主! 怎么似曾相识呀

你们兄弟呗。。。呵呵呵
3 楼 cuisuqiang 2012-10-10  
2 楼 ysc838435 2012-09-12  
http://www.myexception.cn/open-source/410564.html
1 楼 crazy_cf 2012-06-12  
楼主! 怎么似曾相识呀

相关推荐

    服务器推送——PushLet的应用<二>

    【服务器推送技术——PushLet应用详解】 在现代网络应用中,服务器推送技术(Server-Sent Events, SSE 或 WebSockets)已经成为实时通信的关键组件。本文将深入探讨PushLet的使用,这是一种实现服务器推送的框架,...

    服务器推送pushlet讲解

    服务器推送技术在现代Web...总之,Pushlet作为Comet的一种实现,提供了高效且灵活的服务器推送功能,尤其适合需要实时数据交互的Web应用。通过对Pushlet框架的深入理解和实践,开发者可以构建出更具互动性的Web服务。

    服务器推送 pushlet

    服务器推送技术,通常被称为“Push”技术,是网络应用程序中的一种通信模式,它允许服务器主动地将数据推送给客户端,而不仅仅是响应客户端的请求。这种技术对于实时性要求高的应用,如聊天、股票更新、在线游戏等,...

    maven 普通jar 生成规则

    &lt;groupId&gt;nl.justobjects.pushlet&lt;/groupId&gt; &lt;artifactId&gt;pushlet&lt;/artifactId&gt; &lt;version&gt;2.0.4&lt;/version&gt; &lt;/dependency&gt; &lt;/dependencies&gt; ``` #### Maven JAR 文件部署到远程仓库 对于将 JAR 文件部署到远程...

    一个基于pushlet推送的小例子

    总结来说,"一个基于pushlet推送的小例子"是一个展示如何在Tomcat服务器上利用Pushlet框架实现Comet技术的实例。通过这个例子,开发者可以学习到如何构建和部署一个能够进行服务器端数据推送的Web应用,这对于需要...

    http长连接(服务器推)使用pushlet教程示例以及jar包源码

    在Pushlet框架中,"一对多"的信息推送意味着一个服务器端实例可以同时向多个客户端推送信息,适合广播类型的应用。"点对点"则表示服务器可以将信息直接推送给特定的客户端,适用于个性化通知或私密消息传递。 使用...

    pushlet实例(java服务端推送消息)

    实现多个客户端连接到web服务器,由服务端推送消息至客户端(或指定id的客户端),代码中没有用官网的jar文件,而是用的源码,做了一定的修改,实现了每个客户端都可以自定义id,然后服务端可以向指定id客户端推送消息...

    pushlet实现服务器端向客户端推送消息总结

    Pushlet 是一种基于 Java 的实时通信框架,用于实现在服务器端向客户端主动推送消息的功能,而无需客户端不断轮询。这种技术在构建实时应用程序,如聊天室、实时股票更新或在线游戏等场景中非常有用。以下是关于 ...

    pushlet服务器推送技术

    在IBM于2008年发布的技术报告中,详细介绍了服务器推送技术——即所谓的Pushlet。这项技术为Web应用程序的发展带来了革命性的变化,尤其是在异步通信方面。本文将根据报告内容深入探讨Pushlet的相关知识点,包括其...

    java web开发中服务器推送pushlet.jar解决中文乱码

    java web开发中服务器推送pushlet.jar解决中文乱码

    网页推送pushlet的demo

    Pushlet是基于Java的一种早期的推送技术框架,它利用了 comet 技术,实现了服务器到客户端的双向通信。在本Demo中,我们将深入探讨Pushlet的工作原理和如何实现一个基本的网页推送系统。 首先,我们需要理解什么是...

    pushlet定时向前台推送消息

    Pushlet是一种基于Java的技术,用于实现服务器向客户端的实时数据推送。这种技术的核心思想是打破传统的HTTP请求-响应模式,让服务器能够在数据更新时主动将信息推送给客户端,而不是等待客户端发起新的请求来获取...

    pushlet服务器推技术例子

    【Pushlet服务器推技术】是一种实时通信技术,主要用于构建能够实时推送信息的Web应用程序,比如聊天、股票更新、在线游戏等场景。Pushlet是基于Java的开源项目,它利用了HTTP的长连接特性,实现了服务器主动向...

    pushlet消息推送

    Pushlet Client则运行在用户浏览器或者应用程序中,用于接收服务器推送的数据,并进行相应的处理。Event Source可以是任何产生事件的数据源,如数据库、传感器或其他服务器。 Pushlet的工作流程大致如下: 1. ...

    PushLet实例,服务器消息推送

    【标题】"PushLet实例,服务器消息推送"指的是一个基于Java技术实现的服务器端消息推送系统,名为PushLet。在互联网应用中,实时性是非常重要的一个特性,例如在线聊天、股票更新、新闻推送等场景。传统的HTTP协议是...

    基于pushlet实现的jsp网站消息推送

    为了解决这个问题,出现了多种推送技术,其中Pushlet就是一种基于Java的实时推送框架。 Pushlet是基于Servlet和JSP技术的,它实现了服务器端向客户端主动推送数据的功能,无需客户端不断轮询服务器来获取新信息。...

    pushlet2.0.4-demo-增加指定人推送

    在最新的版本 2.0.4 中,该框架引入了一个重要的新特性——支持指定用户推送,这使得消息传输更加精细化,提升了用户体验,同时也优化了服务器资源的利用。 一、Pushlet 框架基础 Pushlet 框架基于 publish-...

    Pushlet消息推送

    Pushlet是一种基于HTTP长连接的消息推送技术,它允许服务器主动将数据推送到客户端,而不需要客户端持续不断地发起请求来检查新数据。这种技术在实时性要求较高的应用中非常常见,比如聊天应用、股票行情、在线游戏...

Global site tag (gtag.js) - Google Analytics