用pushlet框架做消息推送需要注意的几个内容

本文分享了使用 Pushlet 进行信息推送时遇到的问题及解决办法,包括配置、指定对象推送、中文支持等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      最近在用pushlet做推送信息,项目的要求是,需要能达到对某个人的推送。一开始在dwr和pushlet犹豫,后来组长说pushlet轻量级,比较好用,所以就就选择这个。但是在用的过程中出现挺多困难,困扰了很久。特意写出来与大家分享下,希望大伙能少走弯路。本文的内容,有些我是参考网上其他的,当然也有自己总结的。

     首先去官网下载2.0.4这个版本,感觉比较多人用这个。按照给的demo,把ajax-client以及各种配置文件放好,这个网上资料一大把,不细说。

   配好后,在用的时候

  1、注意在前端页面需要配置<base href="<%=basePath%>">basePath这个一定要,要不然会出现错误。特地强调下,pushlet出现错误的时候,很少有错误提示,或者错误不对,只能靠自己断点摸索了。网上说的需要修改ajax-pushlet-client这个文件,我倒是没有。
  2、如果要是对指定对象的推送,要我们手动传入一个userid来替换sessionid。

首先需要修改nl.justobjects.pushlet.core.SessionManager文件

  1. public Session createSession(Event anEvent) throws PushletException {  
  2.         // Trivial  
  3.         //return Session.create(createSessionId());  
  4.         return Session.create(anEvent.getField("userid""visitor"));   
  5.         //return Session.create(createSessionId(), anEvent); 
        } 
这个修改后,重新编译jar包替换原来的jar包。

然后在  ajax-pushlet-client.js ,在此代码后面加上

       // Construct base URL for GET
       var url = PL.pushletURL + '?p_event=' + anEvent;

  1. if (anEvent == 'join' || anEvent == 'join-listen') {    
  2.  url = url + '&userid=' + userid;   

修改这两处后,在你调用pl.init()监听后,要主动传入userid的值。这个就是你指定推送用户的 的id。关于这方面,网上很多内容,不细说。

3、关于中文,这点重点强调下,pushlet 的setfield(key,value)   ,value不能是中文。如果是中文,根本无法传值,前端获取不到,在xml就报空了。当时我这个调试了一天,后来发现的。网上有的也有说,不过很少。如果非要传值,可以加个编码,如URLEncoder.encode,然后在js再decode,也可以。

4、关于key的,不能是纯数字,如果纯数字也是会跟value的错,想我也调试了好几天。

其实这个我所说的,很多网上能看到,只是都是分散的。我个人只是把我遇到的困难都列出来,重点提下,关于源码,很抱歉在公司无法提供,只能把自己还有记忆的写下而已。希望对大家有用

Pushlet 是一个开源的 Comet 框架Pushlet 使用了观察者模式:客户端发送请求,订阅感兴趣的事件;服务器端为每个客户端分配一个会话 ID 作为标记,事件源会把新产生的事件以多播的方式发送到订阅者的事件队列里。 server端向浏览器client发送通知这种通讯模式在J2EE应用中很常见,通常使 Pushlet服务器端Java类UML图 Pushlet服务器端Java类UML图 用采用RMI、CORBA或者自定义TCP/IP信息的applet来实现。这些技术往往由于复杂而产生诸多不利之处:技术难以实现、存在防火墙限制(因为需要打开非HTTP的通讯端口)、需要额外的server开发和维护。并且除了刷新整个页面或者完全采用applet展示内容之外,很难找到别的方法将client端applet的状态和浏览器的页面内容集成在一起。 Pushlet是一种comet实现:在Servlet机制下,数据从server端的Java对象直接推送(push)到(动态)HTML页面,而无需任何Java applet或者插件的帮助。它使server端可以周期性地更新client的web页面,这与传统的request/response方式相悖。浏览器client为兼容JavaScript1.4版本以上的浏览器(如Internet Explorer、FireFox),并使用JavaScript/Dynamic HTML特性。而底层实现使用一个servlet通过Http连接到JavaScript所在的浏览器,并将数据推送到后者。有关JavaScript版本的知识请参看Mozilla开发中心提供的《JavaScript核心参考》和Stephen Chapman编写的《What Version of Javascript》。 这种机制是轻量级的,它使用server端的servlet连接管理、线程工具、javax.servlet API,并通过标准Java特性中Object的wait()和notify()实现的生产者/消费者机制。原则上,Pushlet框架能够运行在任何支持servlet的server上、防火墙的后面。当在client中使用JavaScript/DHTML时,Pushlet提供了通过脚本快速建立应用、使用HTML/CSS特性集成和布局新内容的便利方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值