求教 springcloud 集成 websocket 报错 1009.

145 天前
 guch99999

求教 springcloud 集成 websocket 报错 1009.

现在请求链路是前端 websocket-client->springcloud gateway(7000)-> websocket server ( port:7100 ) 我通过 gateway 进行转发,我的 websocket 主要推送的是视频流数据, 如果直接前端访问 websocket server 服务没有问题,但是访问网关服务 前端 websocket 会断开,会报下面错误 'No async message support and buffer too small. Buffer size: [8,192], Message size: [11,296]'

1017 次点击
所在节点    Java
8 条回复
kivmi
145 天前
gateway 是 spring cloud 的 gateway 么?首先得看 websocket 是谁跟谁建立的连接吧
guch99999
145 天前
@kivmi 是 springcloud 的 gateway ,websocket 是直接访问 gateway ,gateway 转发给对应的服务
jov1
144 天前
WebSocket 缓冲区小,传入数据太大,试试找的例子,构建 websocket 客户端连接的时候,配置下大小

WebSocketContainer container = new WsWebSocketContainer();
// 设置二进制消息缓冲区大小(以字节为单位)
container.setDefaultMaxBinaryMessageBufferSize(5120000);
// 设置文本消息缓冲区大小(以字节为单位)
container.setDefaultMaxTextMessageBufferSize(5120000);
// 设置会话空闲超时时间(以毫秒为单位)
container.setDefaultMaxSessionIdleTimeout(15 * 60000L);
StandardWebSocketClient client = new StandardWebSocketClient(container);
coala
144 天前
好熟悉.. websocket 走 SpringCloudGateway 传大量的数据是有不少问题的,

我之前遇到过不支持压缩的问题,不知道现在好没有, 见 https://www.v2ex.com/t/938806

1009 是服务端的问题,我之前是设置 session 最大值解决的, 我的原因是单个包太大。

session.setBinaryMessageSizeLimit(WebSocketConfig.MAX_SIZE);
session.setTextMessageSizeLimit(WebSocketConfig.MAX_SIZE);

好像是和#3 类似的解决办法,我用的是 org.springframework.web.socket.WebSocketSession , 你测下类似的思路呢?
coala
144 天前
另外 TCP 因为不能丢包的原因,视频流支持的其实很烦,我之前测试了 WebRTC 的方案, 效果还挺不错的,可惜没机会实战。

直接用 Nginx 负载 Websocket 坑应该会少写,SpringCloudGateway 首先要保证业务的可用性, 视频的流量和 HTTP 的在一起, 带宽和负载都可能影响到业务。 感觉分开比较好。
guch99999
144 天前
@coala 找到问题了。 看了下 gateway 转发 websocket 的源码以及做了测试发现,gateway 用的是 webflux 其实代理了一个 websocket 客户端和我的服务端进行通信,gateway 默认用的是 ReactorNettyWebSocketClient 其中默认的 netty buffer 缓存区大小是 maxFramePayloadLength 65536 (这也是网上好多教程让我设置这个参数的原因,但是我没有用), 我之前转发 websocket 出现了错误,改成了 TomcatWebSocketClient (这时候就是用 tomcat 默认的缓存大小 org.apache.tomcat.websocket.DEFAULT_BUFFER_SIZE 即 8*1024 ),所以我就奇怪了明明我大小没有超过 65536 就报错。。。
guch99999
144 天前
@coala 至于兄弟你说的 nginx 负载后面我也可以试下
guch99999
144 天前
现在还有其他坑, 擦 gateway 支持 websocket 这么多坑吗。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1054220

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX