使用轻量级Pushlets网页推送组填坑:解决中文传输失败、网页无法正常初始化的问题

Pushlets是一个开源的基于Java Servlet的开发的轻量级网页消息推送组件,这个组件最后更新时间在2015年,在后面未见有更新,因此发现很多问题都未及时解决。 在使用过程中,常出现的问题有中文消息传输问题、以及在网页中初始化组件失败的问题。

  • 解决中文发送数据失败的问题,导致SessionManager的Session被removed Pushlets组件对中文传输支持一直都有问题。

为了解决这个问题,只需要在后端对需要发送的消息进行一次UrlEncoder编码。

	protected void sendMsg(String userType, String userId, String msg) {
		try {
            //对需要传输的消息,采用URLEncoder utf-8进行编码操作
			msg = URLEncoder.encode(msg,"utf-8");
		} catch (UnsupportedEncodingException e) {
			logger.error("不支持的编码格式:",e);
			e.printStackTrace();
		}
		createSubject(userType + "/" + userId, msg);
	}
	
	protected void createSubject(String subject, String message){
		Event event = Event.createDataEvent(subject);
		logger.info(event.toString());
		event.setField("message", message);
		Dispatcher dispatcher = Dispatcher.getInstance();
		if (dispatcher == null) {
			logger.info("dispatcher为null");
		}
		logger.info(dispatcher.toString());
		dispatcher.multicast(event);
		
	}

在前端接收到消息后,对消息进行解码操作,就能解决中文传输的问题。

function onData(event){
	//console.log(event);
	var message = event.get("message");
	//对消息进行解码操作,这样就可以正常显示中文内容
	message = decodeURIComponent(message);
	//console.log(message);
	var jsonMsg = JSON.parse(message);
	var msg = jsonMsg.msg;
	layer.msg(msg);
	//counter = counter + 1;
	//setMsgAlert(jsonMsg);
}
  • 解决网页初始化Pushlets组件不成功的问题

为了解决这个问题,可以在页面中添加方法,再次调用方法初始化一次Pushlets的方法即可。

	//检测Pushlets通讯组件是否初始化完成
	//如果未初始化成功,重新启动
	var plCounter = 0;
	function reloadPushlet(){
		var plState = PL.state;
		console.log(PL.STATE_LISTENING);
		if(plState != PL.STATE_LISTENING){
			var timer = setInterval(function(){
				console.log("Pushlet未正常启动监听,重新调用启动监听!"+plCounter);
				${loadPushlet}
				plCounter = plCounter + 1;
				if(plCounter > 2){//最多执行3次
					 clearInterval(timer);
				}
			},2000);
		}
	}
	
	reloadPushlet();
	

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章