【已解决】pushlet 多播 打开多个相同的页面进行消息的接受为什么不是每个页面都一样呢?

tianshi1017 2017-08-26 05:01:29
如题。
后台pushlet一个广播的,前台有一个a.jsp接收。当在浏览器中打开a.jsp的时候可正常接收后台广播出来的消息。
重点来了:
然后再打开一个a.jsp页面
继续打开一个a.jsp页面
。。。。
总之就是打开多个a.jsp页面(2~N个),理论上期望的是打开的这N个a.jsp页面在同一时间显示的后台的推送消息都是相同的,
但是,实际上不相同,(表现的状态是: 只要有一个a.jsp页面的消息更新为最新的后,发现其他的几个都是旧的)。如下内容:
某个a.jsp:
pushletCpu!:740
pushletIp!Sat Aug 26 16:51:00 CST 2017:800

另外一个a.jsp:
pushletCpu!:810
pushletIp!Sat Aug 26 16:52:00 CST 2017:810

再另外一个a.jsp
pushletCpu!:820
pushletIp!Sat Aug 26 16:48:00 CST 2017:770

最新的内容正确的应该是
pushletCpu!:820
pushletIp!Sat Aug 26 16:52:00 CST 2017:810
仔细的观察,发现这三个a.jsp页面显示的都不是完全正确的内容,这是为什么呢?
不应该是三个a.jsp页面都是显示的一样的,其和正确内容一致的么?
请大家帮忙分析一下。
下面贴上主要代码:

countIp+=10;
System.out.println("===========pushletIpIp执行了=================="+new Date());
Event event = Event.createDataEvent("/pushletIp");
event.setField("pushletIp", "pushletIp!"+new Date()+":"+countIp);
Dispatcher.getInstance().broadcast(event);


	System.out.println("pushletCpu执行了=================="+new Date());
count+=10;
Event event = Event.createDataEvent("/pushletCpu");
event.setField("pushletCpu", "pushletCpu!"+":"+count);
Dispatcher.getInstance().broadcast(event);


页面:

PL._init();

PL.joinListen('/pushletCpu');
PL.joinListen('/pushletIp');


function onData(event) {

var pushletCpu = event.get('pushletCpu');
$("#cpu").html(pushletCpu);

var pushletIp = event.get('pushletIp');
$("#ip").html(pushletIp);



}
...全文
213 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianshi1017 2017-08-28
  • 打赏
  • 举报
回复
顶起来,,免得沉底了。
李德胜1995 2017-08-28
  • 打赏
  • 举报
回复
pushlet是comet长连接服务器推送技术的一个框架吧?没用过。。。怎么不用webSocket呢???
tianshi1017 2017-08-28
  • 打赏
  • 举报
回复
自己解决了。设置了一个随机变量,只要打开一个页签,则随机生产一个userId,这样属于这个页面的广播信息就不会被别人取走。 var userId = Math.random().toString(36).substr(2); PL.userId= userId; PL._init();
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特性集成和布局新内容的便利方法。

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧