真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

springWebSocket入口以及攔截器的實(shí)現(xiàn)方法-創(chuàng)新互聯(lián)

這篇文章主要介紹“spring WebSocket入口以及攔截器的實(shí)現(xiàn)方法”,在日常操作中,相信很多人在spring WebSocket入口以及攔截器的實(shí)現(xiàn)方法問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”spring WebSocket入口以及攔截器的實(shí)現(xiàn)方法”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

創(chuàng)新互聯(lián)建站是一家專注于做網(wǎng)站、網(wǎng)站制作與策劃設(shè)計(jì),壽寧網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:壽寧等地區(qū)。壽寧做網(wǎng)站價(jià)格咨詢:028-86922220

+

一、POM依賴

POM依賴,spring4.1.4.RELEASE,spring核心依賴請(qǐng)自行添加,下面是websocket相關(guān)jar


    javax.websocket
    javax.websocket-api
    1.0
    provided


    org.springframework
    spring-websocket
    4.1.4.RELEASE

二、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. 實(shí)現(xiàn)WebSocketConfigurer接口,重寫registerWebSocketHandlers方法,這是一個(gè)核心實(shí)現(xiàn)方法,配置websocket入口,允許訪問(wèn)的域、注冊(cè)Handler、SockJs支持和攔截器。

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

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

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

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

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

public class WebSocketHandshakeInterceptor implements HandshakeInterceptor {

    @Override
    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map 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前處理方法。常用在注冊(cè)用戶信息,綁定WebSocketSession,在handler里根據(jù)用戶信息獲取WebSocketSession發(fā)送消息。

四、Handler處理類

public class ChatWebSocketHandler extends TextWebSocketHandler{
    
    private final static List sessions = Collections.synchronizedList(new ArrayList());
    //接收文本消息,并發(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);
        //處理離線消息
    }
    //拋出異常時(shí)處理
    @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錯(cuò)誤");
};
websocket.onclose = function(evnt) {
    console.log("websocket關(guān)閉");
}

這里用到了ReconnectingWebSocket.js,對(duì)瀏覽器自帶websocket添加了擴(kuò)展,例如重連,連接超時(shí)時(shí)間,失敗重連間隔,嘗試連接大次數(shù)等。

到此,關(guān)于“spring WebSocket入口以及攔截器的實(shí)現(xiàn)方法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


網(wǎng)站名稱:springWebSocket入口以及攔截器的實(shí)現(xiàn)方法-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://weahome.cn/article/jjedj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部