springboot中websocket的使用

本文介绍了一种基于WebSocket协议的客户端和服务端实现方案。客户端采用JavaScript进行连接判断及消息处理,服务端则通过Java实现了连接管理和消息广播功能。

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

客户端
<script>
var websocket = null;
if('websocket' in window){
websocket = new WebSocket('ws://');
}else {
alert('浏览器不支持websocket')
}

websocket.onopen = function (ev) {
console.log('websocket打开');
}

websocket.onclose = function (ev) {
console.log('websocket关闭');
}
    
websocket.onmessage = function (ev) {
console.log('收到websocket新消息' + ev.data);
//处理消息
}

websocket.onerror = function (ev) {
console.log('websocket出错');
}

window.onbeforereunload = function () {
websocket.close();
}

</script>


服务端
1.引入依赖
2.编写配置文件WebsocketConfig.java
@Bean
public ServerEndpointExporter serverEndpointExporter () {
    return new ServerEndpointExporter();
}


3.编写controller类WebSocket.java
private Session session;
    private static CopyOnWriteArraySet<WebSocket> copyOnWriteArraySet = newCopyOnWriteArraySet<>();
@OnOpen
public void onOpen (Session session) {
    this.session = session;
    copyOnWriteArraySet.add(this);
    log.info("【webSocket消息】 有新的连接,连接总数:{}",copyOnWriteArraySet.size());
}

@OnClose
public void onClose () {
    copyOnWriteArraySet.remove(this);
    log.info("【webSocket消息】 关闭连接,连接总数:{}",copyOnWriteArraySet.size());
}

@OnMessage
public void onMessage (String message) {
    log.info("【webSocket消息】 有新的信息,信息内容:{}",message);
}

public void sendMessage (String message){
    for(WebSocket websocket : copyOnWriteArraySet){
            log.info("【webSocket消息】 发送信息,信息内容:{}",message);
        try {
            websocket.session.getBasicRemote().sendText(message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以上为websocket的基础调用,在控制层调用sendMessage方法即可向前台页面推送消息。

但是编写配置文件WebsocketConfig.java 之后使用测试类进行测试方法会报错,暂时不知道原因。















### 如何在 Spring Boot 中实现 WebSocket 功能 #### 创建 Spring Boot 应用程序 为了启动一个基于 WebSocket 的应用程序,首先需要创建一个新的 Spring Boot 项目并配置必要的依赖项。通过引入 `spring-boot-starter-websocket` 依赖可以轻松集成 WebSocket 支持[^2]。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` #### 配置 WebSocket 支持 接着,在项目的主类中启用 WebSocket 支持。这可以通过继承 `WebSocketConfigurer` 接口并在其中定义具体的 WebSocket 处理器来完成。下面是一个简单的例子: ```java package cn.juwatech.websocket; 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(), "/ws").setAllowedOrigins("*"); } } ``` 在此基础上还需要编写自定义的 WebSocket Handler 来处理客户端的消息接收与响应逻辑: ```java package cn.juwatech.websocket; import org.springframework.stereotype.Component; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.TextWebSocketHandler; @Component public class MyWebSocketHandler extends TextWebSocketHandler { @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { System.out.println("Received Message: " + message.getPayload()); // Echo back the received message to client session.sendMessage(new TextMessage("Echo: " + message.getPayload())); } } ``` 最后,确保应用入口处已经设置了正确的包扫描路径以便能够自动加载上述组件。通常情况下只需要保持默认设置即可正常工作[^1]。 对于更复杂的应用场景比如分布式部署下的跨节点间消息传递,则可能涉及到额外的技术选型如 Redis 或者 RabbitMQ 等作为中间件来进行协调管理[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值