日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java推送技术_java网络编程 - java服务器推送技术系列方案实战

發布時間:2025/4/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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服务器推送技术系列方案实战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。