gorilla websocket无法跨域_WebSocket 在 SpringBoot 中的实践

v2-89e8fb6a4fec3cbd563b3ed93f590c31_1440w.jpg?source=172ae18b

传统的服务端-客户端通信协议为HTTP,但是其只能先由客户端发起请求,且为短连接。所以,服务端无法按需向客户端推送数据,只能让客户端依靠轮询的方式来请求新数据。而在HTML 5标准中的WebSocket技术则恰好可以解决这个问题,其由客户端发起连接为长连接,服务端和客户端可以一直保存这个长连接。本文简要介绍在SpringBoot下的WebSocket实践

实践入门

在pom.xml中添加WebSocket依赖

<!-- WebSocket -->
    

根据Spring官方的文档,编写一个Java Bean的配置类来创建WebSocket的Handler Bean,其需继承 WebSocketConfigurer 类,并通过重写 registerWebSocketHandlers 方法实现将WebSocket 的 Handler 和 Websocket的请求路径进行绑定

@Configuration
    

Note: - 在该类上添加 @EnableWebSocket 注解,否则无法启用WebSocket

根据Spring官方的文档,按照上面的配置写一个用于处理WebSocket的Handler1类即可,其可继承TextWebSocketHandler类,该类提供了WebSocket中一些基本的操作方法,我们只需按需重写相关方法即可,实现对WebSocket的连接管理和消息处理功能,示例代码如下所示:

@Component
    

测试结果如下:

v2-4a1b095b5c963a617a94befc0d6721b6_b.jpg

Status Code: 403 跨域请求失败

当浏览器地址栏的url 和 WebSocket url不一致时,如下图所示。地址栏的url为localhost而WebSocket的url为127.0.0.1时,如果我们不使用setAllowedOrigins() 方法,会发现WebSocket请求失败,其状态码为403,从Server的日志中我们也可以看出,由于跨域问题,服务端拒绝客户端的请求。所以,只需按前文所述,调用 setAllowedOrigins("*") 即可让服务端响应跨域请求

v2-022468744f4cbbf0e0eefe7e5b8a587a_b.jpg

v2-9199163dc8e3e55e8c1736c93c3a272b_b.jpeg

参考

Spring WebSocket 官方文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值