亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

我們先在項(xiàng)目 pom.xml 中注入websocket依賴(lài)

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

然后 我們?cè)?nbsp;配置文件中加一下配置
我這里用的是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然后 將請(qǐng)求源 和 請(qǐng)求頭信息 設(shè)置為星號(hào) 表示 不限制 這樣就不會(huì)發(fā)生跨域然后 打開(kāi)websocket配置限制信息大小

然后 找到啟動(dòng)類(lèi) 目錄下面創(chuàng)建一個(gè) config文件夾 用來(lái)寫(xiě)配置文件

然后 在這個(gè)目錄下面創(chuàng)建一個(gè) 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 {
        // 建立連接時(shí)觸發(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)閉連接時(shí)觸發(fā)
        sessions.remove(session);
    }
}

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

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

String payload = message.getPayload();

接收信息
然后 輸出在控制臺(tái)
然后 我們通過(guò)filter對(duì)sessions進(jìn)行過(guò)濾
簡(jiǎn)單說(shuō) 條件就是 除了發(fā)信息的人 其他都過(guò)濾出來(lái)

然后 我們通過(guò)

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

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

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

然后 我們?cè)谶@個(gè)目錄下創(chuàng)建一個(gè) 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("*");
    }
}

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

然后 我們啟動(dòng)項(xiàng)目

在寫(xiě)個(gè)vue的WebSocket 來(lái)測(cè)試連接一下

在寫(xiě)個(gè)vue的WebSocket 來(lái)測(cè)試連接一下

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

而java控制臺(tái) 也輸出了我們連接對(duì)象的格式 一個(gè)連接id 和一個(gè)url

然后 這是我的vue代碼

<template>
  <div>
       <input
        type="text"
        v-model="text"
        placeholder="請(qǐng)輸入內(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錯(cuò)誤:', error);
      };
  }
};
</script>

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    java BASE64Encoder詳細(xì)介紹及簡(jiǎn)單實(shí)例

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

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

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

    Java基于ServletContextListener實(shí)現(xiàn)UDP監(jiān)聽(tīng)

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

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

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

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

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

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

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

最新評(píng)論