加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Spring Stomp over Websocket:消息/缓冲区/缓存/流限制

发布时间:2020-12-15 04:34:39 所属栏目:Java 来源:网络整理
导读:无法理解我在用于开发涉及图像/视频的聊天应用程序的websocket配置中的不同参数: 我注意到网页中的SockJs发送帧大小为16K的消息.我还测试了消息大小限制是什么决定了我可以传输的消息的最大大小. 能不能让我知道是什么: 流字节限制 发送缓冲区大小限制 htt
无法理解我在用于开发涉及图像/视频的聊天应用程序的websocket配置中的不同参数:

我注意到网页中的SockJs发送帧大小为16K的消息.我还测试了消息大小限制是什么决定了我可以传输的消息的最大大小.

能不能让我知道是什么:

>流字节限制
>发送缓冲区大小限制
> http消息缓存大小
>什么是部分消息以及如何使用它们,它们在这里有用吗?
>此外,我计划将图像/视频的最大大小设置为2GB,并在发布时预计大约100个并发用户.

您能告诉我们应该保留哪些尺寸以及为什么?什么是默认值?以及每个人如何影响我的聊天应用程序的性能?

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/stomp").withSockJS()
            .setStreamBytesLimit(15 * 1024)
            .setHttpMessageCacheSize(15 * 1024);
}

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
    registry.enableSimpleBroker("/queue/","/topic/","/exchange/");
    registry.setApplicationDestinationPrefixes("/app");
}

@Override
public void configureWebSocketTransport(WebSocketTransportRegistration registration) {
    registration.setSendTimeLimit(15 * 1000)
            .setSendBufferSizeLimit(1 * 1024)
            // max message size 2GB (2048 bytes) : default is 64KB
            .setMessageSizeLimit(2 * 1024 * 1024);
}

}

解决方法

用我的发现和实施回答问题:

在以下配置中:

@Override
public void configureWebSocketTransport(WebSocketTransportRegistration registration) {
    registration.setSendTimeLimit(60 * 1000)
            .setSendBufferSizeLimit(200 * 1024 * 1024)
            .setMessageSizeLimit(200 * 1024 * 1024);
}

>流字节限制:来自源的信息

/**
 * Streaming transports save responses on the client side and don't free
 * memory used by delivered messages. Such transports need to recycle the
 * connection once in a while. This property sets a minimum number of bytes
 * that can be send over a single HTTP streaming request before it will be
 * closed. After that client will open a new request. Setting this value to
 * one effectively disables streaming and will make streaming transports to
 * behave like polling transports.
 * <p>The default value is 128K (i.e. 128 * 1024).
 */
public SockJsServiceRegistration setStreamBytesLimit(int streamBytesLimit) {
    this.streamBytesLimit = streamBytesLimit;
    return this;
}

>发送缓冲区大小限制
默认值为512KB.如果消息发送很慢,则会缓冲后续消息,直到达到sendTimeLimit或sendBufferSizeLimit.
> http消息缓存大小:来自源的信息

/**
 * The number of server-to-client messages that a session can cache while waiting for
 * the next HTTP polling request from the client. All HTTP transports use this
 * property since even streaming transports recycle HTTP requests periodically.
 * <p>The amount of time between HTTP requests should be relatively brief and will not
 * exceed the allows disconnect delay (see
 * {@link #setDisconnectDelay(long)}),5 seconds by default.
 * <p>The default size is 100.
 */
public SockJsServiceRegistration setHttpMessageCacheSize(int httpMessageCacheSize) {
    this.httpMessageCacheSize = httpMessageCacheSize;
    return this;
}

>什么是部分消息以及如何使用它们,它们在这里有用吗?
仍不确定如何通过websocket流式传输大型文件并使用部分消息传递(决定使用HTTP代替)
>此外,并在发布时预计大约100个并发用户.
=>由messageSizeLimit设置
并使用HTTP进行文件上传/流媒体下载.还使用apache file-upload config设置服务器限制:

@Bean
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver resolver = new CommonsMultipartResolver();
    resolver.setMaxUploadSize(2 * 1024 * 1024 * 1024); // 2 GB limit set for file upload
    resolver.setDefaultEncoding("utf-8");
    return resolver;

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读