求教 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]'
![]() |
1
kivmi 67 天前
gateway 是 spring cloud 的 gateway 么?首先得看 websocket 是谁跟谁建立的连接吧
|
3
jov1 66 天前
WebSocket 缓冲区小,传入数据太大,试试找的例子,构建 websocket 客户端连接的时候,配置下大小
WebSocketContainer container = new WsWebSocketContainer(); // 设置二进制消息缓冲区大小(以字节为单位) container.setDefaultMaxBinaryMessageBufferSize(5120000); // 设置文本消息缓冲区大小(以字节为单位) container.setDefaultMaxTextMessageBufferSize(5120000); // 设置会话空闲超时时间(以毫秒为单位) container.setDefaultMaxSessionIdleTimeout(15 * 60000L); StandardWebSocketClient client = new StandardWebSocketClient(container); |
![]() |
4
coala 66 天前
好熟悉.. 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 , 你测下类似的思路呢? |
![]() |
5
coala 66 天前
另外 TCP 因为不能丢包的原因,视频流支持的其实很烦,我之前测试了 WebRTC 的方案, 效果还挺不错的,可惜没机会实战。
直接用 Nginx 负载 Websocket 坑应该会少写,SpringCloudGateway 首先要保证业务的可用性, 视频的流量和 HTTP 的在一起, 带宽和负载都可能影响到业务。 感觉分开比较好。 |
![]() |
6
guch99999 OP @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 就报错。。。
|
![]() |
8
guch99999 OP 现在还有其他坑, 擦 gateway 支持 websocket 这么多坑吗。。。
|