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

Java?spring?MVC環(huán)境中實現(xiàn)WebSocket的示例代碼

 更新時間:2023年09月28日 15:28:50   作者:深圳市有德者科技有限公司  
這篇文章主要介紹了Java?spring?MVC環(huán)境中實現(xiàn)WebSocket,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

我們先在項目 pom.xml 中注入websocket依賴

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

然后 我們在 配置文件中加一下配置
我這里用的是yml
參考代碼如下

server:
  port: 80
spring:
  cors:
    allowed-origins: "*"
    allowed-headers: "*"
  websocket:
    enabled: true
    endpoint: /ws
    path: /websocket
    max-text-message-size: 256KB
    max-binary-message-size: 256KB

端口 80然后 將請求源 和 請求頭信息 設(shè)置為星號 表示 不限制 這樣就不會發(fā)生跨域然后 打開websocket配置限制信息大小

然后 找到啟動類 目錄下面創(chuàng)建一個 config文件夾 用來寫配置文件

然后 在這個目錄下面創(chuàng)建一個 MyWebSocketHandler.java參考代碼如下

import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class MyWebSocketHandler extends TextWebSocketHandler {
    private static final List<WebSocketSession> sessions = new ArrayList<>();

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        // 建立連接時觸發(fā)
        sessions.add(session);
        System.out.println(sessions);
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        System.out.println(session.getId());
        // 處理收到的消息
        String payload = message.getPayload();
        System.out.println(payload);
        System.out.println(sessions);
        List<WebSocketSession> filteredSessions = sessions.stream()
                .filter(item -> session.getId() != item.getId())
                .collect(Collectors.toList());
        for (WebSocketSession webSocketSession : filteredSessions) {
            try {
                webSocketSession.sendMessage(new TextMessage(payload)); // 推送給前端的字符串
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        // ...
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        // 關(guān)閉連接時觸發(fā)
        sessions.remove(session);
    }
}

這個類中寫了websocket的基本配置
首先是 建立連接時觸發(fā) afterConnectionEstablished
這個函數(shù)接收一個參數(shù) 就是當(dāng)前連進來的web應(yīng)用 這個對象中就是 web端的url和websocket給的唯一 連接id
然后 我們用sessions 這個list集合 將連接的信息存起來

然后handleTextMessage 當(dāng)web端發(fā)來數(shù)據(jù)時觸發(fā)
接收兩個參數(shù) session 告訴我們是誰發(fā)的
message 發(fā)來的信息
我們通過

String payload = message.getPayload();

接收信息
然后 輸出在控制臺
然后 我們通過filter對sessions進行過濾
簡單說 條件就是 除了發(fā)信息的人 其他都過濾出來

然后 我們通過

for (WebSocketSession webSocketSession : filteredSessions) {
    try {
        webSocketSession.sendMessage(new TextMessage(payload)); // 推送給前端的字符串
    } catch (IOException e) {
        e.printStackTrace();
    }
}

首先 我們循環(huán)過濾好的list集合
然后一個一個的去發(fā)送消息sendMessage
這個就是 連接對象.sendMessage(new TextMessage(要發(fā)的信息))

然后 afterConnectionClosed 當(dāng)有應(yīng)用斷開連接時觸發(fā) session 告訴你是誰斷開了

然后 我們在這個目錄下創(chuàng)建一個 WebSocketConfig.java
參考代碼如下

import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new MyWebSocketHandler(), "/websocket").setAllowedOrigins("*");
    }
}

這里 我們實現(xiàn) WebSocketConfigurer 接口 重寫registerWebSocketHandlers
調(diào)用我們自己寫的 MyWebSocketHandler配置

然后 我們啟動項目

在寫個vue的WebSocket 來測試連接一下

在寫個vue的WebSocket 來測試連接一下

這里 我們看到 前端建立連接成功

而java控制臺 也輸出了我們連接對象的格式 一個連接id 和一個url

然后 這是我的vue代碼

<template>
  <div>
       <input
        type="text"
        v-model="text"
        placeholder="請輸入內(nèi)容"
      ></input>
      <button @click = "sendData">發(fā)送消息</button>
      <div v-for = "(item,index) in list" :key = "index">{{ item }}</div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      ws: null,
      text: "",
      list: []
    };
  },
  methods: {
    sendData() {
        this.ws.send(this.text)
    }
  },
  mounted() {
      this.ws = new WebSocket('ws://localhost/websocket');
      this.ws.onopen = () => {
        console.log('WebSocket連接已建立');
      };
      this.ws.onmessage = (event) => {
        this.list.push(event.data);
      };
      this.ws.onclose = () => {
        console.log('WebSocket連接已關(guān)閉');
      };
      this.ws.onerror = (error) => {
        console.log('WebSocket錯誤:', error);
      };
  }
};
</script>

大家可以自己開兩個創(chuàng)建試試這個聊天效果 還是挺好玩的

到此這篇關(guān)于Java spring MVC環(huán)境中實現(xiàn)WebSocket的文章就介紹到這了,更多相關(guān)java實現(xiàn)WebSocket內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解mybatis.generator配上最新的mysql 8.0.11的一些坑

    詳解mybatis.generator配上最新的mysql 8.0.11的一些坑

    這篇文章主要介紹了詳解mybatis.generator配上最新的mysql 8.0.11的一些坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • Java?Web關(guān)鍵字填空示例詳解

    Java?Web關(guān)鍵字填空示例詳解

    最近在工作中使用了java?web,發(fā)現(xiàn)有些難度,下面這篇文章主要給大家介紹了關(guān)于Java?Web關(guān)鍵字填空的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • Spring boot 連接多數(shù)據(jù)源過程詳解

    Spring boot 連接多數(shù)據(jù)源過程詳解

    這篇文章主要介紹了Spring boot 連接多數(shù)據(jù)源過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Java參數(shù)校驗詳解之使用@Valid注解和自定義注解進行參數(shù)驗證

    Java參數(shù)校驗詳解之使用@Valid注解和自定義注解進行參數(shù)驗證

    在后端開發(fā)中,參數(shù)校驗是非常普遍的,下面這篇文章主要給大家介紹了關(guān)于Java參數(shù)校驗詳解之使用@Valid注解和自定義注解進行參數(shù)驗證的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • java  BASE64Encoder詳細介紹及簡單實例

    java BASE64Encoder詳細介紹及簡單實例

    這篇文章主要介紹了java BASE64Encoder詳細介紹及簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Java多線程模式之Balking模式詳解

    Java多線程模式之Balking模式詳解

    這篇文章主要介紹了Java多線程模式之Balking模式,結(jié)合實例形式較為詳細的分析了Balking模式的原理、用法與相關(guān)注意事項,需要的朋友可以參考下
    2017-06-06
  • Java基于ServletContextListener實現(xiàn)UDP監(jiān)聽

    Java基于ServletContextListener實現(xiàn)UDP監(jiān)聽

    這篇文章主要介紹了Java基于ServletContextListener實現(xiàn)UDP監(jiān)聽,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot實現(xiàn)微信小程序支付功能

    SpringBoot實現(xiàn)微信小程序支付功能

    小程序支付功能已成為眾多應(yīng)用的核心需求之一,本文主要介紹了SpringBoot實現(xiàn)微信小程序支付功能,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • 利用IDEA社區(qū)版創(chuàng)建SpringBoot項目的詳細圖文教程

    利用IDEA社區(qū)版創(chuàng)建SpringBoot項目的詳細圖文教程

    大家應(yīng)該都知道Idea社區(qū)版本,默認是不能創(chuàng)建SpringBoot項目的,下面這篇文章主要給大家介紹了關(guān)于利用IDEA社區(qū)版創(chuàng)建SpringBoot項目的詳細圖文教程,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • SpringBoot啟動時執(zhí)行初始化操作的幾種方式

    SpringBoot啟動時執(zhí)行初始化操作的幾種方式

    項目中,經(jīng)常需要在啟動過程中初始化一些數(shù)據(jù),如從數(shù)據(jù)庫讀取一些配置初始化,或從數(shù)據(jù)庫讀取一些熱點數(shù)據(jù)到redis進行初始化緩存,本文給大家介紹了SpringBoot啟動時執(zhí)行初始化操作的幾種方式的相關(guān)資料,需要的朋友可以參考下
    2024-05-05

最新評論