WebSocket问题-1

574 阅读1分钟

本文是想记录日常开发WebSocket遇到的疑难杂症

问题描述

最近在开发WebSocket发送实时消息的时候,推送的数据转为字节大约290kb左右。推送的时候,postman就会断开链接。

排查思路

问题1

开始的时候能想到,webSocket推送数据大小是有限制的。跟了一下代码发现,它本身默认的字节缓存区为8kb

image.png

image.png

解决思路

打开session源码 直接有设置缓存区大小的方法

image.png

image.png 设置之后,第一个问题就可以解决了

问题2

因为是SpringCloud项目,用到了gateway

通过gateway转发传送数据大于64kb时会报错,查看资料发现netty中默认websocket限制大小是64k

报错信息

An exception has been observed post termination, use DEBUG level to see the full stack: io.netty.handler.codec.http.websocketx.CorruptedWebSocketFrameException: Max frame length of 65536 has been exceeded.

默认设置

image.png

解决思路

在网上遨游了好久,解决方式一般都重写方法,覆盖默认方法,比较繁琐

由于我的版本如下

<spring.cloud.alibaba.version>2.2.1.RELEASE</spring.cloud.alibaba.version>
<spring-cloud.version>Hoxton.SR6</spring-cloud.version>

可以配置websocket最大网块,本着试一试的心态做了如下配置

spring:
  cloud:
    gateway:
      httpclient:
        websocket:
          max-frame-payload-length: 5242880

然后尝试重新发送,问题就顺利解决了

注意

我数据大小是290kb,配置的话都是设置了5M。这个还是根据需求,自定义设置对应的大小。以避免OOM问题