最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot使用WebSocket實(shí)現(xiàn)前后端交互的操作方法

 更新時(shí)間:2022年04月07日 15:02:36   作者:heaven096  
springboot使用websocket有兩種方式,一種是實(shí)現(xiàn)簡單的websocket,另外一種是實(shí)現(xiàn)STOMP協(xié)議,本篇講述如何使用springboot實(shí)現(xiàn)簡單的websocket,需要的朋友可以參考下

背景

我們都知道http協(xié)議只能在瀏覽器單方面向服務(wù)器發(fā)起請求時(shí)獲得響應(yīng),然而服務(wù)器不能主動(dòng)向?yàn)g覽器推送消息,想要實(shí)現(xiàn)瀏覽器的主動(dòng)推送目前有兩種主流的實(shí)現(xiàn)方式:

  • 輪詢:缺點(diǎn)很多,但是實(shí)現(xiàn)簡單
  • websocket: 在瀏覽器和服務(wù)器之間建立TCP連接,實(shí)現(xiàn)全雙工通信
  • springboot使用websocket有兩種方式,一種是實(shí)現(xiàn)簡單的websocket,另外一種是實(shí)現(xiàn)STOMP協(xié)議。本篇講述如何使用springboot實(shí)現(xiàn)簡單的websocket。

實(shí)現(xiàn)

一、導(dǎo)入依賴

直接在pom.xml中導(dǎo)入依賴。

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

二、新建WebSocket配置類,注入Bean

首先注入一個(gè)ServerEndpointExporterBean,該Bean會(huì)自動(dòng)注冊使用@ServerEndpoint注解申請的websocket endpoint,代碼如下:

@Component
public class WebSocketConfig {
    @Bean
    public ServerEndpointExporter serverEndpointExporter(){
        return new ServerEndpointExporter();
    }
}

三、新建WebSocket服務(wù)端,在其中處理websocket邏輯

@Component  //注冊到容器中
@ServerEndpoint("/webSocket")  //接收websocket請求路徑
@Slf4j
public class WebSocket {
    //當(dāng)前連接(每個(gè)websocket連入都會(huì)創(chuàng)建一個(gè)WebSocket實(shí)例)
    private Session session;
    //定義一個(gè)websocket容器存儲(chǔ)session,即存放所有在線的socket連接
    private static CopyOnWriteArraySet<WebSocket> webSocketSet = new CopyOnWriteArraySet<>();
    //處理連接建立
    @OnOpen
    public void opOpen(Session session){
        this.session = session;
        log.info("【有新的客戶端連接了】:{}",session.getId());
        webSocketSet.add(this);  //將新用戶加入在線組
        log.info("【websocket消息】有新的連接,總數(shù):{}",webSocketSet.size());
    }
    //處理連接關(guān)閉
    @OnClose
    public void Onclose(){
        webSocketSet.remove(this);
        log.info("【websocket消息】連接斷開,總數(shù):{}",webSocketSet.size());
    //接受消息
    @OnMessage
    public void onMessage(String message){
        log.info("【websocket消息】收到客戶端發(fā)來的消息:{}",message);
    // 群發(fā)消息
    public void sendMessage(String message) {
        for (WebSocket webSocket : webSocketSet) {
            log.info("【websocket消息】廣播群發(fā)消息,message={}",message);
            try {
                webSocket.session.getBasicRemote().sendText(message);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
}

四、客戶端實(shí)現(xiàn),可以借助FreeMarker模板工具直接寫在ftl文件里。

由于部分瀏覽器可能不支持,可以先測試,代碼如下:

<script>
    var websocket = null;
    if('WebSocket' in window){
        websocket = new WebSocket('ws://localhost:8080/webSocket');
    }else{
        alert('當(dāng)前瀏覽器不支持websocket消息通知');
    }
    //連接成功建立的回調(diào)方法
    websocket.onopen = function (event) {
        console.log("ws建立連接成功");
    //連接關(guān)閉的回調(diào)方法
    websocket.onclose = function (event) {
        console.log("ws連接關(guān)閉");
    //接收到消息的回調(diào)方法
    websocket.onmessage = function (event) {
        /*setMessageInnerHTML(event.data);*/
       // alert("ws接收返回消息:"+event.data);
        console.log("服務(wù)器返回消息: " + event.data);
        //彈窗提醒(要用到JQuary,所以要先引入JQuary)   播放音樂
        $('#mymodal').modal('show')
    //連接發(fā)生錯(cuò)誤的回調(diào)方法
    websocket.onerror = function(event){
        alert('websocket通信發(fā)生錯(cuò)誤!')
    //監(jiān)聽窗口關(guān)閉事件,當(dāng)窗口關(guān)閉時(shí),主動(dòng)去關(guān)閉websocket連接,防止連接還沒斷開就關(guān)閉窗口,server端會(huì)拋異常。
    window.onbeforeunload = function() {
        websocket.close();
    </script>

五、測試

(項(xiàng)目實(shí)現(xiàn)客戶創(chuàng)建新訂單之后,前臺(tái)發(fā)出提醒)

@Autowired
private WebSocket webSocket;
@Override
    @Transactional
    public OrderDTO create(OrderDTO orderDTO) {//創(chuàng)建訂單
        。。。。(具體代碼省略)
       //創(chuàng)建新訂單  發(fā)送websocket消息
        webSocket.sendMessage(orderDTO.getOrderId());
        return orderDTO;
    }

添加新訂單:

接收到websocket消息

到此這篇關(guān)于SpringBoot使用WebSocket實(shí)現(xiàn)前后端交互的操作方法的文章就介紹到這了,更多相關(guān)SpringBoot前后端交互內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java transient關(guān)鍵字原理解析

    Java transient關(guān)鍵字原理解析

    這篇文章主要介紹了Java transient關(guān)鍵字原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 詳解java調(diào)用存儲(chǔ)過程并封裝成map

    詳解java調(diào)用存儲(chǔ)過程并封裝成map

    這篇文章主要介紹了詳解java調(diào)用存儲(chǔ)過程并封裝成map的相關(guān)資料,希望通過本文能幫助到大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-09-09
  • JavaWeb之Servlet注冊頁面的實(shí)現(xiàn)示例

    JavaWeb之Servlet注冊頁面的實(shí)現(xiàn)示例

    注冊頁面是很多網(wǎng)站都會(huì)是使用的到,本文主要介紹了JavaWeb之Servlet注冊頁面的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • JRebel2023.3 插件使用及安裝步驟詳解

    JRebel2023.3 插件使用及安裝步驟詳解

    JRebel是一款JVM插件,它使得Java代碼修改后不用重啟系統(tǒng),立即生效,IDEA上原生是不支持熱部署的,一般更新了 Java 文件后要手動(dòng)重啟 Tomcat 服務(wù)器,才能生效,浪費(fèi)時(shí)間浪費(fèi)生命,目前對于idea熱部署最好的解決方案就是安裝JRebel插件,本文分步驟介紹的非常詳細(xì),一起看看吧
    2023-08-08
  • Java版超大整數(shù)階乘算法代碼詳解-10,0000級

    Java版超大整數(shù)階乘算法代碼詳解-10,0000級

    這篇文章主要介紹了Java版超大整數(shù)階乘算法代碼詳解-10,0000級,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Java中wait()與sleep()兩者的不同深入解析

    Java中wait()與sleep()兩者的不同深入解析

    在Java多線程編程中,wait()和sleep()是控制線程執(zhí)行和等待的兩個(gè)關(guān)鍵方法,但它們在應(yīng)用場景和實(shí)現(xiàn)上有顯著差異,這篇文章主要介紹了Java中wait()與sleep()兩者的不同,需要的朋友可以參考下
    2024-11-11
  • 基于java實(shí)現(xiàn)一個(gè)脫敏組件

    基于java實(shí)現(xiàn)一個(gè)脫敏組件

    這篇文章主要為大家詳細(xì)介紹了如何基于java實(shí)現(xiàn)一個(gè)脫敏組件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • 通過String.intern()方法淺談堆中常量池

    通過String.intern()方法淺談堆中常量池

    這篇文章主要介紹了通過String.intern()方法淺談堆中常量池,在JDK7之前,字符串常量是存在永久帶Perm 區(qū)的,JDK7開始在將常量池遷移到堆中,這個(gè)變化也導(dǎo)致了String的新特性,下面我們慢慢進(jìn)行介紹。,需要的朋友可以參考下
    2019-06-06
  • java webApp異步上傳圖片實(shí)現(xiàn)代碼

    java webApp異步上傳圖片實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了java webApp異步上傳圖片實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Java開發(fā)環(huán)境配置JDK超詳細(xì)整理(適合新手入門)

    Java開發(fā)環(huán)境配置JDK超詳細(xì)整理(適合新手入門)

    這篇文章主要給大家介紹了關(guān)于Java開發(fā)環(huán)境配置JDK超詳細(xì)整理的相關(guān)資料,非常適合新手入門,JDK是Java語言的軟件開發(fā)工具包,主要用于移動(dòng)設(shè)備、嵌入式設(shè)備上的java應(yīng)用程序,需要的朋友可以參考下
    2023-11-11

最新評論

襄樊市| 定结县| 九江县| 青川县| 韶关市| 冀州市| 北碚区| 法库县| 东方市| 桃园市| 合肥市| 德兴市| 凤凰县| 都江堰市| 岑溪市| 玛曲县| 建阳市| 武宣县| 崇州市| 邻水| 大足县| 屏山县| 县级市| 黄平县| 渝北区| 全州县| 茂名市| 余干县| 五常市| 密云县| 昆山市| 锡林郭勒盟| 长子县| 林口县| 仲巴县| 永福县| 怀宁县| 泰顺县| 彰化市| 垦利县| 搜索|