web-dev-qa-db-ja.com

Java Webアプリのプッシュ通知

現在、Spring 3.1とHibernate 4を使用するWebアプリに取り組んでいます。

要件に従って、JSPページにFacebookのようにプッシュ通知を実装したいと思います。提案がある場合は、互換性のあるブラウザとそのバージョンもリストしてください。

19
Tarun Gupta

JDK 7にアップグレードできるか、JDK 7を使用している場合は、Vert.x Vertx.io を使用することをお勧めします。クライアント側でSockjsを使用します。 Vert.xには完全なsockjsサーバー実装があります。これを実装する方法を提案します。残りについては、ドキュメントを参照してください

サーバーの実装は次のようになります

    Vertx vertx = Vertx.newVertx();
    EventBus eventBus = vertx.eventBus()
    HttpServer server = vertx.createHttpServer();
    JsonArray permitted = new JsonArray();
    permitted.add(new JsonObject());
    SockJSServer sockJSServer = new DefaultSockJSServer(vertx, server);
    sockJSServer.bridge(new JsonObject().putString("prefix", "/pusher"), permitted, permitted);
    server.listen(<some port>);

クライアント側で、ドキュメントのロード時にそのようなハンドラーを登録します

 function () {
if (!eb) {
  eb = new vertx.EventBus("http://<your_Host>:<your_port>/pusher");

  eb.onopen = function() {
   console.log("connected")
  };

  eb.onclose = function() {
    console.log("Not connected");
    eb = null;
  };
}

}

次に、ハンドラを任意のアドレスに登録できます。ここでのアドレスは何でもかまいませんが、「AwesomeNotifications」であると想定します

function subscribe(address) {
if (eb) {
  eb.registerHandler(address, function(msg, replyTo) {
  console.log("Reply recieved")
          });

}
}

これをすべて設定したら、前に作成したイベントバスを使用して、サーバーからこのアドレスにデータをプッシュできます。

eventBus.publish("AwesomeNotifications", new JsonObject(<some hashmap to serialize>))

お役に立てれば

23
winash

HTMl5サーバー送信オプションを使用できます。ここで詳細を取得できます

サーバー送信オプション:

http://www.w3schools.com/html/html5_serversentevents.asp

server-sendのJava servelt:

Javaサーブレットとサーバーがイベントを送信

チュートリアル:

http://peaktechie.blogspot.in/2012/04/small-tutorial-on-html5-server-sent.html

HTML5でサポートされているブラウザ:

http://fmbip.com/litmus

13
SANN3

私は最近これを調べています。イベントベースのアプローチは、単一ページのWebアプリを構築するのに非常に効率的ですが、複数ページのWebアプリでも使用できます。

これを行う方法はいくつかあります。

  • ActiveMQ AJAX -ブラウザのJavaScriptから直接JMSイベントをパブリッシュおよびサブスクライブします。これは非常に基本的なもので、他のアプローチよりも少ない手間がかかりますが、単純であるため、a)すでにactivemqを使用している、b)抽象化のレイヤーが多すぎないなどの場合は、最初のベースとして最適です。
  • Atmosphere -イベントベースのフレームワーク。現在使用中のWebサーバーとブラウザに基づいて、最適な通信メカニズムを自動検出できます。 IE6に至るまでのブラウザとWebサーバー の完全な広がりをサポートする、かなり素晴らしいフレームワーク。そして Spring MVCとSpring IntegrationでAtmosphereを使用する例 があります。
  • Cometd -jety/hightideに基づくBayeuxプロトコルの実装(最適な接続タイプを自動ネゴシエートするため)。 Jettyは、継続をサポートする最初のJava Webサーバーであり、最新のサーブレット仕様の一部になりました。CometdはJettyを取得し、それをJSクライアントライブラリでラップして、ブラウザへの最適な接続メカニズムを自動検出します。
  • Vert.x -上に構築できるイベントベースのサーバープラットフォーム。 Vert.xの作者が最近VMwareを去ったとき、Vert.xに関していくつかの論争がありましたが、VMwareはプロジェクトを維持しました。これで、バージョン2がEclipse Foundationからリリースされるようです。非常に有望ですが、かなり低いレベルです。既存のJava Webアプリにプラグインするだけではありません。
  • HTML5 EventSource -イベントをブラウザーに送信する標準ベースの方法。イベントをサーバーに送り返すメカニズムはありません。それは興味深いですが、IE6、IE7、およびIE8のフォールバックを実装する必要がある場合、現時点ではそれが最良の選択ではない可能性があります。

筆者としては、筆者にとっては spring-mvc プロジェクトに統合する問題について考えると、明らかに大気が最適です。

編集:タイプミス

9
David Roussel

私は Atmosphere を使用してこれを行いました。ブラウザでサポートされている場合はWebSocketを使用し、サポートされていない場合はポーリングにうまくフォールバックします。彼らはまた、生活をシンプルにするための素敵なjQueryプラグインを持っています。

7
CodeChimp

ロングポーリング 別名Cometを使用することをお勧めします。私はそれを使ってクライアントに乱数を投げました。 this 質問も参照できます。

1
Sorter

私の提案は、パブリッシュ/サブスクライブベースの [〜#〜] mqtt [〜#〜] ミドルウェアまたはXMPPプロトコルを使用することです。メッセージの小さなチャンクを送信することを計画している場合は、MQTTを使用するのが最も適切です。MQTTが最も軽量な方法だからです。 JavaScriptを含む多くのクライアントライブラリがあり、開発と管理が非常に簡単です。

0
Alpay

プッシュ通知をサポートするために長い間XMPPを使用してきましたが、 Ejabber サーバー(または何でも)を維持することは非常に困難です。

また、実際にはクライアントとサーバーの実装がある socket.io に移動しましたが、nodejsサーバーを管理し、jsで遊ぶ必要があります。

私は faye も1つのプロジェクトでテストし、Ruby環境で完全に機能します。

しかし、最終的には、サーバーに埋め込むことができるライブラリを使用して(Java)、他のテクノロジを忘れることがより良い解決策であると思います Atmosphere はクライアントとサーバーの優れた解決策だと思いますまた。

0
TlmaK0