国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

WebSocket--整合springboot

這篇具有很好參考價值的文章主要介紹了WebSocket--整合springboot。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

目錄

握手?jǐn)r截器

WebSocket處理程序



HttpSessionHandshakelnterceptor (抽象類):? ?握手?jǐn)r截器,在握手前后添加操作
AbstractWebSocketHandler (抽象類) :? ?WebSocket處理程序,監(jiān)聽連接前,連接中,連接后WebSocketConfigurer (接口):? ? 配置程序,比如配置監(jiān)聽哪個端口,上面的握手?jǐn)r截器,處理程序的使用

握手?jǐn)r截器

?握手?jǐn)r截器,在握手前后添加操作文章來源地址http://www.zghlxwxcb.cn/news/detail-794992.html

//握手?jǐn)r截器
@Component
@Slf4j
public class MyWsInterceptor extends HttpSessionHandshakeInterceptor {

    //用戶開始連接
    @Override
    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
        //從reuqest獲取遠(yuǎn)程的地址
        log.info("{}==》開始握手", request.getRemoteAddress().toString());
        return super.beforeHandshake(request, response, wsHandler, attributes);
    }

    @Override
    public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception ex) {
        //從reuqest獲取遠(yuǎn)程的地址
        log.info("{}==》握手成功后的返回", request.getRemoteAddress().toString());
        super.afterHandshake(request, response, wsHandler, ex);
    }
}

WebSocket處理程序

//WebSocket處理程序
@Slf4j
@Component      //注入spring進(jìn)來
public class MyWsHandler extends AbstractWebSocketHandler {
    //同樣的,為了快速訪問,使用map去取值
    private static Map<String, SessionBean> map;

    //縣線程安全的Integer
    private static AtomicInteger clientIdMaker;



    static {
        map = new ConcurrentHashMap<>();
        clientIdMaker = new AtomicInteger(0);
    }

    @Override
    //連接建立后,保存session連接,保存在類對象map中
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        super.afterConnectionEstablished(session);
        //返回并自增//半自定義操作
        SessionBean sessionBean = new SessionBean(session, clientIdMaker.getAndIncrement());
        map.put(session.getId(), sessionBean);

        //自定義操作
        //sb.append(map.get(session.getId()).getClientId() + "進(jìn)入了群聊<br/>");
        //sengMessage(map);

    }

    @Override
    //收到消息
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        super.handleTextMessage(session, message);
        //sb.append(map.get(session.getId()).getClientId() + ":傳輸?shù)膬?nèi)容:" + message.getPayload() + "<br/>");
        //log.info(String.valueOf(sb));
        //sengMessage(map);
    }

    @Override
    //傳輸出現(xiàn)異常
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        log.info("傳輸出現(xiàn)異常");
        super.handleTransportError(session, exception);
        if (session.isOpen()) {
            log.info("傳輸出現(xiàn)異常,關(guān)閉session");
            session.close();
            map.remove(session.getId());
        }
    }


    @Override
    //連接關(guān)閉
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        super.afterConnectionClosed(session, status);
        map.remove(session.getId());
        //Integer clientId = map.get(session.getId()).getClientId();
        //log.info("()==>連接關(guān)閉", clientId);
        //sb.append(clientId + "退出了群聊" + "<br/>");
        //sengMessage(map);

    }

    //實(shí)現(xiàn)定時任務(wù)
    @Scheduled(fixedRate = 2000)  //每隔多少秒執(zhí)行定時任務(wù)
    public void sengMsg() throws IOException {
        //向每個客戶端發(fā)送請求
        for (String s : map.keySet()) {                 //遍歷對象
            map.get(s)                                  //或與session對象
                    .getWebSocketSession()              //獲取session
                    .sendMessage(new TextMessage("測試心跳"));                     //發(fā)送任務(wù)
        }
    }

    static void sengMessage(Map<String, SessionBean> map) {
        for (String key : map.keySet()) {
            try {
                map.get(key).getWebSocketSession().sendMessage(new TextMessage(sb.toString()));
            } catch (IOException e) {
                e.printStackTrace();
                log.info(e.getMessage());
            }
        }
    }


}

配置類

@Configuration
@EnableWebSocket
public class MyWsConfig implements WebSocketConfigurer {

    @Resource
    private MyWsHandler handler;

    @Resource
    private MyWsInterceptor interceptor;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(handler, "/myWs1")   //傳入處理器,以及handler監(jiān)聽的地址
                .addInterceptors(interceptor)           //添加攔截器  注入自定義的握手?jǐn)r截器
                .setAllowedOrigins("*");                //允許的源
    }
}

到了這里,關(guān)于WebSocket--整合springboot的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot整合WebSocket詳細(xì)教程

    SpringBoot整合WebSocket詳細(xì)教程

    共開啟兩個頁面,實(shí)現(xiàn)一對一聊天。 服務(wù)端代碼:https://gitee.com/lianaozhe/springboot-websocket.git 導(dǎo)入相關(guān)依賴: WebSocketConfig配置類: WebSocket操作類: TestController測試接口類: test.html文件: 復(fù)制test.html文件為test2.html文件,將上面的userId由’20’改為’10’,后面測試使用。 運(yùn)行服

    2024年02月01日
    瀏覽(20)
  • WebSocket整合springboot顯示進(jìn)度條

    WebSocket整合springboot顯示進(jìn)度條

    SpringBoot整合WebScoket顯示進(jìn)度條 - 鐘小嘿 - 博客園 對于大文件上傳解析,若直接上傳,會超時,可使用WebSocket長鏈接方式實(shí)時顯示文件的上傳狀態(tài),實(shí)際上是從文件上傳到內(nèi)容解析完成存入數(shù)據(jù)庫的過程,各個階段的進(jìn)度可自定義。 本文使用SpringBoot+WebSocket+vue2.0+Element+nginx實(shí)

    2024年02月14日
    瀏覽(20)
  • springboot整合websocket(詳解、教程、代碼)

    springboot整合websocket(詳解、教程、代碼)

    大家好,我是酷酷的韓~ 1.websocket定義 WebSocket協(xié)議是基于TCP的一種新的網(wǎng)絡(luò)協(xié)議。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工(full-duplex)通信——允許服務(wù)器主動發(fā)送信息給客戶端。websocket 協(xié)議是在 http 協(xié)議上的一種補(bǔ)充協(xié)議,是 html5 的新特性,是一種持久化的協(xié)議。 2.websocket工作原理

    2024年02月02日
    瀏覽(21)
  • 【十六】springboot整合WebSocket(超詳細(xì))

    【十六】springboot整合WebSocket(超詳細(xì))

    ?springboot篇章整體欄目:? 【一】springboot整合swagger(超詳細(xì) 【二】springboot整合swagger(自定義)(超詳細(xì)) 【三】springboot整合token(超詳細(xì)) 【四】springboot整合mybatis-plus(超詳細(xì))(上) 【五】springboot整合mybatis-plus(超詳細(xì))(下) 【六】springboot整合自定義全局異常處

    2023年04月09日
    瀏覽(20)
  • (一)SpringBoot 整合WebSocket 前端 uniapp 訪問

    (一)SpringBoot 整合WebSocket 前端 uniapp 訪問

    第一次使用WebSocket,所以最需要一個及其簡單的例子,跑通之后,增加自己對該技術(shù)的理解。(技術(shù)基礎(chǔ)介紹就免掉了,后面再補(bǔ)) ?案例邏輯:目前只有一個用戶,而且是一個用戶給服務(wù)器發(fā)送數(shù)據(jù),服務(wù)給該用戶返回數(shù)據(jù) 此處的邏輯一共三步 第一步,添加依賴項(xiàng) 第二步

    2024年02月10日
    瀏覽(19)
  • SpringBoot整合Netty+Websocket實(shí)現(xiàn)消息推送

    ? ? ? ?Netty是一個高性能、異步事件驅(qū)動的網(wǎng)絡(luò)應(yīng)用框架,用于快速開發(fā)可維護(hù)的高性能協(xié)議服務(wù)器和客戶端。以下是Netty的主要優(yōu)勢: 高性能 :Netty基于NIO(非阻塞IO)模型,采用事件驅(qū)動的設(shè)計,具有高性能的特點(diǎn)。它通過零拷貝技術(shù)、內(nèi)存池化技術(shù)等手段,進(jìn)一步提高

    2024年01月20日
    瀏覽(21)
  • SpringBoot+Vue整合WebSocket實(shí)現(xiàn)實(shí)時通訊

    SpringBoot+Vue整合WebSocket實(shí)現(xiàn)實(shí)時通訊

    ????????在開發(fā)過程中,我們經(jīng)常遇到需要對前臺的列表數(shù)據(jù),實(shí)現(xiàn)實(shí)時展示最新的幾條數(shù)據(jù),或者是調(diào)度的任務(wù)進(jìn)度條實(shí)現(xiàn)實(shí)時的刷新......,而對于這種需求,無狀態(tài)的http協(xié)議顯然無法滿足我們的需求,于是websocket協(xié)議應(yīng)運(yùn)而生。websocket協(xié)議本質(zhì)上是一個基于tcp的協(xié)議

    2024年02月13日
    瀏覽(24)
  • SpringBoot+Vue 整合websocket實(shí)現(xiàn)簡單聊天窗口

    SpringBoot+Vue 整合websocket實(shí)現(xiàn)簡單聊天窗口

    1 輸入臨時名字充當(dāng)賬號使用 2 進(jìn)入聊天窗口 3 發(fā)送消息 (復(fù)制一個頁面,輸入其他名字,方便展示效果) 4 其他窗口效果 pom依賴 WebSocketConfig.java WebSocketServer.java MessageVo.java App.vue

    2024年02月09日
    瀏覽(24)
  • Springboot整合WebSocket實(shí)現(xiàn)主動向前端推送消息

    Springboot整合WebSocket實(shí)現(xiàn)主動向前端推送消息

    ? ? ? ? 在上篇文章tcp編程中,我們實(shí)現(xiàn)了C++客戶端與java服務(wù)器之間的通信,客戶端發(fā)送了一個消息給服務(wù)器,今天我們要實(shí)現(xiàn)基于WebSocket實(shí)現(xiàn)服務(wù)器主動向前端推送消息,并且以服務(wù)器接收到C++客戶端的消息主動向前端推送消息的觸發(fā)條件。 WebSocket 的誕生背景 ??????

    2024年03月16日
    瀏覽(22)
  • Springboot 整合 WebSocket ,使用STOMP協(xié)議 ,前后端整合實(shí)戰(zhàn) (一)(1)

    Springboot 整合 WebSocket ,使用STOMP協(xié)議 ,前后端整合實(shí)戰(zhàn) (一)(1)

    server: port: 9908 3.WebSocketConfig.java import org.springframework.context.annotation.Configuration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; import org.springframework.web.socket.config.annotation.StompEndpointRegistry; import org.springfra

    2024年04月25日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包