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

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

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

?springboot篇章整體欄目:?


【一】springboot整合swagger(超詳細

【二】springboot整合swagger(自定義)(超詳細)

【三】springboot整合token(超詳細)

【四】springboot整合mybatis-plus(超詳細)(上)

【五】springboot整合mybatis-plus(超詳細)(下)

【六】springboot整合自定義全局異常處理

【七】springboot整合redis(超詳細)

【八】springboot整合AOP實現(xiàn)日志操作(超詳細)

【九】springboot整合定時任務(超詳細)

【十】springboot整合redis實現(xiàn)啟動服務即將熱點數(shù)據(jù)保存在全局以及redis(超詳細)

【十一】springboot整合quartz實現(xiàn)定時任務優(yōu)化(超詳細)

【十二】springboot整合線程池解決高并發(fā)(超詳細,保你理解)

【十三】springboot整合異步調(diào)用并獲取返回值(超詳細)

【十四】springboot整合WebService(超詳細)

【十五】springboot整合WebService(關(guān)于傳參數(shù))(超詳細)

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

【十七】springboot整合WebSocket實現(xiàn)聊天室(超詳細)

【十八】springboot實現(xiàn)自定義全局異常處理

【十九】springboot整合ElasticSearch實戰(zhàn)(萬字篇)

【二十】springboot整合過濾器實戰(zhàn)

【二十一】springboot整合攔截器實戰(zhàn)并對比過濾器

【二十二】springboot整合activiti7(1) 實戰(zhàn)演示篇

【二十三】springboot整合spring事務詳解以及實戰(zhàn)

【二十四】springboot使用EasyExcel和線程池實現(xiàn)多線程導入Excel數(shù)據(jù)

【二十五】springboot整合jedis和redisson布隆過濾器處理緩存穿透


介紹:接下來我會把學習階段學到的框架等知識點進行整合,每一次整合是在前一章的基礎上進行的,所以后面的整合不會重復放前面的代碼。每次的demo我放在結(jié)尾,本次是接著上一章的內(nèi)容延續(xù)的,只增加新增的或者修改的代碼。

最終效果展示:

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

在上一章對WebService進行了整合,本章將對WebSocket進行整合,后面會寫兩個小demo,本章將寫一個進度條demo,后面會寫一個聊天室demo。

WebSocket:用我自己的話來描述就是,正常的前后端使用是前端寫一個請求,請求接口,每次想要某一個接口的數(shù)據(jù),都需要去請求他一次,這是正常的流程,但是使用WebSocket,可以實現(xiàn)一次請求之后,前端跟該接口的連接關(guān)系一直都在,后端接口可以主動返回數(shù)據(jù)到前端。

qq交流群導航——>231378628

下面開始展示一步一步實現(xiàn)這個demo

還是先展示一下目錄結(jié)構(gòu),如下:

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

框選出來的部分是這章新增的或者修改到的部分。

第一步:導入依賴

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

相比前面的章節(jié),新增了websocket的依賴。

編寫后端:

第二步:編寫WebSocketConfig配置類

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

第三步:編寫WebSocket類

//注冊成組件
@Component
//定義websocket服務器端,它的功能主要是將目前的類定義成一個websocket服務器端。注解的值將被用于監(jiān)聽用戶連接的終端訪問URL地址
@ServerEndpoint("/websocket")
//如果不想每次都寫private  final Logger logger = LoggerFactory.getLogger(當前類名.class); 可以用注解@Slf4j;可以直接調(diào)用log.info
@Slf4j
public class WebSocket {

    //實例一個session,這個session是websocket的session
    private Session session;

    //存放websocket的集合(本次demo不會用到,聊天室的demo會用到)
    private static CopyOnWriteArraySet<WebSocket> webSocketSet = new CopyOnWriteArraySet<>();

    //前端請求時一個websocket時
    @OnOpen
    public void onOpen(Session session) {
        this.session = session;
        webSocketSet.add(this);
        log.info("【websocket消息】有新的連接, 總數(shù):{}", webSocketSet.size());
    }

    //前端關(guān)閉時一個websocket時
    @OnClose
    public void onClose() {
        webSocketSet.remove(this);
        log.info("【websocket消息】連接斷開, 總數(shù):{}", webSocketSet.size());
    }

    //前端向后端發(fā)送消息
    @OnMessage
    public void onMessage(String message) {
        log.info("【websocket消息】收到客戶端發(fā)來的消息:{}", message);
    }

    //新增一個方法用于主動向客戶端發(fā)送消息
    public static void sendMessage(String message) {
        for (WebSocket webSocket: webSocketSet) {
            log.info("【websocket消息】廣播消息, message={}", message);
            try {
                webSocket.session.getBasicRemote().sendText(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

?有關(guān)方法和參數(shù)的描述代碼里有簡單寫到。

第四步:改造控制器

編寫一個接口方法,調(diào)用websocket的sendMessage方法,如下:

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

我是寫在以前的codeController里面的,先注入websocket,再新增一個接口方法,如下:

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

ApiOperation注解是整合的swagger后的注解,沒有跟著前面的章節(jié)整合不需要加,為了顯示效果,我增加了一個線程睡眠0.1秒再累加,返回前端。

注意:若前面跟著一起整合了token,直接訪問該接口不行,要么請求時帶上登錄接口返回的token,要么放行該接口,為了簡單,此處我直接放行的該接口,若未整合token,則不需要管,放行方式如下:

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

在該配置類下面的該方法增加如圖所示(未整合token不需要管)。

到此后端完畢,開始編寫前端代碼。

編寫前端:

第五步:編寫前端代碼

<!DOCTYPE HTML>
<html>
<head>
    <title>進度條</title>
	<link rel="stylesheet"  integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
	<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
	<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
	<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>
 
<body>
   <div class="progress" style="width: 60%;height: 60px;margin: 0 auto;margin-top: 150px;">
     <div class="progress-bar" role="progressbar" style="width: 25%" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
   </div>
   <div id="message"></div>
   <input type="button" name="" id="btn" value="開始" />
</body>
 
<script type="text/javascript">
    var websocket = null;
 
    //判斷當前瀏覽器是否支持WebSocket
    if('WebSocket' in window){
        websocket = new WebSocket("ws://localhost:8089/websocket");
    }else{
        alert('Not support websocket')
    }
 
    //連接發(fā)生錯誤的回調(diào)方法
    websocket.onerror = function(){
        setMessageInnerHTML("發(fā)生錯誤");
    };
 
    //連接成功建立的回調(diào)方法
    websocket.onopen = function(event){
        setMessageInnerHTML("建立連接");
    }
 
    //接收到消息的回調(diào)方法
    websocket.onmessage = function(event){
		console.log(event.data)
        // setMessageInnerHTML(event.data);
		$(".progress-bar").attr("style","width:"+event.data+"%")
    }
 
    //連接關(guān)閉的回調(diào)方法
    websocket.onclose = function(){
        setMessageInnerHTML("關(guān)閉連接");
    }
 
    //監(jiān)聽窗口關(guān)閉事件,當窗口關(guān)閉時,主動去關(guān)閉websocket連接,防止連接還沒斷開就關(guān)閉窗口,server端會拋異常。
    window.onbeforeunload = function(){
		alert("已關(guān)閉連接");
        websocket.close();
    }
 
    //將消息顯示在網(wǎng)頁上
    function setMessageInnerHTML(innerHTML){
        document.getElementById('message').innerHTML += innerHTML + '<br/>';
    }
 
    //關(guān)閉連接
    function closeWebSocket(){
		alert("已關(guān)閉連接");
        websocket.close();
    }
	//開始
	$("#btn").click(function(){
		$.ajax({
			url: "http://localhost:8089/codeController/jinDuTiao",
			type:'post',
			success: function(HTML) {//返回頁面內(nèi)容
				 console.log(HTML);
				}
			});
	})
</script>
</html>

解釋:

1、

var websocket = null;
?
??? //判斷當前瀏覽器是否支持WebSocket
??? if('WebSocket' in window){
??????? websocket = new WebSocket("ws://localhost:8089/websocket");
??? }else{
??????? alert('Not support websocket')
??? }

首先建立websocket連接。

注意:此處的地址的ws://是固定寫法,后面加上你的ip+端口+WebSocket的ServerEndpoint注解配置的路徑。

2、

//連接發(fā)生錯誤的回調(diào)方法
??? websocket.onerror = function(){
??????? setMessageInnerHTML("發(fā)生錯誤");
??? };
?
??? //連接成功建立的回調(diào)方法
??? websocket.onopen = function(event){
??????? setMessageInnerHTML("建立連接");
??? }
?
??? //接收到消息的回調(diào)方法
??? websocket.onmessage = function(event){
?? ??? ?console.log(event.data)
??????? // setMessageInnerHTML(event.data);
?? ??? ?$(".progress-bar").attr("style","width:"+event.data+"%")
??? }
?
??? //連接關(guān)閉的回調(diào)方法
??? websocket.onclose = function(){
??????? setMessageInnerHTML("關(guān)閉連接");
??? }

都是websocket的固定寫法,幾個回調(diào)函數(shù)。

3、

//開始
?? ?$("#btn").click(function(){
?? ??? ?$.ajax({
?? ??? ??? ?url: "http://localhost:8089/codeController/jinDuTiao",
?? ??? ??? ?type:'post',
?? ??? ??? ?success: function(HTML) {//返回頁面內(nèi)容
?? ??? ??? ??? ? console.log(HTML);
?? ??? ??? ??? ?}
?? ??? ??? ?});
?? ?})

開始按鈕,開始請求接口。

注意:此處為了樣式好看點,我導入了bootstrap。運行服務,打開網(wǎng)頁,會自動建立websocket連接,點擊開始。

第六步:演示

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

第七步:改造

為了體現(xiàn)后端主動向服務器傳數(shù)據(jù),新增一個接口,如下:

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

將上面那個接口改成新增成一個定時執(zhí)行的,會發(fā)現(xiàn),不點擊前端的開始按鈕,也會有效果,說明后端可以主動向客戶端發(fā)送數(shù)據(jù)。

到此,整合完畢。

?文章來源地址http://www.zghlxwxcb.cn/news/detail-406245.html

本期整合到此完畢,接下來會繼續(xù)更新加強整合,盡情期待。

客戶端訪問地址:http://localhost:8090/swagger-ui.html或者http://localhost:8090/doc.html

demo地址:studydemo/整合swagger at main · zrc11/studydemo · GitHub

碼字不易,若幫到各位,幫忙三連,感謝

?

?

?

?

?

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

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

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • WebSocket--整合springboot

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

    2024年01月16日
    瀏覽(31)
  • SpringBoot整合Websocket(Java websocket怎么使用)

    SpringBoot整合Websocket(Java websocket怎么使用)

    WebSocket 是一種基于 TCP 協(xié)議的全雙工通信協(xié)議,可以在瀏覽器和服務器之間建立 實時、雙向的數(shù)據(jù)通信 ??梢杂糜谠诰€聊天、在線游戲、實時數(shù)據(jù)展示等場景。與傳統(tǒng)的 HTTP 協(xié)議不同,WebSocket 可以保持 長連接 ,實時傳輸數(shù)據(jù),避免了頻繁的 HTTP 請求和響應,節(jié)省了網(wǎng)絡帶

    2024年02月10日
    瀏覽(20)
  • 【W(wǎng)ebSocket】SpringBoot整合WebSocket實現(xiàn)聊天室(一)

    【W(wǎng)ebSocket】SpringBoot整合WebSocket實現(xiàn)聊天室(一)

    目錄 一、準備 1、引入依賴 2、創(chuàng)建配置類 二、相關(guān)注解 首先我們需要在項目中引入依賴,有兩種方式。第一種我們可以在創(chuàng)建Spring Boot項目時搜索WebSocket然后勾選依賴 第二種是我們可以直接在項目的pom.xml文件中插入以下依賴 我們需要進行如下配置 ServerEndpointExporter 是一個

    2024年02月13日
    瀏覽(92)
  • WebSocket整合springboot顯示進度條

    WebSocket整合springboot顯示進度條

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

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

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

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

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

    Springboot 整合 WebSocket ,使用STOMP協(xié)議 ,前后端整合實戰(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日
    瀏覽(26)
  • (一)SpringBoot 整合WebSocket 前端 uniapp 訪問

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

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

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

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

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

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

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

    2024年01月20日
    瀏覽(21)
  • 【Springboot系列】SpringBoot整合WebSocket,既然如此簡單(含源碼)

    【Springboot系列】SpringBoot整合WebSocket,既然如此簡單(含源碼)

    前言: 在當今互聯(lián)網(wǎng)時代,實時通信已經(jīng)成為了許多應用程序的基本需求。 而WebSocket作為一種全雙工通信協(xié)議,為開發(fā)者提供了一種簡單、高效的實時通信解決方案。 本文將介紹如何使用Spring Boot框架來實現(xiàn)WebSocket的集成,快速搭建實時通信功能。 什么是WebSocket? WebSocke

    2024年02月05日
    瀏覽(17)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包