- 浏览: 171681 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
lb10001:
不错,正好需要这个知识
img src的特殊使用 -
923080512:
lz下面这句话写错了: Read Uncommitted ...
Spring事务隔离级别和传播行为 -
hucc:
good
img src的特殊使用 -
恶魔眼睛:
经常出现:
WARN | S-0:0:0:0:0:0:0:1 ...
pushlet 学习二 -
gaboolic:
<div class="quote_title ...
pushlet 学习二
pushlet 的官网上有很多例子,可以参见http://www.pushlets.com/pushlet/examples/pushlet.html ,其中有个webim的例子,这个其实是个聊天室的功能,如果改为点对点的聊天方式的话怎么做呢?
大体上有两种方式:
一 修改客户端js,拿到消息后判断接受者标示和当前用户是否一致,不一致则不显示。
二 是修改pushlet源码,仔细查看源码可以知道,在SessionManager.java 里面 createSession 方法,是以随机数生成session id的,一个随机数的session id显然无法满足精确查找的要求,我们需要改写这段代码,例如我就将session id改为登录用户的loginName,loginName以url的参数形式传递过来,将原来的方法改为:
/** * Create new Session (but add later). */ public Session createSession(Event anEvent) throws PushletException { // Trivial //return Session.create(createSessionId()); 原先的代码,生成随机数的session id return Session.create(anEvent.getField("uid")); }
再查看 Controller.java 中的doPublish方法
protected void doPublish(Command aCommand) { Event responseEvent = null; try { String subject = aCommand.reqEvent.getField(Protocol.P_SUBJECT); if (subject == null) { // Return error response responseEvent = new Event(E_NACK); responseEvent.setField(P_ID, session.getId()); responseEvent.setField(P_REASON, "no subject provided"); } else { aCommand.reqEvent.setField(P_FROM, session.getId()); aCommand.reqEvent.setField(P_EVENT, E_DATA); // Event may be targeted to specific user (p_to field) String to = aCommand.reqEvent.getField(P_TO); if (to != null) { Dispatcher.getInstance().unicast(aCommand.reqEvent, to); } else { // No to: multicast debug("doPublish() event=" + aCommand.reqEvent); Dispatcher.getInstance().multicast(aCommand.reqEvent); } // Acknowledge responseEvent = new Event(E_PUBLISH_ACK); } } catch (Throwable t) { responseEvent = new Event(E_NACK); responseEvent.setField(P_ID, session.getId()); responseEvent.setField(P_REASON, "unexpected error: " + t); warn("doPublish() error: " + t); t.printStackTrace(); } finally { // Always set response event in command aCommand.setResponseEvent(responseEvent); } }
其中的
String to = aCommand.reqEvent.getField(P_TO); if (to != null) { Dispatcher.getInstance().unicast(aCommand.reqEvent, to); }
表明只要在发送消息的时候指定要发送的人(session id)就会单独发送给那个人,而不会以广播形式发送。
这样只需修改pushlet的 session id的生成方式,在发送消息是指定接收者的session id 即可实现消息的定点发送。
评论
7 楼
恶魔眼睛
2013-08-04
经常出现:
WARN | S-0:0:0:0:0:0:0:1[kicewaqoqa]: [Subscriber] not alive for at least: 45000ms, leaving...
INFO | SessionManager: Sun Aug 04 16:06:16 CST 2013 kicewaqoqa at 0:0:0:0:0:0:0:1 removed
是什么问题。把回调方法去掉就没有这个问题。。奇怪
WARN | S-0:0:0:0:0:0:0:1[kicewaqoqa]: [Subscriber] not alive for at least: 45000ms, leaving...
INFO | SessionManager: Sun Aug 04 16:06:16 CST 2013 kicewaqoqa at 0:0:0:0:0:0:0:1 removed
是什么问题。把回调方法去掉就没有这个问题。。奇怪
6 楼
gaboolic
2013-07-14
ganqing1234 写道
zhangyao 写道
return Session.create(anEvent.getField("uid"));
是指我们在JS里发布登录的时候,将UID传进去吗?
PL.publish(‘login’,'name='+name+'&'+'msg='+msg+'&'+'userId='+user.getId());
这样的方式?
是指我们在JS里发布登录的时候,将UID传进去吗?
PL.publish(‘login’,'name='+name+'&'+'msg='+msg+'&'+'userId='+user.getId());
这样的方式?
应该是的 好久没有碰这个了,不记得了
看源码是每次publish都会重新get一次请求
在servlet里每次把所有参数放到Event
所以每次PL.publish 要把uid和p_to 都写进去
5 楼
gaboolic
2013-07-14
zhangyao 写道
return Session.create(anEvent.getField("uid"));
是指我们在JS里发布登录的时候,将UID传进去吗?
PL.publish(‘login’,'name='+name+'&'+'msg='+msg+'&'+'userId='+user.getId());
这样的方式?
是指我们在JS里发布登录的时候,将UID传进去吗?
PL.publish(‘login’,'name='+name+'&'+'msg='+msg+'&'+'userId='+user.getId());
这样的方式?
看了半天源码,是把p_to传进去 p_to是session id
4 楼
ganqing1234
2012-11-29
zhangyao 写道
return Session.create(anEvent.getField("uid"));
是指我们在JS里发布登录的时候,将UID传进去吗?
PL.publish(‘login’,'name='+name+'&'+'msg='+msg+'&'+'userId='+user.getId());
这样的方式?
是指我们在JS里发布登录的时候,将UID传进去吗?
PL.publish(‘login’,'name='+name+'&'+'msg='+msg+'&'+'userId='+user.getId());
这样的方式?
应该是的 好久没有碰这个了,不记得了
3 楼
zhangyao
2012-10-31
return Session.create(anEvent.getField("uid"));
是指我们在JS里发布登录的时候,将UID传进去吗?
PL.publish(‘login’,'name='+name+'&'+'msg='+msg+'&'+'userId='+user.getId());
这样的方式?
是指我们在JS里发布登录的时候,将UID传进去吗?
PL.publish(‘login’,'name='+name+'&'+'msg='+msg+'&'+'userId='+user.getId());
这样的方式?
2 楼
ganqing1234
2010-11-08
pushlet 提供的js里有方法的,如:
p_publish('/chat', 'action', 'enter', 'nick', ALERT_MSG.nick, 'nickName', escape(ALERT_MSG.nickName));
用escape转下就好
p_publish('/chat', 'action', 'enter', 'nick', ALERT_MSG.nick, 'nickName', escape(ALERT_MSG.nickName));
用escape转下就好
1 楼
Tomzheng
2010-11-04
js怎么传参数过去?好多特殊符号要处理.受不了.
发表评论
-
《how tomcat works》读书笔记
2012-02-09 15:39 1520一 简单web服务 客户 ... -
Xpath使用,从 Java 程序中查询 XML
2011-12-14 09:45 1469转自:http://www.ibm.com/de ... -
从google code获取源码
2011-10-14 16:03 1879最近想学习python,找到了jaikuengine项目,一个 ... -
CXF几种客户端调用性能
2011-09-21 12:26 8120转自:http://blog.csdn.net/li ... -
java 路径、className.class.getResourceAsStream()、ClassLoader.getSystemResourceAsStr
2011-09-17 15:34 0className.class.getResourceAs ... -
java classLoader 体系结构
2011-09-17 15:27 1009java classLoader 体系结构 发表于:20 ... -
Jar命令 Manifest.mf的用法
2011-08-02 16:27 2228转自: http://hi.baidu.com/echo ... -
Java Http连接中(HttpURLConnection)中使用代理(Proxy)及其验证(Authentication)
2011-07-28 14:45 6156转自: http://blog.csdn.net/red ... -
白痴理解的SOAP/Web Service/WSDL关系
2011-07-27 17:01 1277转自: http://www.cnblogs.com/z ... -
JNDI 介绍
2011-04-09 20:12 1606转自http://blog.csdn.net/zhao ... -
Nutz源码之 Ioc 加载
2011-01-30 15:09 0Ioc 即为控制反转,放在spring里面叫 依赖注入,其实就 ... -
nutz源码 mvc 之 视图解析
2011-01-27 11:36 3481nutz的视图主要是通过con ... -
nutz源码 mvc 之 url与controller 映射
2011-01-22 15:57 2723mvc框架的一个重要的作用就是根据用户的url请求,来调用相应 ... -
nutz源码之aop实现
2011-01-10 10:13 0jjj -
pushlet 学习三 跨域实现
2010-11-02 20:14 0pushlet 的 ajax.js 是以ajax 轮询来实现 ... -
利用slor实现索引查询
2009-06-19 10:43 3669项目里有一个查询模块,就是从特定的ftp站点扫描,然后利用so ... -
java 反射机制
2009-02-07 15:01 0RTTI(运行时类型检查)同reflection的真正区别在于 ... -
servlet的session管理
2009-01-09 14:53 1862在servlet里调用httpsession方法是 reque ... -
Spring--quartz中cronExpression配置说明
2008-12-12 13:48 1122Spring--quartz中cronExpression配置 ... -
java volatile关键字
2008-12-01 16:46 1356最近看LumaQQ的源码发现一个volatile(中文意思是“ ...
相关推荐
本篇内容主要围绕"Pushlet学习(二) -- Pushlet CookBook部分翻译 + 注释"进行展开,将对Pushlet的工作原理、核心组件以及如何使用Pushlet进行编程进行深入讲解。 1. Pushlet简介: Pushlet是基于HTTP的 Comet 模式...
在IT行业中,Pushlet是一种基于Java的推送技术,主要用于实现实时的数据传输,尤其是在Web应用中创建...通过学习和实践"pushlet实现简单的用户聊天",开发者可以掌握这种技术,并将其应用于各种复杂的实时交互应用中。
【Pushlet服务器推技术】是一种实时通信技术,主要用于构建...在压缩包文件“pushlet”中,可能包含了实现Pushlet技术的源代码、配置文件和示例应用,供开发者学习和参考,以便在自己的项目中集成和使用Pushlet服务。
2. **配置文件**:如XML配置文件,可能包含了PushLet服务器的配置信息,例如端口号、安全设置等。 3. **库文件**:jar包,包含了PushLet框架和其他依赖的第三方库,比如可能包含Jetty(一个轻量级的HTTP服务器和...
2. **css**:存放CSS样式文件,用于定义页面的布局和视觉效果。 3. **homepage**:可能包含首页或引导页的资源文件。 4. **images**:存储项目中使用的图像资源。 5. **META-INF**:包含项目的元数据,如MANIFEST...
通过这个小例子,你可以直观地了解Pushlet框架的工作流程,并学习如何在自己的项目中集成和使用Pushlet。 **总结** Pushlet框架为Java开发者提供了一种实现服务器到客户端实时数据推送的有效工具,通过克服HTTP的...
通过上述知识点的学习和实践,你可以掌握如何使用Pushlet实现高效的点对点消息传递,这对于开发实时协作工具、在线游戏、聊天应用或者任何需要实时数据更新的系统都非常有用。在提供的"mypushlet"文件中,可能包含了...
2. **Pushlet白皮书**:这是一份关于Pushlet的详细介绍文档,可能涵盖了其设计原则、工作原理、使用方法以及优点等内容。白皮书分为英文版和中文版,方便不同语言背景的读者理解。 3. **源码分析**:"pushlet 2.0.3...
2. **Pushlet框架**:深入研究Pushlet框架的架构和工作流程,了解它如何处理连接、订阅和发布事件,以及如何支持多线程和并发。 3. **Java编程**:由于Pushlet是用Java编写的,因此掌握基本的Java语法和面向对象...
通过研究和运行这个demo,开发者可以学习到如何在Java环境中实现服务器推送,理解长连接的工作原理,以及如何处理轮询和非轮询的推送策略。这对于开发实时Web应用,特别是那些需要即时数据更新的场景,是非常有价值...
通过这个Demo,你可以学习到Pushlet的基本用法,理解服务器推送的实现机制,并为自己的实时Web应用打下基础。然而,Pushlet是较早的推送技术,现在已经有更多先进的解决方案,如WebSocket、Server-Sent Events (SSE)...
通过学习和运行这个示例,你可以更好地理解Pushlet的工作机制,并能将其应用于自己的项目中,实现服务器定时向页面推送消息的功能。在实际使用时,还可以根据需求进行定制和优化,例如,添加错误处理和日志记录,...
【服务器推送技术——PushLet应用详解<一>】 在当今的互联网应用中,实时性成为了不可或缺的需求,...通过学习和应用PushLet,开发者可以快速构建出具有实时功能的Web应用,提升用户体验,满足现代互联网应用的需求。
- **Pushlet CookBook**:《Pushlet学习(二) -- Pushlet CookBook部分翻译 + 注释.htm》可能是对Pushlet使用手册的中文译文,包含了一些基础用法和实例,注释提供了更直观的理解,帮助开发者快速上手。 3. **发布...
【推送技术】 推送技术是Web开发中的一种高级机制,它允许服务器主动向...通过这个例子,开发者可以学习到如何构建和部署一个能够进行服务器端数据推送的Web应用,这对于需要实时交互的系统设计具有重要参考价值。
通过学习和运行示例,可以掌握如何创建推送订阅、发布消息、以及如何在J2ME和JAVA WEB环境中集成Pushlet。 六、社区支持与文档 作为一个开源项目,Pushlet拥有活跃的开发者社区,提供了详细的文档和示例,用户可以...
标题中的“pushlet”是指Pushlet,一种基于Comet技术的服务器推送机制。...在“pushlet_向在线的特定...通过研究提供的源码和工具,开发者可以学习如何构建一个简单的实时消息推送系统,特别是针对特定在线用户的推送。
"Pushlet聊天工具"是一个基于特定技术实现的通信软件,主要功能是提供实时的信息传递服务。根据提供的标签“源码”和“工具”,我们可以推断这个压缩包可能包含了一个聊天工具的源代码,用于帮助开发者理解和学习...
2. **保持连接**:Pushlet Server接收到请求后,不会立即返回响应,而是保持连接打开状态,等待服务器端有新的数据准备推送。 3. **数据推送**:当服务器端有新数据可用时,Pushlet Server会将数据封装成HTTP响应,...
【Pushlet简单应用小结】 Pushlet是一种基于Java的实时数据推送技术,它允许服务器主动向客户端推送数据,而不需要...通过学习Pushlet,开发者可以更好地掌握服务器推送的概念,为构建高效的实时Web应用打下基础。