久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

spring WebSocket的詳細介紹

場景

websocket是Html5新增加特性之一,目的是瀏覽器與服務端建立全雙工的通信方式,解決http請求-響應帶來過多的資源消耗,同時對特殊場景應用提供了全新的實現方式,比如聊天、股票交易、游戲等對對實時性要求較高的行業領域。

背景

在瀏覽器中通過http僅能實現單向的通信,comet可以一定程度上模擬雙向通信,但效率較低,并需要服務器有較好的支持; flash中的socket和xmlsocket可以實現真正的雙向通信,通過 flex ajax bridge,可以在javascript中使用這兩項功能. 可以預見,如果websocket一旦在瀏覽器中得到實現,將會替代上面兩項技術,得到廣泛的使用.面對這種狀況,HTML5定義了WebSocket協議,能更好的節省服務器資源和帶寬并達到實時通訊。目前各大主流瀏覽器都支持websocket,IE瀏覽器要IE10+

一、POM依賴

POM依賴,spring4.1.4.RELEASE,spring核心依賴請自行添加,下面是websocket相關jar

<dependency>      <groupId>javax.websocket</groupId>      <artifactId>javax.websocket-api</artifactId>      <version>1.0</version>      <scope>provided</scope>  </dependency>  <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-websocket</artifactId>      <version>4.1.4.RELEASE</version>  </dependency>

二、WebSocket入口

@Configuration  @EnableWebMvc  @EnableWebSocket  public class WebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer {      @Override      public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {          //允許連接的域,只能以http或https開頭          String[] allowsOrigins = {"http://www.xxx.com"};                   //WebIM WebSocket通道          registry.addHandler(chatWebSocketHandler(),"/           webSocketIMServer").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor());          registry.addHandler(chatWebSocketHandler(), "/sockjs/w          ebSocketIMServer").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor()).withSockJS();      }      @Bean      public ChatWebSocketHandler chatWebSocketHandler() {          return new ChatWebSocketHandler();      }      @Bean      public WebSocketHandshakeInterceptor myInterceptor(){          return new WebSocketHandshakeInterceptor();      }  }
  1. 實現WebSocketConfigurer接口,重寫registerWebSocketHandlers方法,這是一個核心實現方法,配置websocket入口,允許訪問的域、注冊Handler、SockJs支持和攔截器。

  2. registry.addHandler注冊和路由的功能,當客戶端發起websocket連接,把/path交給對應的handler處理,而不實現具體的業務邏輯,可以理解為收集和任務分發中心。

  3. setAllowedOrigins(String[] domains),允許指定的域名或IP(含端口號)建立長連接,如果只允許自家域名訪問,這里輕松設置。如果不限時使用"*"號,如果指定了域名,則必須要以http或https開頭。

  4. addInterceptors,顧名思義就是為handler添加攔截器,可以在調用handler前后加入我們自己的邏輯代碼。

  5. spring websocket也支持STOMP協議,下回再分享。

三、攔截器實現

public class WebSocketHandshakeInterceptor implements HandshakeInterceptor {        @Override      public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object                  > attributes) throws Exception {          if (request instanceof ServletServerHttpRequest) {              attributes.put("username",userName);          }          return true;      }        @Override      public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {        }  }

beforeHandshake,在調用handler前處理方法。常用在注冊用戶信息,綁定WebSocketSession,在handler里根據用戶信息獲取WebSocketSession發送消息。

四、Handler處理類

public class ChatWebSocketHandler extends TextWebSocketHandler{            private final static List<WebSocketSession> sessions = Collections.synchronizedList(new ArrayList<WebSocketSession>());      //接收文本消息,并發送出去      @Override      protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {          chatTextMessageHandler(message.getPayload());          super.handleTextMessage(session, message);      }      //連接建立后處理      @SuppressWarnings("unchecked")      @Override      public void afterConnectionEstablished(WebSocketSession session) throws Exception {          logger.debug("connect to the websocket chat success......");          sessions.add(session);          //處理離線消息      }      //拋出異常時處理      @Override      public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {          if(session.isOpen()){              session.close();          }          logger.debug("websocket chat connection closed......");          sessions.remove(session);      }      //連接關閉后處理      @Override      public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {          logger.debug("websocket chat connection closed......");          sessions.remove(session);      }        @Override      public boolean supportsPartialMessages() {          return false;      }  }

五、客戶端連接

var host = window.location.host;  var websocket;  if ('WebSocket' in window) {      websocket = new ReconnectingWebSocket("ws://"          + host + "/webSocketIMServer", null, {debug:true, maxReconnectAttempts:4});  } else if ('MozWebSocket' in window) {      websocket = new MozWebSocket("ws://" + host          + "/webSocketIMServer");  } else {      websocket = new SockJS("http://" + host              + "/sockjs/webSocketIMServer");  }  websocket.onopen = function(evnt) {      console.log("websocket連接上");  };  websocket.onmessage = function(evnt) {      messageHandler(evnt.data);  };  websocket.onerror = function(evnt) {      console.log("websocket錯誤");  };  websocket.onclose = function(evnt) {      console.log("websocket關閉");  }

這里用到了ReconnectingWebSocket.js,對瀏覽器自帶websocket添加了擴展,例如重連,連接超時時間,失敗重連間隔,嘗試連接最大次數等。
項目主頁:ReconnectingWebSocket

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
国产 日韩 欧美 综合 一区| 国产欧美一区二区三区精品酒店| 亚洲一级黄色| 波多视频一区| 新版的欧美在线视频| 鲁鲁在线中文| 久久只有精品| 日产午夜精品一线二线三线| www.com.cn成人| 久久久久久久久久久妇女| 亚洲a一区二区三区| 九九久久电影| 人人爽香蕉精品| 中文字幕av一区二区三区人| 日韩精品欧美精品| 国产区精品区| 麻豆视频观看网址久久| 高清一区二区| 久久精品国产99久久| 亚洲精华国产欧美| 日日夜夜免费精品| 欧美色综合网| 色爱综合网欧美| 欧美午夜精品一区二区三区电影| 日韩视频久久| 日本一区二区中文字幕| 国产剧情一区| 成人片免费看| 国产精品色网| 日本三级亚洲精品| 国产一区二区三区四区大秀| 久久精品成人| 蜜臀a∨国产成人精品| 国产福利亚洲| 在线日韩欧美| 日韩精品国产精品| 国产福利一区二区精品秒拍| 日韩高清中文字幕一区二区| 亚洲欧美日韩专区| 国产伦理久久久久久妇女| 最新中文字幕在线播放| 国产手机视频一区二区| 911精品国产| 日韩欧美网址| 在线国产精品一区| 狠狠久久伊人| 久久国产成人| 麻豆久久久久久| 欧美成人亚洲| 国产亚洲欧美日韩在线观看一区二区 | 亚洲二区三区不卡| 日韩国产欧美视频| 日韩精品一卡| 国产亚洲一区| 99国产精品99久久久久久粉嫩| 国产精品亚洲综合色区韩国| 伊人久久大香线蕉av不卡| 日本aⅴ亚洲精品中文乱码| 免费看av不卡| 欧美日韩xxxx| 1024精品久久久久久久久| 欧美一区自拍| 99久久99久久精品国产片果冰| 91福利精品在线观看| 日韩一区二区在线免费| 日韩和欧美一区二区| 久久国产亚洲| 免费一区二区三区在线视频| 日韩制服丝袜av| 国产一区二区三区四区五区| 久久福利影视| 中文字幕一区久| 日本成人在线一区| 亚洲国产专区| 精品免费在线| 亚洲免费专区| 婷婷综合亚洲| 97在线精品| 国产亚洲高清在线观看| 午夜精品亚洲| 国产成人精品三级高清久久91| 亚洲精品裸体| 国产日韩综合| 久久精品青草| 日韩综合一区| 国产精品a级| 亚洲精品高潮| 午夜久久tv| 久久精品主播| 三上亚洲一区二区| 久久超碰99| 青青国产精品| 亚洲精品九九| 男女激情视频一区| 激情久久中文字幕| 欧美激情另类| 免费亚洲婷婷| 麻豆精品一区二区综合av| 91精品福利观看| 日本中文字幕不卡| 9色国产精品| 亚洲午夜在线| 久久国产毛片| 精品欧美一区二区三区在线观看| 欧美国产免费| 国产亚洲高清一区| 日日摸夜夜添夜夜添国产精品| 亚洲欧美视频| 水蜜桃久久夜色精品一区| 不卡中文一二三区| 国产69精品久久| 国产精品手机在线播放| 日本欧洲一区二区| 亚洲免费成人| 午夜久久久久| 欧美特黄一级| 香蕉国产精品| 国产亚洲毛片| 久久成人精品| 综合国产视频| 少妇精品久久久一区二区| 在线免费观看亚洲| 婷婷综合成人| 国产调教精品| 18国产精品| 久久国产精品色av免费看| 欧美一区自拍| 国产精品天天看天天狠| 国产精品大片免费观看| 国产精品免费精品自在线观看| 日韩美女一区二区三区在线观看| 亚洲人成在线网站| 99精品视频在线| 图片区亚洲欧美小说区| 国产精品三上| 亚洲网址在线观看| 免费观看久久久4p| 亚洲免费毛片| 国产九九精品| 国产高清日韩| 久久中文在线| 成人在线免费观看网站| 欧美gv在线| 91精品电影| 尹人成人综合网| 亚洲+小说+欧美+激情+另类| 国产欧美一区二区三区米奇| 精品视频国内| 韩国精品主播一区二区在线观看| 在线日韩中文| 亚洲制服欧美另类| 国产精品久久久久久久久久白浆 | 亚洲啊v在线| 亚洲国产一区二区三区在线播放| 免费欧美日韩| 亚洲欧美日韩国产综合精品二区| 日韩美女精品| 国产专区精品| 欧美日韩国产欧| 午夜性色一区二区三区免费视频| 国产精品久久久久久久久久久久久久久 | 国产夫妻在线| 国精品一区二区| 日韩在线电影| 国产精品久久久久蜜臀| 日韩视频久久| 国产高清亚洲| 香蕉精品视频在线观看| 日韩不卡免费视频| 国产精品99久久精品| 欧美1区免费| 欧美日韩一区自拍| 丝袜美腿诱惑一区二区三区| 亚洲乱码久久| sm捆绑调教国产免费网站在线观看| 欧美日韩色图| 欧美精品中文字幕亚洲专区| 日韩一区二区中文| 蜜桃av一区二区三区电影| 国产日韩欧美中文在线| 中文字幕系列一区| 亚洲美女久久| 97国产精品| 四虎在线精品| 精品视频高潮| 亚洲精品高潮| 久久久久99| 久久国内精品自在自线400部| 久久精品青草| 欧美精品不卡| 亚洲精品乱码| 99久久久久久中文字幕一区| 国产亚洲字幕| 西西人体一区二区| 成人国产精品| 777久久精品| 亚洲一区中文| 色偷偷色偷偷色偷偷在线视频| 婷婷精品久久久久久久久久不卡| 色婷婷综合网|