当前位置: 首页 > 知识库问答 >
问题:

Java SockJS Spring客户端和消息大小

何安宜
2023-03-14

使用SockJS java客户机,我试图连接到Spring SockJS服务器,但对于大约20KB的消息(没有标头),错误为1009。Javascript库工作正常。

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] in WebSocketClientSockJsSession
[id='9fa30eb453e14a8c8612e1064640646a, url=ws://127.0.0.1:8083/user]
@Configuration
@EnableWebSocket
public class WebSocketTransportConfig implements WebSocketConfigurer {
    // Important web socket setup. If big message is coming through, it may overflow the buffer and this will lead in disconnect.
    // All messages that are coming through normally (including snapshots) must be order of magnitude smaller, or connection will be broken
    // sometimes
    // There is also MaxBinaryMessageSize that we do not employ as we use Stomp, but for completeness it is also set to same values.
    // Javadoc http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/socket/adapter/jetty/JettyWebSocketSession.html#setTextMessageSizeLimit-int-

    public static final int MAX_TEXT_MESSAGE_SIZE = 2048000; // 2 Megabytes.
    public static final int BUFFER_SIZE = MAX_TEXT_MESSAGE_SIZE * 5;


    private static final Logger LOGGER = LogManager.getLogger(WebSocketTransportConfig.class);

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {

    }

    @Bean
    public DefaultHandshakeHandler handshakeHandler() {
        LOGGER.info("Websocket buffer size: " + BUFFER_SIZE + " bytes.");
        WebSocketPolicy policy = new WebSocketPolicy(WebSocketBehavior.SERVER);
        policy.setMaxTextMessageBufferSize(BUFFER_SIZE);
        policy.setMaxTextMessageSize(MAX_TEXT_MESSAGE_SIZE);
        policy.setMaxBinaryMessageBufferSize(BUFFER_SIZE);
        policy.setMaxBinaryMessageSize(MAX_TEXT_MESSAGE_SIZE);
        policy.setInputBufferSize( BUFFER_SIZE);
        policy.setIdleTimeout(600000);

        return new DefaultHandshakeHandler(
                new JettyRequestUpgradeStrategy(new WebSocketServerFactory(policy)));
    }
}
@Configuration
@EnableWebSocketMessageBroker
@EnableScheduling
public class WebSocketBrokerConfig extends WebSocketMessageBrokerConfigurationSupport implements WebSocketMessageBrokerConfigurer {


    @Override
    public void configureWebSocketTransport(WebSocketTransportRegistration registry) {
        // Increase buffers. 
        // Too little buffers may result in fatal errros when transmitting relatively large messages.
        registry.setMessageSizeLimit(WebSocketTransportConfig.MAX_TEXT_MESSAGE_SIZE);
        registry.setSendBufferSizeLimit(WebSocketTransportConfig.BUFFER_SIZE);
        super.configureWebSocketTransport(registry);
    }
}
  1. 还必须将Java SockJS客户端配置为接收更大的消息。
  2. 或者,服务器上的配置仍然错误。

如何在Java SockJS Spring客户机上增加缓冲区大小?

共有1个答案

微生乐
2023-03-14

我遇到了同样的问题。这一切都是关于客户端的配置,而不是服务器。您可以创建WebSocketContainer实例并对其进行配置

WebSocketContainer container = ContainerProvider.getWebSocketContainer();
container.setDefaultMaxBinaryMessageBufferSize(your_size);
container.setDefaultMaxTextMessageBufferSize(your_size);
WebSocketClient transport = new StandardWebSocketClient(container);
WebSocketStompClient stompClient = new WebSocketStompClient(transport);

your_size-size(字节)。

 类似资料:
  • 客户端错误信息来自下述源文件: ·圆括号中的错误值和符号与include/errmsg.h MySQL源文件中的定义对应。 ·消息值与libmysql/errmsg.c文件中列出的错误消息对应。%d和%s分别代表数值和字符串,显示时,它们将被消息值取代。 由于更新很频繁,这些文件中可能包含这里未列出的额外错误消息。 ·错误:2000 (CR_UNKNOWN_ERROR) 消息:未知MySQL错误。

  • 我正在构建一个tcp客户端来接收和发送消息。我按照Netty用户指南中的步骤编写了一个简单的tcp客户端,其中包含一个扩展的自定义处理程序。 在hander中,我存储了< code > ChannelHandlerContext : 然后我有一个发送方法,它使用发送消息: 我发现的另一个选项是在客户机类中使用

  • 我的应用程序使用来自RabbitMQ的一些消息并对其进行处理。我有大约10个队列,每个队列最多有10个消费者(线程)。我有5次预回迁。我正在Heroku中使用CloudAMQP插件(RabbitMQ作为服务)运行安装程序。 我使用默认心跳和连接超时设置(60秒)运行。 我的java应用程序是一个使用sping-Rabbit库的Spring Boot应用程序。 版本: 问题是对于一个特定队列的消费者

  • 我在远程机器上设置了Kafka和动物园管理员。在那台机器上,我可以看到下面使用官方网站上的测试方法工作。 但是当我使用本地消费者脚本时,它就不起作用了: 我试着把它改成: 然后运行客户端使用者脚本,它会给出错误: [2017-08-11 15:49:01,591]获取相关id为3的元数据时警告错误:{listings-incoming=leader_not_available}(org.apach

  • 我是一个使用python进行套接字编程的初学者。我正在做我的课程项目。我的项目的一部分需要用不同的端口发送和接收UDP消息。提供了名为robot的服务器程序,我需要编写名为student的客户端程序,它可以与机器人进行交互。因此,我不能显示服务器程序中的所有源代码。 这是服务器程序中与UDP套接字相关的部分 这是我的客户端程序。s3 是 UDP 套接字。我可以成功地向服务器程序发送消息,但无法从中