【发布时间】:2016-01-27 02:09:33
【问题描述】:
我正在使用带有 SockJS 的 Spring-Websockets 4.2。
由于客户端收到的消息可能很大,我想使用部分消息。我的 TextWebSocketHandler 子类确实覆盖了supportsPartialMessages 以返回true。但是,由于 Spring 创建的 SockJsWebSocketHandler 不支持部分消息,我仍然收到错误code=1009, reason=The decoded text message was too big for the output buffer and the endpoint does not support partial messages。
作为一种解决方法,我已将缓冲区大小增加到 1 MB,如 here 所述,但由于我必须支持大量客户端(同时大约 2000 个),这需要太多内存.
有没有办法在 SockJS 中使用部分消息?
【问题讨论】:
-
你能解决这个问题吗?我也面临同样的问题,一直没有找到解决办法?还有
container.setMaxTextMessageBufferSize(16384)中提到的数字,是位、字节、kbs 还是什么? -
不,很遗憾没有。我们最终通过在发送者处分块并在接收者处重新组装来实现部分消息传递。 setMaxTextMessageBufferSize 以字节为单位 AFAIK。
-
您能使用粘性会话式负载均衡器来拆分消息吗?听起来您几乎需要实现反应式流或在常规套接字之外使用适当的横向扩展消息队列来处理您的消息。
-
@Jan 你能分享一些细节你是怎么做到的吗?您是否使用了
WebSocketHandlerDecorator或更多的应用程序级别?客户呢? -
我无法再访问代码,但如果我没记错的话,我最终会在应用层处理这一切。类似于将整个消息包装在 JSON 对象中,手动将其拆分为 1MB 块,然后在接收方进行缓冲,直到最终的 '}' 到达。
标签: spring spring-websocket sockjs