使用輕量級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();
	

 

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