`
左手边
  • 浏览: 94472 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Pushlet技术的学习之一

阅读更多

 

1、基础概念:Pushlet是一种comet实现:在Servlet机制下,数据从server端的Java对象直接推送(push)到(动态)HTML页面,而无需任何Java applet或者插件的帮助。

2、什么事comet请参照

http://www.ibm.com/developerworks/cn/web/wa-lo-comet/

3、不多说了直接贴一个最简单的例子,

    1)将pushlet.jar包导入自己的项目;

    2)将pushlet.properties、sources.properties导入到src目录下

    3)修改web.xml文件如下(url-pattern暂时设置为/pushlet.srv

<servlet-name>pushlet</servlet-name>
    <servlet-class>nl.justobjects.pushlet.servlet.Pushlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>pushlet</servlet-name>
	<url-pattern>/pushlet.srv</url-pattern>
</servlet-mapping>

   4)编写一个java类如下

import java.io.UnsupportedEncodingException;

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

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

	static public class HelloWorldEvent extends EventPullSource {
		@Override
		protected long getSleepTime() {
			return 1000; // 刷新时间
		}

		@Override
		protected Event pullEvent() {
			Event event = Event.createDataEvent("/source/event");// 事件标识
			String s = "你好";
			s = toISO88591(s);
			event.setField("msg", s);// 封装参数
			return null;
		}
	}

	public static String toISO88591(String str) {
		try {
			str = new String(str.getBytes("UTF-8"), "ISO-8859-1");
		} catch (UnsupportedEncodingException ex) {
			ex.printStackTrace();
		}
		return str;
	}

}

   上面有一个中文的处理方法,toISO88591()不然不支持中文。

   还有就是注意Event event = Event.createDataEvent("/source/event");// 事件标识

 

5)编写jsp文件如下<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>index.html</title>
		<meta http-equiv="content-type" content="text/html; charset=UTF-8">
		<script type="text/javascript" src="js/ajax-pushlet-client.js"></script>
		<script type="text/javascript"> 
       		PL._init(); 
       		PL.joinListen('/source/event');//事件标识 在数据源中引用 
       		function onData(event) { 
           		alert(event.get("msg")); 
       		} 
    	</script>
	</head>
	<body>
	test
	</body>
</html>

   PL.joinListen('/source/event');//事件标识 在数据源中引用,注意跟上面的红色部分保持一致。

6)下面说一下web.xml中<url-pattern>的配置问题,查看ajax-pushlet-client.js源码会发现有下面这段代码_getWebRoot: function() {

		/** Return directory of this relative to document URL. */
		if (PL.webRoot != null) {
			return PL.webRoot;
		}
		//derive the baseDir value by looking for the script tag that loaded this file
		var head = document.getElementsByTagName('head')[0];
		var nodes = head.childNodes;
		for (var i = 0; i < nodes.length; ++i) {
			var src = nodes.item(i).src;
			if (src) {
				var index = src.indexOf("lib/ajax-pushlet-client.js");
				if (index >= 0) {
					PL.webRoot = src.substring(0, index);
					break;
				}
			}
		}
		return PL.webRoot;
	},

 注意var index = src.indexOf("lib/ajax-pushlet-client.js");这句话 这个方法就是取webRoot跟路径的,所以<url-pattern>的设置跟这里有关系,还有就是跟你使用ajax-pushlet-client.js的jsp页面有关系,我上面的jsp页面中src="js/ajax-pushlet-client.js"是这样导入js包的,所以我把ajax-pushlet-client.js中的代码改为var index = src.indexOf("js/ajax-pushlet-client.js");取根路径了,大家可以测试一下就明白了。

7)最后启动程序,大家就可以看到每一秒弹出一个“你好”窗口了。

 

 

分享到:
评论
14 楼 dxqrr 2014-04-14  
LZ不厚道,误导我们
13 楼 thewintersun 2013-12-13  
日哦, 没效果啊。
12 楼 vincentedlin 2013-12-10  
哥们,你上传的是pushlet的源码呀,可以上传个demo吗?
11 楼 youmeiyoubeizhanyong 2013-10-15  
这个客户端可以传参数到服务端不?如果能的话,那么服务端如何只发送信息到该客户端?
10 楼 左手边 2013-08-13  
恶魔眼睛 写道
页面没有任何反应。
应该可以啊,这个我是测试成功的例子
9 楼 恶魔眼睛 2013-07-28  
页面没有任何反应。
8 楼 恶魔眼睛 2013-07-28  
毫无效果。毫无效果。
7 楼 zhangyao 2013-01-29  
我想问一下,pushlet的性能怎么样?一般 2C8G的服务器最大支持多大的并发?
6 楼 czltx224 2013-01-24  
597272095 写道
为什么我按照你那样做没效果呢?

是啊,我按照上面的做了,21行那个返回值也改了,可是还是没效果啊
5 楼 bushkarl 2012-12-25  
HelloWorldPlushlet.java
文件第21行 应改成return event,否则运行会报错。
4 楼 cuisuqiang 2012-10-08  
传中文可以进行编码,参考:http://cuisuqiang.iteye.com/blog/1693528
3 楼 597272095 2012-09-12  
为什么我按照你那样做没效果呢?
2 楼 左手边 2012-08-07  
czltx224 写道
这个是长连接吗?

嗯,你可以参照http://www.ibm.com/developerworks/cn/web/wa-lo-comet/
1 楼 czltx224 2012-08-07  
这个是长连接吗?

相关推荐

Global site tag (gtag.js) - Google Analytics