欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue+SpringBoot使用WebSocket方式

 更新時(shí)間:2025年02月21日 16:51:39   作者:遇見很ok  
WebSocket是一種全雙工通信協(xié)議,通過HTTP升級(jí)機(jī)制建立連接,支持實(shí)時(shí)雙向數(shù)據(jù)傳輸,示例代碼展示了如何在Java Spring Boot和Vue.js中實(shí)現(xiàn)WebSocket服務(wù)和客戶端

WebSocket 原理

WebSocket 是一種網(wǎng)絡(luò)通信協(xié)議,旨在通過單一的、持久的連接,在客戶端和服務(wù)端之間進(jìn)行雙向數(shù)據(jù)交換。

它的工作原理如下:

  1. 協(xié)議握手:WebSocket 協(xié)議是基于 HTTP 協(xié)議的,客戶端首先通過 HTTP 請(qǐng)求向服務(wù)器發(fā)送一個(gè) WebSocket 握手請(qǐng)求(HTTP 協(xié)議的 Upgrade 請(qǐng)求),服務(wù)器如果支持 WebSocket,就會(huì)返回一個(gè) 101 響應(yīng),表示協(xié)議已切換到 WebSocket。
  2. 連接建立:一旦握手完成,客戶端和服務(wù)器就會(huì)建立起一個(gè)全雙工(雙向)通信連接,客戶端和服務(wù)器可以隨時(shí)相互發(fā)送數(shù)據(jù),而無需重新建立連接。
  3. 數(shù)據(jù)傳輸:WebSocket 允許客戶端和服務(wù)器在任意時(shí)刻發(fā)送消息,數(shù)據(jù)傳輸是基于幀的(每個(gè)數(shù)據(jù)包都是一個(gè)幀),并且?guī)臄?shù)據(jù)格式是二進(jìn)制或文本。
  4. 連接關(guān)閉:當(dāng)通信結(jié)束時(shí),任一方都可以發(fā)起連接關(guān)閉請(qǐng)求,關(guān)閉 WebSocket 連接。

與傳統(tǒng)的 HTTP 請(qǐng)求-響應(yīng)模式不同,WebSocket 提供了低延遲、實(shí)時(shí)、雙向通信的優(yōu)勢(shì),特別適用于需要即時(shí)數(shù)據(jù)傳輸?shù)膽?yīng)用,如即時(shí)聊天、在線游戲、股票行情等。

示例代碼

1. Java 服務(wù)端(使用 Spring Boot + WebSocket)

在 Java 服務(wù)端,我們可以使用 Spring Boot 和 Spring WebSocket 來實(shí)現(xiàn) WebSocket 服務(wù)。

步驟 1:添加依賴

首先,確保你的 pom.xml 文件中有以下依賴:

<dependencies>
    <!-- Spring Boot WebSocket 支持 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    <!-- Spring Boot Web 相關(guān)支持 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

步驟 2:創(chuàng)建 WebSocket 配置類

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        // 設(shè)定應(yīng)用程序前綴(消息傳遞的目的地)
        config.enableSimpleBroker("/topic");
        // 設(shè)置消息發(fā)送的目標(biāo)前綴
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        // 設(shè)定WebSocket端點(diǎn)
        registry.addEndpoint("/ws").withSockJS();
    }
}

步驟 3:創(chuàng)建消息處理器

import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;

@Controller
public class WebSocketController {

    private final SimpMessagingTemplate messagingTemplate;

    public WebSocketController(SimpMessagingTemplate messagingTemplate) {
        this.messagingTemplate = messagingTemplate;
    }

    @MessageMapping("/chat")
    public void sendMessage(String message) {
        // 發(fā)送消息到 /topic/chat
        messagingTemplate.convertAndSend("/topic/chat", message);
    }
}
messagingTemplate.convertAndSend("/topic/chat", message); } }

步驟 4:?jiǎn)?dòng) Spring Boot 應(yīng)用

創(chuàng)建一個(gè)啟動(dòng)類并運(yùn)行應(yīng)用:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class WebSocketApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebSocketApplication.class, args);
    }
}

2. Vue 客戶端(使用 Vue + WebSocket)

在 Vue 客戶端中,我們可以使用原生的 WebSocket API 或者使用庫(kù)(如 sockjs-client)來簡(jiǎn)化處理。

步驟 1:安裝依賴

在 Vue 項(xiàng)目中,我們首先安裝 sockjs-clientstompjs 庫(kù):

npm install sockjs-client stompjs --save

步驟 2:創(chuàng)建 WebSocket 服務(wù)

創(chuàng)建一個(gè) Vue 文件,使用 WebSocket 來連接到后端:

import SockJS from 'sockjs-client';
import Stomp from 'stompjs';

export default {
  data() {
    return {
      stompClient: null,
      message: ''
    };
  },
  mounted() {
    this.connect();
  },
  methods: {
    connect() {
      const socket = new SockJS('http://localhost:8080/ws');
      this.stompClient = Stomp.over(socket);

      this.stompClient.connect({}, frame => {
        console.log('Connected: ' + frame);
        // 訂閱消息
        this.stompClient.subscribe('/topic/chat', (messageOutput) => {
          this.message = messageOutput.body;
        });
      });
    },
    sendMessage() {
      this.stompClient.send("/app/chat", {}, "Hello, WebSocket!");
    }
  }
};

步驟 3:展示消息

在模板中展示接收到的消息,并提供一個(gè)按鈕來發(fā)送消息:

<template>
  <div>
    <div>
      <h2>Received Message: {{ message }}</h2>
    </div>
    <button @click="sendMessage">Send Message</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: ''
    };
  },
  methods: {
    sendMessage() {
      this.$emit('sendMessage', 'Hello Server');
    }
  }
}
</script>

步驟 4:運(yùn)行客戶端

確保你的 Vue 應(yīng)用能夠與后端服務(wù)通信,啟動(dòng) Vue 應(yīng)用并檢查瀏覽器控制臺(tái)的輸出。

總結(jié)

  1. WebSocket 原理:WebSocket 是一種全雙工協(xié)議,建立連接后,客戶端和服務(wù)器之間可以實(shí)時(shí)、雙向地交換數(shù)據(jù)。它基于 HTTP 協(xié)議的升級(jí)機(jī)制,通過一個(gè)握手過程,客戶端與服務(wù)器建立 WebSocket 連接,并且后續(xù)通信無需重新建立連接。
  2. Java 服務(wù)端:Spring Boot 提供了對(duì) WebSocket 的內(nèi)建支持,我們通過 @MessageMapping 注解來處理客戶端發(fā)送的消息,使用 SimpMessagingTemplate 來推送消息到訂閱的客戶端。
  3. Vue 客戶端:Vue 客戶端使用 SockJSStomp.js 來實(shí)現(xiàn) WebSocket 連接,并能夠接收服務(wù)器推送的消息。用戶可以通過按鈕發(fā)送消息,服務(wù)器接收到消息后進(jìn)行廣播。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何在VUE中使用vue-awesome-swiper

    如何在VUE中使用vue-awesome-swiper

    這篇文章主要介紹了如何在VUE中使用vue-awesome-swiper,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2021-01-01
  • el-table表頭使用el-dropdown出現(xiàn)兩個(gè)下拉框的問題及解決方法

    el-table表頭使用el-dropdown出現(xiàn)兩個(gè)下拉框的問題及解決方法

    本文給大家分享el-table在固定右邊列時(shí),表頭使用el-dropdown會(huì)出現(xiàn)兩個(gè)下拉框的解決方法,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • 基于vue3+threejs實(shí)現(xiàn)可視化大屏效果

    基于vue3+threejs實(shí)現(xiàn)可視化大屏效果

    本文主要主要講述對(duì)threejs的一些api進(jìn)行基本的封裝,在vue3項(xiàng)目中來實(shí)現(xiàn)一個(gè)可視化的3d項(xiàng)目,包含了一些常用的功能,場(chǎng)景、燈光、攝像機(jī)初始化,模型、天空盒的加載,以及鼠標(biāo)點(diǎn)擊和懸浮的事件交互,感興趣的朋友可以參考下
    2023-06-06
  • vue 獲取及修改store.js里的公共變量實(shí)例

    vue 獲取及修改store.js里的公共變量實(shí)例

    今天小編就為大家分享一篇vue 獲取及修改store.js里的公共變量實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vue3中watch與watchEffect的區(qū)別

    vue3中watch與watchEffect的區(qū)別

    vue3 新增的 Composition API中的 watchEffect 和 watch都可在 setup() 函數(shù)中使用,本文重點(diǎn)介紹vue3中watch與watchEffect的區(qū)別,感興趣的朋友一起看看吧
    2023-02-02
  • Vue3實(shí)現(xiàn)自定義指令攔截點(diǎn)擊事件的示例代碼

    Vue3實(shí)現(xiàn)自定義指令攔截點(diǎn)擊事件的示例代碼

    某些應(yīng)用場(chǎng)景會(huì)給點(diǎn)擊事件添加權(quán)限,不存在權(quán)限就攔截點(diǎn)擊事件,有權(quán)限就繼續(xù)正常觸發(fā)點(diǎn)擊事件。這樣的效果是如何實(shí)現(xiàn)的呢,本文就來和大家詳細(xì)講講
    2023-02-02
  • vue3插件json2ts的具體使用

    vue3插件json2ts的具體使用

    本文主要介紹了vue3插件json2ts的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • vue實(shí)現(xiàn)文章內(nèi)容過長(zhǎng)點(diǎn)擊閱讀全文功能的實(shí)例

    vue實(shí)現(xiàn)文章內(nèi)容過長(zhǎng)點(diǎn)擊閱讀全文功能的實(shí)例

    下面小編就為大家分享一篇vue實(shí)現(xiàn)文章內(nèi)容過長(zhǎng)點(diǎn)擊閱讀全文功能的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Vue各種loader的基本配置與使用示例教程

    Vue各種loader的基本配置與使用示例教程

    這篇文章主要介紹了Vue?各種loader的基本配置與使用,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • 如何將百度地圖包裝成Vue的組件的方法步驟

    如何將百度地圖包裝成Vue的組件的方法步驟

    這篇文章主要介紹了如何將百度地圖包裝成Vue的組件的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02

最新評(píng)論