2012-08-16 12 views
6

¿Hay algún marco basado en Spring para enviar notificaciones a la página web? He visto http://www.w3schools.com/html5/tryit.asp?filename=tryhtml5_sse También estoy buscando algo que pueda soportar la mayoría de los navegadores. ¿Hay algún marco o complemento en Spring para esta funcionalidad para el código del lado del servidor? Y cualquier framework jquery para soportar esto para el navegador?Cualquier primavera como web push como notificación, donde puedo obtener notificaciones actualizadas en la página web sin actualizar la página?

TIA.

+0

No sé mucho sobre el horizonte de primavera, pero los websockets admiten un modelo de notificación push. eso debería ayudarte a buscar – goat

+0

¿Puede elaborar o algún indicador útil? – Daemonthread

+1

websockets es una tecnología más reciente que aún no es muy compatible. socket.io es un proyecto que intenta proporcionar una buena compatibilidad con navegadores cruzados, por lo que es posible que desee intentar hacerles frente aquí. Una vez más, no sé cómo encaja la primavera aquí, pero el soporte de navegador web es la parte crítica y difícil, que es hacia lo que te estoy apuntando. – goat

Respuesta

5

He utilizado el método de "larga encuesta". Básicamente, haces una solicitud de ajax al servidor para obtener datos sobre la carga de la página. El servidor espera hasta que los datos estén disponibles antes de que responda. En el cliente y el servidor, puede hacer que el tiempo de espera de la solicitud sea cada 30 segundos para evitar tener demasiados subprocesos ejecutándose en el servidor. El cliente simplemente vuelve a enviar la solicitud después de que se agote el tiempo de espera.

This site proporciona una buena introducción al sondeo largo con jQuery.

primavera en realidad no tiene ningún características explícitas que apoyan esta (por ejemplo, la combinación de los subprocesos de sondeo) que yo sepa, pero puede mirar en el nuevo async support in Spring MVC 3.2

1

Usted puede escribir su propio servlet como abajo, para más información consulte link. Como esto funciona con servlet, esto también podría funcionar con los controladores mvc de primavera.

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

Mi manera de usar lo que sería con el método de Javascript setInterval() junto con jQuery AJAX llamar para recibir notificaciones. el documento listo, llame a este (en JSP): setInterval(callMe, 30000)

en el archivo JS:

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(){ 
    ... 
    } 
}); 
} 

y, finalmente, en el controlador de primavera:

@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. 

} 

espero que esto da una idea de que o ayuda a alguien más a buscar la respuesta a esta pregunta. :)

+0

Llamar a una función cada n segundos no es una buena idea y puede inundar el servidor. Ya he probado esto para mi sitio web y ESTO NO ES UNA BUENA IDEA ... –

Cuestiones relacionadas