我用Spring编写了一个websocket服务器,用Javascript编写了一个客户机。这些很好用。我还用Java编写了第二个客户机。当这一次试图在连接到主机后处理一个帧时,我会得到以下错误:
org.springframework.web.socket.sockjs.client.WebSocketClientSockJsSession - Transport closed with CloseStatus[code=1009, reason=The decoded text message was too big for the output buffer and the endpoint does not support partial messages]
一个快速搜索显示你可以更改缓冲区大小,但是我应该马上走这条路吗?我是否应该尝试以某种方式压缩数据(我问这个问题时几乎不知道怎么做)?
发布于 2019-07-02 13:25:24
我会提出一个答案,因为它已经将近一年了。
正如@Walfrat所指出的:
请注意,如果数据过多,也可能会导致生产环境中性能较差的设计问题(在生产环境中,连接的缺点和稳定性并不总是在这里)。
考虑到这一点,最好在websocket中推出一条更“通知式”的消息。浏览器客户端可以将其显示为警报或徽章,服务器客户机(服务器订阅服务器)可以将其作为触发器来查询RESTful端点。因此,基本上:
这允许几乎即时地了解新数据,并使用设计的RESTful端点。
发布于 2021-08-10 09:21:41
您的缓冲区需要足够大,以便至少保存您可以预期的最大信息。如果消息很大,就会带来问题。同时打开的连接越多,应用程序的内存占用空间就会越大。这就是为什么Spring的内部缓冲区不是无限的。
如果有可能使消息更小(例如,通过拆分或压缩),这将是一个有用的优化,并将减轻该问题。如果您无法找到使消息更小的方法,那么增加缓冲区大小是剩下的唯一选项。否则,Spring将删除消息,如果它无法缓冲它。
https://softwareengineering.stackexchange.com/questions/377235
复制相似问题