サーバープッシュ——PushLetの応用


詳細
背景:最近、会社は1つの設備の監視の方面のプロジェクトをする必要があって、フロントはExtJsを採用して、バックグラウンドはSSHフレームワーク+SNMP技術を採用して実現します.しかし、設備モニタリングでは、バックグラウンドでリアルタイムにページと情報伝達を行う必要があることが多いため、普段はフロントからバックグラウンドにリクエストを送信し、情報を取得しただけで、バックグラウンドからフロントにメッセージを送信したことはありません.度娘、谷兄に聞くしかなくて、“サーバーのプッシュ技術”を知って、更にPushLetのこの東を知って、それからネット上で資料をかき集めることを始めて、しかしネット上の資料はすべてあまり悪くなくて、例は普遍的にIMの即時チャットの実現に似ています.それでも、これらの資料は私に大きな助けを与えてくれて、ここでそれらの資料の貢献者に感謝します(オリジナルでも転載者でも^^)!
よし、くだらないことは言わないで、翠花、前の例!
 
Step 1まずpushlet開発パッケージを取得する
             http://sourceforge.net/projects/pushlets/files/pushlets/2.0.4/pushlet-2.0.4.zip/download
ダウンロードして解凍し、libの下のpushletを取得します.jar  pushletclient.JAr、およびwebappspushletWEB-INFclasses下のlog 4 j.properties  pushlet.properties   sources.properties.
 
Step-2 srcディレクトリにlog 4 jを追加する.properties、pushlet.properties、 sources.properties、後でsourcesをpropertiesは変更と構成を行います.
 
Step-3 Webの構成xmlはWeb.xmlには次の内容が含まれています.
 

		pushlet
		nl.justobjects.pushlet.servlet.Pushlet
		1
	
	
	
	
		pushlet
		/pushlet.srv
	

     
Step-4独自のイベントソースを作成する
package com.fornew;

import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Random;

import nl.justobjects.pushlet.core.Event;
import nl.justobjects.pushlet.core.EventPullSource;

public class PushLet implements Serializable{
	private static final long serialVersionUID = 1L;

	static public class PushEvent extends EventPullSource{
		public int i = 1;
		@Override
		protected long getSleepTime() {
			return 3000; //      (getSleepTime)
		}

		@Override
		//    (pullEvent)  ,       pullEvent()     ,          。
		protected Event pullEvent() {
			Event event =Event.createDataEvent("/fornew/push"); //   jsp  "  "
			StringBuffer str = new StringBuffer("   【").append(i++).append('】');
			str.append(this.getRandomStr());
			try {
				//  ,           ,     “  ”
				event.setField("hw",new String(str.toString().getBytes("UTF-8"), "ISO-8859-1"));
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			} 
			return event;
		}
		//     ,      
		public String getRandomStr(){
			Random random = new Random();
			return Math.abs(random.nextInt())+"";
		}
	}
}

 
Step-5上に入れるsources.propertiesでのイベントソースの構成
元の構成は以下の通りです(htmlコードではありません):
source1=nl.justobjects.pushlet.test.TestEventPullSources$TemperatureEventPullSource
source2=nl.justobjects.pushlet.test.TestEventPullSources$SystemStatusEventPullSource
source3=nl.justobjects.pushlet.test.TestEventPullSources$PushletStatusEventPullSource
source4=nl.justobjects.pushlet.test.TestEventPullSources$AEXStocksEventPullSource
source5=nl.justobjects.pushlet.test.TestEventPullSources$WebPresentationEventPullSource
source6=nl.justobjects.pushlet.test.TestEventPullSources$PingEventPullSource

削除またはコメントを削除し、自分のイベントソースに追加します(htmlコードではありません).
 
source1=com.fornew.PushLet$PushEvent

 
Step-6 indexを作成する.jspページは次のとおりです.
 






	
		
		PushLet-  
		
		
		
		
		PL._init();
		PL.joinListen('/fornew/push');
		function onData(event){
		var str = event.get("hw");
		var elId = document.getElementById('wxh');
		//       
		var getColor = function(){
		var r = Math.ceil(Math.random()*256).toString(16);
		r = r.length==1?'0'+r:r;
		return r;
		}
		var color = '#';
		color =(color + getColor() + getColor() + getColor());
		//       ,    
		elId.value = str;
		elId.style.color=color;
		}
		
	
	
	

  
注意:pushletのjsスクリプト(ajax-pushlet-client.js)を導入する必要があります.
その中で重要なのはこのJavaScriptコード、PL.Init()、PL.joinListen(""")は固定用法であり、必ず書かなければならず、順序が固定されている.joinListenの「文字列」は、カスタムイベントソースのcreateDataEventの「文字列」に対応し、function onData(event)メソッドも固定用法、pushletスクリプトのページ応答関数をカスタマイズします.
 
		
		PL._init();
		PL.joinListen('/fornew/push');
		function onData(event){
		var str = event.get("hw");
		var elId = document.getElementById('wxh');
		//       
		var getColor = function(){
		var r = Math.ceil(Math.random()*256).toString(16);
		r = r.length==1?'0'+r:r;
		return r;
		}
		var color = '#';
		color =(color + getColor() + getColor() + getColor());
		//       
		elId.value = str;
		elId.style.color=color;
		}
		

      
 
それ以来、プロジェクトをコンパイル、配置し、ブラウザでそのプロジェクトにアクセスし、バックグラウンドJavaプログラムは3秒おきにindexに向かう.jspはメッセージを1回プッシュします.
 
参照先:http://edwin492.iteye.com/blog/1124751
個人情報:
1、関連資料の貢献者に対する尊重を表すために、転載、参考内容はすべて特殊な説明があり、出典【URL】を添付する.
2、知識面、技術能力が限られているため、内容は主に応用に向いており、原理性についての紹介はあまりありません.
また、正しい点がなければ、多くのネットユーザーの「友好」の指摘を望んでいると述べた.
 
  • PushLet_A.rar (16.9 KB)
  • 説明:ソースコード(MyEclipseのインポートが利用可能)
  • ダウンロード回数:166