成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Spring Cloud微服務使用webSocket的方法

瀏覽:2日期:2023-07-06 11:02:57
webSocket

webSocket長連接是一種在單個tcp連接上進行全雙工通信的協議,允許雙向數據推送。一般微服務提供的restful API只是對前端請求做出相應。使用webSocket可以實現后端主動向前端推送消息。

網關配置

spring cloud 的網關組件有zuul和getway

getway

base: config: nacos: nacoshost: localhost port: 8848spring: application: name: gateway main: allow-bean-definition-overriding: true cloud: nacos: discovery:server-addr: ${base.config.nacos.nacoshost}:${base.config.nacos.port} gateway: discovery:locator: enabled: true routes:# websocket- id: CLOUD-WEBSOCKET uri: lb:ws://cloud-websocket predicates: - Path=/cloud-websocket/**server: port: 8888

配置網關的時候注意添加ws協議。

zuul

zuul只能管理http請求,不推薦使用zuul管理websocket連接,推薦直連。

服務端

添加maven依賴

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId></dependency>

添加webSocket 配置

@Configuration@EnableWebSocketpublic class WebsocketConfiguration implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {// webSocket通道// 指定處理器和路徑registry.addHandler(new WebSocketHandler(), '/websocket')// 指定自定義攔截器.addInterceptors(new WebSocketInterceptor())// 允許跨域.setAllowedOrigins('*');// sockJs通道registry.addHandler(new WebSocketHandler(), '/sock-js').addInterceptors(new WebSocketInterceptor()).setAllowedOrigins('*')// 開啟sockJs支持.withSockJS(); }}

添加處理器

package com.auexpress.cloud.handler;import com.alibaba.fastjson.JSONObject;import org.apache.commons.lang3.StringUtils;import org.springframework.web.socket.*;import org.springframework.web.socket.handler.AbstractWebSocketHandler;import java.io.IOException;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;/** * @Description * @ClassName WebSocketHandler * @Author HYSong * @date 2020.04.14 10:08 */public class WebSocketHandler extends AbstractWebSocketHandler { /** * 存儲sessionId和webSocketSession * 需要注意的是,webSocketSession沒有提供無參構造,不能進行序列化,也就不能通過redis存儲 * 在分布式系統中,要想別的辦法實現webSocketSession共享 */ private static Map<String, WebSocketSession> sessionMap = new ConcurrentHashMap<>(); private static Map<String, String> userMap = new ConcurrentHashMap<>(); /** * webSocket連接創(chuàng)建后調用 */ @Override public void afterConnectionEstablished(WebSocketSession session) {// 獲取參數String user = String.valueOf(session.getAttributes().get('user'));userMap.put(user, session.getId());sessionMap.put(session.getId(), session); } /** * 接收到消息會調用 */ @Override public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {JSONObject jsonObject = JSONObject.parseObject(message.getPayload().toString());String content = jsonObject.getString('content');String targetAdminId = jsonObject.getString('targetId');if('0'.equals(targetAdminId)){ // 推送給所有人 userMap.forEach((key,value)->{try { this.sendMessage(key,content);} catch (IOException e) { e.printStackTrace();} });}else{ sendMessage('1', content);} } /** * 連接出錯會調用 */ @Override public void handleTransportError(WebSocketSession session, Throwable exception) {sessionMap.remove(session.getId()); } /** * 連接關閉會調用 */ @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {sessionMap.remove(session.getId()); } @Override public boolean supportsPartialMessages() {return false; } /** * 后端發(fā)送消息 */ public void sendMessage(String user, String message) throws IOException {String sessionId = userMap.get(user);if (StringUtils.isEmpty(sessionId)) { return;}WebSocketSession session = sessionMap.get(sessionId);if (session == null) { return;}session.sendMessage(new TextMessage(message)); }}

添加攔截器

package com.auexpress.cloud.interceptor;import org.springframework.http.server.ServerHttpRequest;import org.springframework.http.server.ServerHttpResponse;import org.springframework.http.server.ServletServerHttpRequest;import org.springframework.web.socket.WebSocketHandler;import org.springframework.web.socket.server.HandshakeInterceptor;import java.util.Map;/** * @Description * @ClassName WebSocketInterceptor * @Author HYSong * @date 2020.04.14 10:09 */public class WebSocketInterceptor implements HandshakeInterceptor { /** * handler處理前調用,attributes屬性最終在WebSocketSession里, * 可能通過webSocketSession.getAttributes().get(key值)獲得 */ @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) {if (request instanceof ServletServerHttpRequest) { ServletServerHttpRequest serverHttpRequest = (ServletServerHttpRequest) request; // 獲取請求路徑攜帶的參數 String user = serverHttpRequest.getServletRequest().getParameter('user'); attributes.put('user', user); return true;} else { return false;} } @Override public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) { }}

到此這篇關于Spring Cloud微服務使用webSocket的方法的文章就介紹到這了,更多相關Spring Cloud使用webSocket內容請搜索好吧啦網以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
不卡一区在线观看| 欧洲色大大久久| 色婷婷国产精品| 国产精品久久久久久久久久免费看| 丁香婷婷深情五月亚洲| 欧美日韩精品三区| 免费一级片91| 久久人人精品| 亚洲国产精品天堂| 亚洲国产欧美日韩| 欧美激情自拍偷拍| av色综合久久天堂av综合| 欧美亚洲综合久久| 水野朝阳av一区二区三区| 国产一区二区三区成人欧美日韩在线观看| 国产精品视频免费| 99久久精品国产一区二区三区| 91精品国产综合久久精品图片| 日韩高清不卡一区二区三区| 性伦欧美刺激片在线观看| 亚洲午夜久久久久久久久电影网 | 狠狠入ady亚洲精品| 国产欧美一区二区精品忘忧草| 99国产欧美另类久久久精品 | 日韩成人精品在线观看| 久久精品免费| 日本大胆欧美人术艺术动态 | 成人的网站免费观看| 日韩欧美一卡二卡| a在线欧美一区| 久久免费看少妇高潮| 91小视频在线免费看| 久久久亚洲精品一区二区三区| aaa亚洲精品| 国产人久久人人人人爽| 亚洲欧美文学| 亚洲欧美aⅴ...| 亚洲精品字幕| 亚洲在线视频免费观看| 校园春色综合网| 蜜臀99久久精品久久久久久软件| 在线观看日韩毛片| 久久91精品国产91久久小草| 7777精品久久久大香线蕉| 高清av一区二区| 欧美国产综合色视频| 黄色av成人| 亚洲国产精品久久久久秋霞影院| 久久国产88| 另类欧美日韩国产在线| 51精品视频一区二区三区| 成人免费毛片app| 国产亚洲欧美色| 极品尤物久久久av免费看| 亚洲一区欧美一区| 欧美亚洲图片小说| 福利一区在线观看| 成人精品视频一区二区三区| 狠狠爱综合网| 一区免费观看视频| 欧美亚洲自偷自偷| 六月丁香婷婷色狠狠久久| 欧美一卡二卡三卡| 91视频国产资源| 亚洲女厕所小便bbb| 老色鬼久久亚洲一区二区| 国产伦精一区二区三区| 久久久久久久久久久99999| 亚洲免费成人| 久久99精品久久只有精品| 精品国产乱码久久| 亚洲美女网站| 韩国理伦片一区二区三区在线播放| 2021中文字幕一区亚洲| 亚洲国产导航| 日产国产欧美视频一区精品| 欧美一级在线视频| 一区一区视频| 麻豆国产欧美一区二区三区| 亚洲精品在线电影| 国产欧美一级| 国产精品夜夜爽| 中文字幕在线不卡| 欧美在线观看视频一区二区 | 亚洲一区二区三区四区中文| 国产精品一二三在| 中文字幕一区二区三区在线观看 | 在线观看91av| 国产一区在线免费观看| 日本不卡不码高清免费观看| 精品日韩欧美在线| 一本色道久久综合亚洲精品高清 | 久久国产精品99久久久久久老狼| 精品久久久久香蕉网| 亚洲三级影院| 国产乱人伦精品一区二区在线观看 | 亚洲激情六月丁香| 欧美剧在线免费观看网站| 欧美一区视频| 免费在线成人网| 国产精品对白交换视频| 欧美性猛交xxxx乱大交退制版 | 色视频欧美一区二区三区| 99r国产精品| 国模大胆一区二区三区| 亚洲成人在线| 日韩一区和二区| 亚洲国产成人91porn| 欧美日韩精品伦理作品在线免费观看| 久久精品官网| 午夜精品久久久久久不卡8050| 亚洲国产综合91精品麻豆| 久久久久久久尹人综合网亚洲| 国内精品自线一区二区三区视频| 欧美日韩国产美| 欧美成人tv| 女女同性女同一区二区三区91| 秋霞午夜av一区二区三区| 欧美高清视频在线高清观看mv色露露十八 | 亚洲国产精选| 高清不卡一区二区在线| 亚洲狠狠爱一区二区三区| 日韩一区二区电影在线| 午夜亚洲视频| 欧美在线播放| 国产成人精品免费视频网站| 日日噜噜夜夜狠狠视频欧美人 | 国产一区二区三区成人欧美日韩在线观看| 丁香啪啪综合成人亚洲小说| 亚洲国产美女搞黄色| 国产欧美日韩久久| 6080国产精品一区二区| 久久久xxx| 伊人成年综合电影网| 国产成人免费视频网站| 午夜婷婷国产麻豆精品| 国产日韩欧美制服另类| 欧美一区在线视频| 色久综合一二码| 亚洲精一区二区三区| 99久久99久久精品免费观看 | 一区二区三区不卡视频在线观看| 久久久国产精品麻豆| 欧美日本免费一区二区三区| 久久精品电影| 国产精品久久久一区二区三区| 色综合夜色一区| 国产黄色精品视频| 久久国内精品视频| 婷婷久久综合九色综合绿巨人| 日韩久久一区二区| 欧美国产一区二区在线观看 | 色欧美日韩亚洲| 亚洲黄色av| 欧美日韩国产综合网| 成人黄色大片在线观看| 国产精品69久久久久水密桃| 久久国产欧美日韩精品| 日韩av高清在线观看| 亚洲男人的天堂在线aⅴ视频| 国产三级精品在线| 久久免费精品国产久精品久久久久| 欧美不卡一区二区三区| 91精品国产免费久久综合| 欧美日韩国产大片| 欧美三级日韩三级| 欧美影院午夜播放| 久久一区二区三区超碰国产精品| 影院欧美亚洲| 黄色av日韩| 欧美日本韩国一区二区三区| 91在线视频网址| 99视频有精品| 成人av网站免费| 国产激情视频一区二区在线观看| 国产一区二区三区美女| 精品一区二区免费视频| 久久99精品国产91久久来源| 青青草国产成人99久久| 奇米888四色在线精品| 婷婷国产在线综合| 日本色综合中文字幕| 免费欧美在线视频| 韩国女主播成人在线| 国产91丝袜在线播放0| 懂色av一区二区三区免费看| 国产福利91精品一区| 高清久久久久久| 99re热这里只有精品免费视频| 成人高清视频免费观看| 9色porny自拍视频一区二区| 欧美成人免费在线| 欧美色欧美亚洲另类七区| 欧美视频在线观看| 亚洲国产一区二区三区高清| 美日韩精品视频| 欧美日韩成人在线| 欧美xfplay| 国产午夜久久久久| 中文字幕制服丝袜成人av|