2012-08-16 5 views
6

Webページに通知を送信するSpringベースのフレームワークはありますか。私は見たhttp://www.w3schools.com/html5/tryit.asp?filename=tryhtml5_sse私はまた、ブラウザのほとんどをサポートできる何かを探しています。この機能のためにSpringにフレームワークやアドオンはありますか?そして、これをブラウザ用にサポートするjqueryフレームワークはどれですか?春をベースにしたウェブプッシュ通知のような、私はページをリフレッシュせずにWebページで通知を更新できますか?

TIA。

+0

私は春の地平線ではあまり気にしませんが、ウェブソケットはプッシュ通知モデルをサポートしています。あなたの検索に役立つはずです。 – goat

+0

詳しい点や有用な指針を教えてください。 – Daemonthread

+1

ウェブソケットはまだサポートされていない新しい技術です。 socket.ioは素晴らしいクロスブラウザのサポートを提供しようとするプロジェクトなので、ここで肩に立ってみてください。ここでも春がどのように収まるのかわかりませんが、Webブラウザのサポートは重要で難しい部分です。これは私があなたを指しているものです。 – goat

答えて

5

私は「ロングポーリング」メソッドを使用しました。あなたは基本的に、ページロードに関するデータのためにサーバーにajaxリクエストを行います。サーバーは、応答する前にデータが利用可能になるまで待機します。クライアントとサーバーでは、30秒ごとに要求のタイムアウトを設定して、サーバー上で実行されているスレッドが多すぎないようにすることができます。クライアントは、タイムアウト後に要求を再発行するだけです。

This siteは、jQueryを使用したロングポーリングの優れた紹介です。

春は本当に私の知る限り(例えばポーリングスレッドプーリング)これをサポートする明示的な機能を持っていませんが、あなたは新しいasync support in Spring MVC 3.2

1

に見えるかもしれませんあなたは参照してください詳細については、以下のように独自のサーブレットを書くことができますlink。これはサーブレットで動作するので、これはspring MCUコントローラでも動作します。

import java.io.*; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 




public class sse extends HttpServlet 
{ 
public void doPost(HttpServletRequest request, HttpServletResponse response) 
{ 
    try 
    { 
     System.out.println("SSE Demo"); 
     response.setContentType("text/event-stream"); 

     PrintWriter pw = response.getWriter(); 
     int i=0; 
     while(true) 
     { 

      i++; 
      pw.write("event: server-time\n\n"); //take note of the 2 \n 's, also on the next line. 
      pw.write("data: "+ i + "\n\n"); 
      System.out.println("Data Sent!!!"+i); 
      if(i>10) 
      break; 
     } 
     pw.close(); 

    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

public void doGet(HttpServletRequest request,HttpServletResponse response) 
{ 
    doPost(request,response); 
} 

} 
0

それを使用しての私の方法は、通知を得るためにjQueryのAJAX呼び出しと一緒にはJavaScriptのsetInterval()方法となります。準備書について 、(JSPで)これを呼び出す:春のコントローラで

function callMe(){ 
... 

    $.ajax({ 
    type: "GET", 
    url: "ajaxNotifications", 
    success: function(count){ 
    alert("You have: " + count + "notifications now"); 
    //stick it to #element or DIV or .class where ever you want. 
    } 
    error:function(){ 
    ... 
    } 
}); 
} 

、最終的には::JSファイル内 setInterval(callMe, 30000)

@RequestMapping(value="/ajaxNotifications", method = RequestMetho.GET) 
public @ResponseBody String getMeCount(HttpServletReuest req, HttpServletRespones resp){ 
//get the desired values from req 
... 
//fire a reuest via service layer to the database for getting notifs number 
... 
//Don't forget to return it as a String, be it error or count. 

} 

を、私は、これはあなたにいくつかのアイデアを与える願っていますこの質問に対する答えを探している他の人を助けます。 :)

+0

n秒ごとに関数を呼び出すのは良い考えではなく、サーバーにあふれさせる可能性があります。私はすでに私のウェブサイトのためにこれを試しましたが、これは良いアイデアではありません... –

関連する問題