栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

websocket连接成功但是前端接收不到数据

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

websocket连接成功但是前端接收不到数据

项目场景:

``

项目需要后台主动实时推送数据到前端,后台使用了websocket,前端通过网关gateway与后台建立连接。


问题描述

前端直接连接websocket服务数据正常返回,连接网关gateway后,连接返回状态101连接成功,gateway无报错信息,websocket服务后台也正常收到连接和返回数据,但是前端一直没有收到数据。

原因分析:

搜索许久,一直没有搜索到类似的问题,偶然翻到一篇文章,gateway对websocket返回的数据大小有限制,重新配置了gateway对websocket数据的大小的限制后恢复正常。


解决方案:

具体的解决代码:gateway是使用netty的,所以websocket也是netty的,当websocket请求到网关的时候,网关会创建WebSocketService来转发你的请求,当具体微服务返回webSocket信息是,网关会创建ReactorNettyWebSocketClient来接收你微服务的返回数据来给客户端返回。

所以网关中webSocket设置数据大小我们要分别设置服务端接收的大小和客户端返回数据大小。

@Bean
//如果有多个的WebSocketService注入到spring容器,优先使用这个
@Primary
public WebSocketService customWebSocketService() {
ReactorNettyRequestUpgradeStrategy requestUpgradeStrategy =new ReactorNettyRequestUpgradeStrategy();
requestUpgradeStrategy.setMaxFramePayloadLength(DEFAULT_FRAME_MAX_SIZE);
return new HandshakeWebSocketService(requestUpgradeStrategy);
}

@Bean
@Primary
public ReactorNettyWebSocketClient customReactorNettyWebSocketClient() {
ReactorNettyWebSocketClient reactorNettyWebSocketClient =new ReactorNettyWebSocketClient();
reactorNettyWebSocketClient.setMaxFramePayloadLength(DEFAULT_FRAME_MAX_SIZE);
return reactorNettyWebSocketClient;
}
 DEFAULT_FRAME_MAX_SIZE自行设置
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/885044.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号