java推送技术_java网络编程 - java服务器推送技术系列方案实战
前言
服務器推送技術(又名Comet)是建立在ARP基礎之上的一種非常實用的技術,它廣泛應用于Web端,手機APP應用端等。具體很多場景都需要此技術的支撐,包括掃碼登錄、掃碼支付、網頁支付、端到端消息輪播推送、數據實時推送、金融數據實時刷新、圖表數據實時變化、即時通訊等等都和此技術息息相關。
我們今天來介紹幾種常用的服務器推送技術方案及實戰。
Ajax短輪詢 - 拉模式
基于Ajax(異步JS和XML)的定時輪詢。特點:實現簡單、短連接、數據同步不及時、對服務器資源會造成一定壓力。此模式廣泛應用于:掃描登錄、掃碼支付、天氣更新等(騰訊、京東、阿里一直都在沿用此技術并日漸成熟和穩定)。
Ajax長輪詢 - 拉模式
基于HTTP長連接和AJAX長輪詢(long-polling)方式。特點:無需瀏覽器或APP端任何單獨插件支持、長連接,減少網絡(三次)握手和四次揮手、對服務器資源要求較高等。此模式常用于實時消息輪播、金融數據即時刷新、數據圖表實時刷新等。JAVA服務器端一般采用Servlet3支持的異步任務、延時結果(DeferedResult)等手段實現。
SSE(Server Send Event) - 推模式
服務器主動推模式。特點:異步非阻塞、多次實時消息的接收,瀏覽器或APP端可僅發起一次請求、冪等性、長連接等。此模式常用于網頁支付、掃碼支付等場景。JAVA服務器端采用Spring提供的SseEmitter等實現。
EventSource - 推模式
服務器主動推模式。特點:瀏覽器或APP端需支持或兼容EventSource服務器派發機制、長連接、一次請求,服務器持續多次實時推送。此模式常用于對數據實時性要求較高的場景。
基于上面的了解和學習后,我們就來前后端配合實戰一下以上系列的技術方案。
代碼實戰
一、EventSource - 推模式/**
*@authorandychen https://blog.51cto.com/14815984
*@description:EventSource服務器推送控制器類*/@Controller
@RequestMapping(value= "/es")
public classEventSourceController {
private static finalLogger log= LoggerFactory.getLogger(SSEController.class);@GetMapping("/index")
publicString index(){
return"eventsource";}
/**
* 主動持久新聞推送的正確姿勢
*@paramresponse服務器推送響應
*/@RequestMapping("/push")
public voidpushNews(HttpServletResponse response){
//設置推送內容類型為事件流response.setContentType("text/event-stream");//消息流編碼格式response.setCharacterEncoding("utf-8");PrintWriter writer = null;
try{
//獲取流寫入器writer = response.getWriter();//連續20次推送消息到客戶端for(inti=0;i< Constant.WRITE_TIMES;i++){
if(writer.checkError()){
log.error("錯誤發生,將結束推送...");//數據固定格式:\n\n,雙換行符結尾writer.write("data:end\n\n");
return;}
Thread.sleep(2000);writer.write(this.buildSendData());writer.flush();}
log.info("新聞推送達到閾值,將結束推送...");writer.write("data:end\n\n");writer.flush();} catch(Exception e) {
e.printStackTrace();}finally{
if(null!= writer){
writer.close();}
}
}
/**
* 構建發送數據
*@return*/privateString buildSendData(){
String news = Utility.createNews();StringBuilder builder = newStringBuilder("");builder.append("retry:2000\n");builder.append("data:");builder.append(news);builder.append("\n\n");
returnbuilder.toString();}
}
EventSource消息持續推技術EventSource消息持續推技術 - 演示
總結
以上是生活随笔為你收集整理的java推送技术_java网络编程 - java服务器推送技术系列方案实战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基金净值是什么意思 尽量选择基金净值低
- 下一篇: string 相等 java_java中