オブザーバーモードオンライン版:サブスクリプション-モデルのオンラインモデルの公開

4376 ワード

オブザーバーモードオンライン版:サブスクリプション-モデルのオンラインモデルの公開
これまでオブザーバーモード(Observer)はサブスクリプション・パブリケーション・モードとして理解されてきたが、より理解しやすいかもしれない.現実のブログRSSカスタマイズ(Google pubsubhubbubが登場しない以前は、クライアントは受動的にデータを引っ張り、PULLモード)であり、クライアントがアクティブなタイミングでポーリングする必要がある.Google PUBSUBHUBBUBプロトコルの登場は、RSSが積極的にプッシュするプロトコルであり、非常にリアルタイムで、公開-購読の最良の典型である.
観察者モードの詳細な定義と関連理論は、「設計モード」を参照して、よく説明されています.
本文は1つのオンラインバージョンの購読-発表を持ってきて、ユーザーは1篇の博文を追加して、すべての購読者はすぐに通知を得ることができて、自発的に方式をプッシュして、システムの大量の無意味な要求を避けました.PUBSUBHUBBUBプロトコルの味は少しありますが、実践まではまだまだ足りない、プレゼンテーションです.
このプレゼンテーションシミュレーションのシーンは,特定のブロガーに関心を持つすべての購読者が新しいブロガーの発表後の瞬間に通知を得ることができることである.ブログの公開からすべての購読者に通知するまで、ミリ秒で計算することができます(理想的には、サーバのパフォーマンスが強く、ネットワークがよく、アルゴリズムが良いなど).ただし、ここでの購読者には制限があり、コンテンツ・パブリッシャー・サーバからコールバックできるURLアドレスが必要です.そうしないと、購読者にリアルタイムで通知できません.ここで強調するのは、コンテンツパブリッシャサーバによってアクセスできることです.プレゼンテーションシミュレーションのシナリオは,1つのマシン上の複数のサイト間で行い,同じローカルエリアネットワークの他の環境やネットワーク環境でも理論的に可能である.
サブスクライバを追加する必要があります.
キャンセルする場合は、手順が同じで、致死的には「キャンセル」を選択すればよい.
 
このフォームは他の購読者サイトの下に置くことができますが、FORMのURLアドレスが正しいだけです.
サイトのトップページにアクセスすると、すべての購読者のコールバックアドレスが表示されます.
購読者ができたら、ブログを追加して、私たちの購読者をテストする必要があります.
送信ボタンをクリックすると、各サイトの端末の下に表示されます.
プレゼンテーションのために、subscribeOneとsubscribeTwoの2つのサブスクライバサイトを定義し、取得したデータを表示し、取得したデータをディスクに永続化します.
次に、プライマリ・サイトのいくつかのコードを見て、まず伝統的な意味でのオブザーバー・モードを見てみましょう.
観察が必要なオブジェクト、すなわちターゲットBlogServices.java
/**
*
* @author [email protected]
* @date 2010-10-18
* @version 1.0
*/

public class BlogService {
private static Set<BlogObserver> obserserList;

static {
obserserList = new HashSet<BlogObserver>();
}

public void addBlog(Blog blog) {
System.out.println(" ......");
//
System.out.println(" ....");
updateObsersers(blog);
}

private void updateObsersers(Blog blog) {
for (BlogObserver server : obserserList) {
server.update(blog);
}
}

public void addObserver(BlogObserver blogObserver) {
obserserList.add(blogObserver);
}

public void removeObserver(BlogObserver blogObserver) {
obserserList.remove(blogObserver);
}

public void clearObserver() {
obserserList.clear();
}
}

は、観察者を含むいくつかの簡単な管理操作を見ることができる.
観察者を定義し、インタフェースを実装する必要があります.
public interface BlogObserver {
void update(Blog blog);
}

2つの具体的なサブクラスの観察者がいて、1つはブログのデータを静的なファイルに生成することを担当していますが、これは重点ではありませんので、具体的なコードの付加はありません.もう一人の観察者は新しいブログをすべての購読者に通知する責任を負っている.
/**
 *             
*
* @author [email protected]
* @date 2010-10-19
* @version 1.0
*/

public class BlogGenPageObserver implements BlogObserver {
public void update(Blog blog) {
//
System.out.println(" ......");
}
}

/**
 *              
* @author [email protected]
* @date 2010-10-18
* @version 1.0
*/

public class BlogNotifyObserver implements BlogObserver {

public void update(Blog blog) {
System.out.println(" ......");
// RSS
RssService rssService = new RssService(blog);
String rssContent = rssService.ouputRss();

// ,
NotifyService notifyService = new NotifyService(rssContent);
notifyService.doNotice();
}
}

現在のエンドで博文が発表されると、この2人の観察者がトリガーされます.
サブスクリプション・パブリケーション・モデルは、1つのプライマリ・エンド・ノードが各サブスクライバ・ノードに積極的に情報をプッシュするのに適しており、パッシブ・プル・モードよりもネットワーク帯域幅とサーバのパフォーマンスを節約します.
広い範囲のローカルエリアネットワーク間では、相互ドメイン間の情報がリアルタイムで通知され、より良いアプリケーションになります.
より広い範囲のインターネット環境では、かなりの数の購読者を持つホストが貴重なルーム帯域幅を節約し、経済的な収益を軽視することはできません.
ソースのダウンロード