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

       PushLet_B是在前面PushLet_A代码的基础上改写的,其作用是将推送动作抽离出来,因此在实际使用过程中,需要推送的信息的产生具有不确定性,有可能3分钟设备会出一个问题,也有可能一天都不出问题。

       在写该测试示例之前,本人范了一个严重且低级的错误,就是直接通过一个main函数调用pullEvent()方法来进行测试,刚开始的时候以为直接调用pullEvent()方法即可,但却一直报Dispatcher.getInstance()为空,后来通过分析Puslet.java 源码发现,推送的实现必须给予Web容器的支持,因为仅仅通过main()函数直接调用pullEvent()方法仅仅是单纯的方法调用而已,没有通过Web容器的参与,无法获取Session等信息,所以不能正确获取对象。
     因此该示例实际为一标准Servlet,其中pullEvent()方法中比较关键的代码为:

     若不进行转码,在进行首次推送时会将页面与服务器的链接打断。

 

Event event = Event.createDataEvent(subject);//获取监听事件源(对象)
event.setField("hw",new String(str.getBytes("UTF-8"), "ISO-8859-1"));//转码
Dispatcher.getInstance().multicast(event);//实现推送动作

 
     编译、部署该示例,运行index.jsp页面后,另开一页面“手动”请求PushServlet即可出现和PushLet_A示例同样的运行效果(为了便于演示,该示例内部依然写了一个死循环)。

 

               个人说明:

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

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

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

  

你可能感兴趣的:(Pushlet,服务器推送)