`
nowwondering
  • 浏览: 19933 次
  • 来自: 深圳
社区版块
存档分类
最新评论

pushlet_向在线的特定用户发送消息的单线程应用

阅读更多

第一步:

 

1.新建立web项目,将pushlet目录webapps\pushlet\WEB-INF\classes中的pushlet.properties和sources.properties文件拷贝到src目录下

 

2.将pushlet目录src中的包拷贝到src目录下

 

3.上一步添加完后,会出现错误,将log4j的包拷贝到项目的lib目录中就可以了

 

4.上述步骤完成后,项目的结构如下图所示:

 

第二步:

 

1.修改web.xml文件,添加如下代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>pushlet_userId</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	<servlet>
		<servlet-name>pushlet</servlet-name>
		<servlet-class>nl.justobjects.pushlet.servlet.Pushlet</servlet-class>
		<load-on-startup>3</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>pushlet</servlet-name>
		<url-pattern>/pushlet.srv</url-pattern>
	</servlet-mapping>
</web-app>

 

2.修改ajax-pushlet-client.js文件,在最开始的位置添加 userId:''属性 , _doRequest函数中的var url = PL.pushletURL + '?p_event=' + anEvent;语句,在后面添加如下代码片段:

if (anEvent == 'join' || anEvent == 'join-listen') {   
            url = url + '&userId=' + PL.userId;  
        }

 

3.修改index.jsp,代码如下所示:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="ajax-pushlet-client.js"></script>
<script type="text/javascript">
	PL.userId = 'twoseven';
	PL.joinListen('hwpushlet');
	function onData(event) {
		document.getElementById("number").innerHTML += event.get("number");
	}
</script>
</head>
<body>
	<div id="number"></div>
</body>
</html>

 

4.修改pushlet源代码,找到nl.justobjects.pushlet.core.SessionManager类,修改代码为如下结构:

	/**
	 * Create new Session (but add later).
	 */
	public Session createSession(Event anEvent) throws PushletException {
		// Trivial
		//return Session.create(createSessionId());
		return Session.create(anEvent.getField("userId", "vistor"));
	}

 

5.添加Pushlet推送类,代码如下:

package com;

import java.util.Random;

import javax.servlet.http.HttpServlet;

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

public class PushletServ extends HttpServlet {
	private static final long serialVersionUID = 1L;

	static public class HwPushlet extends EventPullSource {
		@Override
		protected long getSleepTime() {
			return 5000;
		}

		@Override
		protected Event pullEvent() {
			Event event = Event.createDataEvent("hwpushlet");
			Session[] sessions = SessionManager.getInstance().getSessions();
			if (sessions.length > 0) {
				StringBuilder str = new StringBuilder("");
				for (int i = 0; i < sessions.length; i++) {
					if (!sessions[i].getId().equals("twoseven"))
						continue;
					if (!str.toString().equals(""))
						str.append(",");
					str.append("'" + sessions[i].getId() + "'");
				}
				if (!str.toString().equals("")) {
					event.setField("number", ""+(new Random().nextInt(10)));//只向userId为twoseven的用户发送信息
				}
			}
			return event;
		}

	}
}

 

6.修改sources.properties文件为下图所示:

# Define Pull Sources here. These classes must be derived from
# nl.justobjects.pushlet.core.EventPullSource
# Inner classes are separated with a $ sign from the outer class. 
source1=com.PushletServ$HwPushlet

 

7.启动服务器,在浏览器中输入地址,可以看到如下图所示的结果,第一个红线为服务器返回的结果(动态更新),第二个红线是浏览器的请求:

 

参考资料:

1.Pushlets官网:http://www.pushlets.com/

2.长连接_百度百科:http://baike.baidu.com/view/2831907.htm

3.利用Ajax实现长连接(模拟推送) (1) - liuhh - 博客园:http://www.cnblogs.com/liuhh/archive/2011/05/12/2044230.html

4.使用 Java 实现 Comet 风格的 Web 应用:http://www.ibm.com/developerworks/cn/web/wa-cometjava/

5.Comet:基于 HTTP 长连接的“服务器推”技术:http://www.ibm.com/developerworks/cn/web/wa-lo-comet/index.html

6.浅析Comet技术在Java Web实时系统开发中的应用:http://syue.com/Paper/Computer/App/245823.html

7.Pushlet 推送数据库消息到前台指定用户:http://blog.csdn.net/dataminer_2007/article/details/7653283 

  • 大小: 9.7 KB
  • 大小: 21.1 KB
分享到:
评论
2 楼 asliping 2013-02-03  
这没有实现向特定用户发送吧?
看着好像还是群发
1 楼 leixm 2012-09-21  
你这个判断让效率降低好多,为什么不修改EventPullSource 中的run(),将Dispatcher.getInstance().multicast(event);改成 unicast(Event event, String aSessionId) 呢?

相关推荐

    pushlet_向所有在线用户发送消息的单线程应用

    NULL 博文链接:https://nowwondering.iteye.com/blog/1605158

    pushlet_2.0.3_源码分析_服务器端__

    心跳机制用于在阻塞超时后向客户端发送消息,保持会话活跃。 **协议服务** Pushlet 提供以下协议服务: 1. **join** - 开始会话 2. **leave** - 结束会话 3. **subscribe** - 订阅主题 4. **unsubscribe** - 取消...

    基于pushlet_chat技术的群聊实现 解决了中文乱码问题

    Pushlet_Chat是一种实时通信技术,常用于构建即时消息系统(IM),尤其在B/S架构中广泛应用。它基于HTTP长连接,通过服务器向客户端推送数据,实现了低延迟、高效能的信息传输。在这个项目中,我们看到的是一个针对...

    pushlet定时向页面发送消息demo

    这个"pushlet定时向页面发送消息demo"是一个实例,展示了如何使用Pushlet库来实现定时向用户页面发送更新信息。 首先,理解Pushlet的基本工作原理。Pushlet采用了一个叫做Comet的技术,Comet是长连接的一种实现方式...

    pushlet定时向前台推送消息

    在"pushlet定时向前台推送消息"的场景中,Pushlet被用来创建一个能够定时发送消息到前端的应用。这个应用可能包含以下几个关键组成部分: 1. **服务器端组件**:Pushlet服务器端通常会有一个或多个服务,它们负责...

    Pushlet点对点发送消息

    通过上述知识点的学习和实践,你可以掌握如何使用Pushlet实现高效的点对点消息传递,这对于开发实时协作工具、在线游戏、聊天应用或者任何需要实时数据更新的系统都非常有用。在提供的"mypushlet"文件中,可能包含了...

    pushlet实现简单的用户聊天

    Pushlet Client则运行在用户的浏览器或应用程序中,用于建立与服务器的持久连接,并接收来自服务器的消息。 首先,要理解Pushlet的工作原理。当客户端(例如,一个Web浏览器)与Pushlet Server建立连接后,服务器会...

    pushlet简单配置应用

    Pushlet库的核心功能是实现实时的服务器向客户端推送数据,而无需客户端频繁发起请求,这大大提高了网络应用的效率和用户体验。以下是对Pushlet配置应用的详细解释: 1. **引入Pushlet.jar**:首先,你需要在你的...

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

    - **API 推送**:通过编程方式调用 Pushlet 提供的 API,主动向特定客户端或所有客户端发送消息。这种方式更加灵活,可以根据业务需求随时触发推送。 2. **准备工作**: - **JSP 页面设置**:在 JSP 页面中添加 `...

    PUSHLET即时通讯工程实例

    Tomcat的webapps目录是放置Web应用的默认位置,将本实例的压缩包解压后,直接将整个项目文件夹放入webapps下,例如命名为`pushlet_example`。 **项目结构** 解压后的项目包含以下主要文件和目录: 1. **index.jsp*...

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

    为了更好地实践PushLet,可以下载提供的源码包(PushLet_A),导入MyEclipse环境中进行编译和运行。通过调试和修改代码,可以进一步熟悉PushLet的工作流程,也可以根据项目需求对其进行定制。 总的来说,PushLet是...

    使用Ext Pushlet 实现的点对点聊天功能

    Ext.PUSHLET_URL='piccUtil'; // 发送消息的地址 Ext.fcontent='fcontent'; // 显示窗口或有新消息时, 显示好友ID的区域 Ext.showonLine='showonLine'; // 好友列表显示区 Ext.jsq='jsq'; // 好友列表计数器 ...

    pushlet 扩充,sessionid 采用userid

    在sessionid采用userid后,服务端可以根据用户的标识来区分不同的连接,当有新消息或者特定信息需要发送给特定用户时,可以通过这个标识找到对应的连接,从而实现个性化推送。 标签"pushlet MI 消息发送"表明...

    pushlet

    在实际应用中,Pushlet技术可以用于实时股票更新、聊天室、在线游戏、协作工具等多种场景。开发者可以通过解压提供的pushlet-2.0.3压缩包,获取源代码、文档和示例,以便更好地理解和集成Pushlet到自己的项目中。 ...

    Pushlet服务向

    在Web应用中,Pushlet服务通常用于实现数据的即时更新,比如股票报价、聊天室消息、在线游戏状态更新等场景,极大地提高了用户体验。 Pushlet的核心概念是“订阅/发布”模型,即Subscriber(订阅者)和Publisher...

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

    由服务端推送消息至客户端(或指定id的客户端),代码中没有用官网的jar文件,而是用的源码,做了一定的修改,实现了每个客户端都可以自定义id,然后服务端可以向指定id客户端推送消息。 不多说了,先部署启动工程 ...

    使用Ext Pushlet 实现的点对点聊天功能最新

    Ext.PUSHLET_URL='piccUtil'; // 发送消息的地址 Ext.fcontent='fcontent'; // 显示窗口或有新消息时, 显示好友ID的区域 Ext.showonLine='showonLine'; // 好友列表显示区 Ext.jsq='jsq'; // 好友列表计数器 ...

    pushlet的JAR包和文档

    6. **pushlet_文档.doc**:这可能是一个详细的Pushlet使用手册或开发指南,包含了Pushlet的安装、配置、API使用等方面的指导。 7. **pushlet_test**:这个文件可能是Pushlet的测试脚本或者测试案例,用于验证...

    Pushlet后台往jsp前台推送消息实例

    总的来说,Pushlet提供了一种简单的方式来实现在Web应用中从后台向前端推送消息,这对于实时聊天、股票更新、在线游戏等场景非常有用。通过理解Pushlet的工作原理和实践操作,开发者可以有效地提升Web应用的交互体验...

Global site tag (gtag.js) - Google Analytics