gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

spring WebSocket的詳細介紹

場景

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

背景

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

一、POM依賴

POM依賴,spring4.1.4.RELEASE,spring核心依賴請自行添加,下面是websocket相關(guān)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. 實現(xiàn)WebSocketConfigurer接口,重寫registerWebSocketHandlers方法,這是一個核心實現(xiàn)方法,配置websocket入口,允許訪問的域、注冊Handler、SockJs支持和攔截器。

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

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

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

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

三、攔截器實現(xiàn)

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,在調(diào)用handler前處理方法。常用在注冊用戶信息,綁定WebSocketSession,在handler里根據(jù)用戶信息獲取WebSocketSession發(fā)送消息。

四、Handler處理類

public class ChatWebSocketHandler extends TextWebSocketHandler{            private final static List<WebSocketSession> sessions = Collections.synchronizedList(new ArrayList<WebSocketSession>());      //接收文本消息,并發(fā)送出去      @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);      }      //連接關(guān)閉后處理      @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關(guān)閉");  }

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

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
在线播放免费视频| 欧美做暖暖视频| 爱情岛论坛成人| www.国产福利| 国产一级爱c视频| 苍井空浴缸大战猛男120分钟| 国内外成人免费激情视频| 在线观看日本一区二区| 18黄暴禁片在线观看| 欧美日韩一区二区在线免费观看| 国产一二三区av| 91精品国产毛片武则天| 国语对白做受xxxxx在线中国| 亚洲欧美自偷自拍另类| 善良的小姨在线| 午夜欧美福利视频| 日本精品福利视频| 日本999视频| 欧美成人精品免费| 手机版av在线| 91猫先生在线| 午夜免费视频网站| 欧美精品第三页| 免费的一级黄色片| 久久艹这里只有精品| 精品久久久噜噜噜噜久久图片 | 亚洲综合av在线播放| 国产精品无码一本二本三本色| 欧美成人免费在线观看视频| 91视频最新入口| 精品少妇无遮挡毛片| 欧美一级xxxx| 日韩精品免费一区| 91成人在线观看喷潮教学| 内射国产内射夫妻免费频道| 久久国产精品网| 黄色a级片免费| 午夜在线观看av| 久久久久久久久久一区二区| 日本一道在线观看| 亚洲理论电影在线观看| 日韩毛片在线免费看| 久久亚洲精品无码va白人极品| 538在线视频观看| 国产免费又粗又猛又爽| 午夜免费福利在线| 天堂av8在线| 999这里有精品| 在线视频一二三区| 9色porny| 色片在线免费观看| 99久久久精品视频| 岛国av在线免费| 久久久久久久9| 老头吃奶性行交视频| 日本一区二区免费高清视频| 久草视频这里只有精品| 国产精品无码一本二本三本色| 国产美女视频免费看| 免费无码不卡视频在线观看| 中文字幕22页| 国内自拍在线观看| 中文字幕在线视频一区二区| 欧美三级一级片| 色哺乳xxxxhd奶水米仓惠香| 日本成人在线免费视频| 91精品一区二区三区四区| 亚洲第一狼人区| 丰满少妇被猛烈进入高清播放| 亚洲第一天堂久久| 女人另类性混交zo| 婷婷无套内射影院| 黄色一级视频播放| 色一情一区二区三区| 乱子伦视频在线看| 两根大肉大捧一进一出好爽视频| 91欧美一区二区三区| 欧美一级特黄a| 妓院一钑片免看黄大片| 成熟老妇女视频| 欧洲av无码放荡人妇网站| 成人黄色av片| 水蜜桃色314在线观看| 欧美久久久久久久久久久久久久| 亚洲美女爱爱视频| 伊人国产精品视频| 欧美性猛交xxxx乱大交91| 天天摸天天舔天天操| 手机av在线免费| 中日韩av在线播放| 天堂av8在线| 国产精品宾馆在线精品酒店| 香港三级日本三级a视频| 福利在线小视频| 在线视频一二三区| 蜜桃视频一区二区在线观看| 免费观看黄色的网站| 国产在线拍揄自揄拍无码| 日韩欧美猛交xxxxx无码| 法国空姐在线观看免费| 日本特级黄色大片| 免费国产成人看片在线| 午夜激情视频网| 欧美日韩一级在线| 日韩专区第三页| a级黄色片免费| 九九九九免费视频| 超碰成人在线播放| 亚洲av综合色区| 国产一级爱c视频| 人妻无码视频一区二区三区 | 日韩亚洲欧美视频| 91av俱乐部| 成人亚洲免费视频| 欧美日韩激情四射| 内射国产内射夫妻免费频道| 亚洲视频第二页| 免费高清一区二区三区| 男人女人黄一级| 国产又黄又爽免费视频| 国产男女无遮挡| 亚洲一级免费在线观看| 日本人体一区二区| 亚洲欧美偷拍另类| 欧美 日本 亚洲| 99中文字幕在线| 国产第一页视频| a天堂资源在线观看| 日本熟妇人妻中出| 黄色国产一级视频| 国产又大又长又粗又黄| 在线观看免费成人av| 少妇人妻大乳在线视频| 小说区视频区图片区| 国产a级片免费观看| 精品国产一二三四区| 国产欧美综合一区| 在线观看av免费观看| 欧美精品第三页| 一女被多男玩喷潮视频| 久久久成人精品一区二区三区| 国产日韩欧美久久| 国产成人久久婷婷精品流白浆| 国产精品一二三在线观看| 亚洲精品成人在线播放| 男女无套免费视频网站动漫| 亚洲 欧美 日韩 国产综合 在线 | 国产免费一区二区视频| www.国产二区| 亚洲 自拍 另类小说综合图区| 亚洲精品综合在线观看| 91丝袜超薄交口足| 香蕉视频免费版| 国产美女主播在线| 99色精品视频| 午夜福利123| 精品视频无码一区二区三区| 欧美牲交a欧美牲交aⅴ免费下载| 人妻av中文系列| 拔插拔插海外华人免费| 噜噜噜久久亚洲精品国产品麻豆| 国产日韩成人内射视频| 一本—道久久a久久精品蜜桃| 国产一区二区三区小说| 黄色高清无遮挡| 久久久国产精华液999999 | 一区二区三区一级片| 国产美女网站在线观看| 中国丰满人妻videoshd| 国产又黄又猛又粗| 欧美亚洲日本一区二区三区| 一道本在线免费视频| 手机av在线网| 国产对白在线播放| 97视频久久久| 一区二区三区国产免费| 少妇网站在线观看| 久久综合久久久久| 成人性视频欧美一区二区三区| 亚洲精品国产久| 超碰在线免费av| 久久久999免费视频| 免费一区二区三区在线观看| 不要播放器的av网站| 97在线国产视频| youjizz.com在线观看| 激情深爱综合网| 狠狠爱免费视频| 日韩精品视频一区二区在线观看| 成人观看免费完整观看| 成人免费观看视频在线观看| 一本色道无码道dvd在线观看| 五月六月丁香婷婷| 天天干天天操天天做| 蜜臀一区二区三区精品免费视频| 欧美亚洲国产成人| 日本高清一区二区视频| 成人亚洲视频在线观看| 久久久一二三四| 大肉大捧一进一出好爽动态图|