在项目中使用WebSocket进行前后端通信

本文介绍了如何在SpringBoot项目中集成WebSocket,包括引入依赖、配置WebSocket、编写业务类以及前端如何连接和接收消息。通过示例代码详细展示了WebSocket的开启、关闭、消息收发等关键操作,实现了后端向前端实时推送消息的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不废话直接上代码

后端

一、引入WebSocket依赖

		<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-websocket -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>

二、编写WebSocket配置类

import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

/**
 * @ClassName WebSocketConfig
 * @Description WebSocket配置类
 * @Author 翟文彪
 * @Date 2022/1/6 0:12
 * @Version 1.0
 */
@Component
public class WebSocketConfig {
    @Bean
    public ServerEndpointExporter serverEndpointExporter(){
         return new ServerEndpointExporter();
    }
}

三、编写WebSocket业务类

WebSocket业务类我选择写在Service层,但是它又属于一种特殊的Service,注意看下面代码中类上方的注解。

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.util.concurrent.CopyOnWriteArraySet;

/**
 * @ClassName WebSocket
 * @Description WebSocket实现(一个特殊的service)
 * @Author 翟文彪
 * @Date 2022/1/6 0:15
 * @Version 1.0
 */
@Component
@ServerEndpoint("/webSocket")
@Slf4j
public class WebSocket {
    private Session session;

    private static CopyOnWriteArraySet<WebSocket> webSocketSet = new CopyOnWriteArraySet<>();

    @OnOpen
    public void onOpen(Session session){
        this.session = session;
        webSocketSet.add(this);
        log.info("webSocket消息,有新的连接");
    }

    @OnClose
    public void onClose(){
        webSocketSet.remove(this);
        log.info("webSocket消息,连接断开");
    }

    @OnMessage
    public void onMessage(String message){
        log.info("webSocket消息,收到客户端发来的消息",message);
    }

    public void sendMessage(String  message){
        for (WebSocket webSocket: webSocketSet){
            log.info("webSocket消息,广播消息",message);
            try {
                webSocket.session.getBasicRemote().sendText(message);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

@ServerEndpoint 中的地址就是需要前端调取的接口地址。

前端

一、连接后端WebSocket

<script>
	var websocket = null;
	if('WebSocket' in window){
		websocket =  new WebSocket('ws://你的IP地址:你的端口号/webSocket');
	}else{
		alert('该浏览器不支持WebSocket')
	}
	websocket.onopen = function (event){
		console.log('建立连接');
	}
	websocket.onclose = function (event){
		console.log('连接关闭');
	}
	websocket.onmessage= function (event){
		console.log('收到消息:'+event.data);
		// 进行弹窗提醒或其他操作
	}
	websocket.onerror= function (){
		alert('websocket通信发生错误!')
	}
	windows.onbeforeunload = function(){
		websocket.close()
	}
</script>

实现

做完以上步骤操作后,我们可以直接在springboot项目中,在你想发送消息的实现类中@Autowired 你编写的WebSocket业务类,然后调用sendMessage方法即可实现发送消息。
例:

@Autowired
private WebSocket webSocket;

public void method(){
	// 具体方法实现
	**************
	// 发送WebSocket消息
	webSocket.sendMessage("success");
}

当这个方法执行后,前端能收到“success”则发送消息成功。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值