springboot-websocket使用

Spring Boot WebSocket 实战
本文详细介绍了如何在Spring Boot项目中实现WebSocket功能,包括添加依赖、定义ServerEndPoint、配置@EnableWebSocket及前端JS交互代码,帮助读者快速上手WebSocket开发。

A. 在pom文件中添加依赖

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

B. 定义ServerEndPoint

@RestController
@ServerEndpoint("/chat-room/{username}")
public class ChatRoomServerEndpoint {
    @OnOpen
    public void openSession(@PathParam("username") String username, Session session) {
    }

    @OnMessage
    public void onMessage(@PathParam("username") String username, String message) {
    }

    @OnClose
    public void onClose(@PathParam("username") String username, Session session) {
    }

    @OnError
    public void onError(Session session, Throwable throwable) {
    }
}

C.开启对websocket的支持

给应用添加注解@EnableWebSocket,同时往web容器里面注入一个bean,ServerEndpointExporter。

@EnableWebSocket
@SpringBootApplication
public class WebSocketApplication {

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

	@Bean
	public ServerEndpointExporter serverEndpointExporter() {
		return new ServerEndpointExporter();
	}
}

D.前端使用

        var urlPrefix ='ws://localhost:8080/chat-room/';
        var ws = null;
        $('#user_join').click(function(){
            var username = $('#in_user_name').val();
            if(username==''){
                alert("请输入用户名!");
                return;
            }
            var url = urlPrefix + username;
            ws = new WebSocket(url);
            ws.onopen = function () {
                console.log("建立 websocket 连接...");
            };
            ws.onmessage = function(event){
                //服务端发送的消息
                $('#message_content').append(event.data+'\n');
            };
            ws.onclose = function(){
                $('#message_content').append('用户['+username+'] 已经离开聊天室!');
                console.log("关闭 websocket 连接...");
            }
        });
        //客户端发送消息到服务器
        $('#user_send_all').click(function(){
            var msg = $('#in_room_msg').val();
            if(msg==''){
                alert("请填写消息!");
                return;
            }
            if(ws && msg!=''){
                ws.send(msg);
            }
        });
        // 退出聊天室
        $('#user_exit').click(function(){
            if(ws){
                ws.close();
            }
        });
### 如何在 Spring Boot 中使用 spring-boot-starter-websocket 进行 WebSocket 开发 #### 添加依赖项 为了启用 WebSocket 支持,在 `pom.xml` 文件中加入如下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 这会引入必要的库文件以便于后续配置和编码工作[^1]。 #### 配置 WebSocket 创建一个类用于定义 WebSocket 的配置细节,通常命名为类似于 `WebSocketConfig.java`: ```java @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myWebSocketHandler(), "/ws").setAllowedOrigins("*"); } @Bean public MyWebSocketHandler myWebSocketHandler() { return new MyWebSocketHandler(); } } ``` 上述代码片段展示了如何注册处理程序以及允许跨域请求设置。 #### 创建处理器 编写自定义的 WebSocket 处理逻辑,比如消息接收、发送等功能。这里假设有一个名为 `MyWebSocketHandler.java` 的类实现了这些功能: ```java @Component public class MyWebSocketHandler extends TextWebSocketHandler { private static final Logger logger = LoggerFactory.getLogger(MyWebSocketHandler.class); @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { String payload = message.getPayload(); logger.info("Received message: " + payload); // Echo back the received message to client session.sendMessage(new TextMessage("Echo: " + payload)); } // Other methods can be overridden as needed... } ``` 这段代码展示了一个简单的回声服务器实现,即接收到的消息会被原样返回给客户端。 通过以上步骤就可以完成基本的 WebSocket 功能集成到 Spring Boot 应用当中去了。当然实际应用可能还需要更多复杂的业务逻辑支持,但这已经构成了一个良好的起点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值