2012-08-16 4 views
6

क्या वेब पेज पर सूचनाएं भेजने के लिए कोई वसंत आधारित ढांचा है। मैंने http://www.w3schools.com/html5/tryit.asp?filename=tryhtml5_sse देखा है मैं कुछ ऐसे ब्राउज़रों में भी देख रहा हूं जो अधिकांश ब्राउज़रों का समर्थन कर सकते हैं। सर्वर-साइड कोड के लिए इस कार्यक्षमता के लिए स्प्रिंग में कोई ढांचा या ऐड-ऑन है? और ब्राउज़र के लिए इसका समर्थन करने के लिए कोई jquery ढांचा?किसी स्प्रिंग आधारित वेब पुश अधिसूचना की तरह है, जहां मुझे पेज रीफ्रेश किए बिना वेब पेज में अपडेट अधिसूचना मिल सकती है?

टीआईए।

+0

मुझे वसंत क्षितिज पर बहुत कुछ पता नहीं है, लेकिन websockets पुश अधिसूचना मॉडल का समर्थन करते हैं। जो आपको खोज में मदद करनी चाहिए। – goat

+0

क्या आप विस्तृत या कोई उपयोगी पॉइंटर्स कृपया खुश कर सकते हैं? – Daemonthread

+1

websockets एक नई, अभी तक बहुत समर्थित तकनीक नहीं हैं। socket.io एक ऐसा प्रोजेक्ट है जो अच्छा क्रॉस ब्राउज़र समर्थन प्रदान करने का प्रयास करता है, ताकि आप यहां उनके कंधों पर खड़े होने की कोशिश कर सकें। दोबारा, मुझे नहीं पता कि वसंत यहां कैसे फिट बैठता है, लेकिन वेब ब्राउजर समर्थन महत्वपूर्ण और कठिन हिस्सा है, जो मैं आपको दिशा में इंगित कर रहा हूं। – goat

उत्तर

5

मैंने "लंबी मतदान" विधि का उपयोग किया है। आप पेज लोड पर डेटा के लिए मूल रूप से सर्वर पर AJAX अनुरोध करते हैं। जब तक यह जवाब देने से पहले डेटा उपलब्ध न हो तब तक सर्वर प्रतीक्षा करता है। क्लाइंट और सर्वर पर, आप सर्वर पर चल रहे बहुत से थ्रेड होने से बचने के लिए हर 30 सेकंड या तो अनुरोध समय-समय पर अनुरोध कर सकते हैं। क्लाइंट टाइमआउट के बाद अनुरोध को फिर से जारी करता है।

This site jQuery का उपयोग करके लंबे मतदान के लिए एक अच्छा परिचय प्रदान करता है।

स्प्रिंग वास्तव में किसी भी स्पष्ट सुविधाओं है कि इस का समर्थन नहीं है (उदाहरण के लिए मतदान धागे पूलिंग) AFAIK, लेकिन आप, जैसा कि नीचे नया अपनी खुद की सर्वलेट async support in Spring MVC 3.2

1

आप लिख सकते हैं इस पर गौर कर सकते हैं के लिए और अधिक जानकारी के उल्लेख link। चूंकि यह सर्वलेट के साथ काम करता है यह वसंत एमवीसी नियंत्रकों के साथ भी काम कर सकता है।

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 के साथ जावास्क्रिप्ट का setInterval() विधि के साथ होगा की मेरी तरह से सूचना पाने के लिए कहते हैं। दस्तावेज़ पर तैयार, इस फोन (jsp में): जे एस फ़ाइल में setInterval(callMe, 30000)

:

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

और अंत में वसंत नियंत्रक में:

@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

प्रत्येक एन सेकेंड में फ़ंक्शन को कॉल करना एक अच्छा विचार नहीं है और सर्वर को बाढ़ सकता है। मैंने पहले ही अपनी वेबसाइट के लिए यह कोशिश की है और यह एक अच्छा विचार नहीं है ... –

संबंधित मुद्दे