在Tomcat/Jetty上设置套接字发送缓冲区大小



是否有一种方法可以设置Tomcat或Jetty创建的HTTP侦听器/响应套接字的发送缓冲区大小?(即。SO_SNDBUF)。如果我用错了术语,我道歉。

更新:

在@Joakim的帮助下,我搜索了一下,发现了这个:

http://wiki.eclipse.org/Jetty/Howto/Configure_Connectors

在特定缓冲区大小下使用块传输编码的Jetty中传输缓慢

那么问题是由Jetty.xml配置以及HttpServletResponse.setBufferSize()引用的"缓冲区大小"与套接字"发送缓冲区大小"相同吗?

更新2:

阅读更多我认为既不影响套接字缓冲区大小,它只是servlet容器在将其发送到套接字之前使用的另一个缓冲区。

在使用spring的Jetty 9中可以这样做:

@Configuration

公共类customjetyconfiguration {

@Bean
public EmbeddedServletContainerCustomizer customizer() {
    return new EmbeddedServletContainerCustomizer() {
        @Override
        public void customize(ConfigurableEmbeddedServletContainer container) {
            if (container instanceof JettyEmbeddedServletContainerFactory) {
                customizeJetty((JettyEmbeddedServletContainerFactory) container);
            }
        }
        private void customizeJetty(JettyEmbeddedServletContainerFactory jetty) {
            jetty.addServerCustomizers(new JettyServerCustomizer() {
                @Override
                public void customize(Server server) {
                    for (Connector connector : server.getConnectors()) {
                        if (connector instanceof ServerConnector) {
                            HttpConnectionFactory connectionFactory = ((ServerConnector) connector)
                                    .getConnectionFactory(HttpConnectionFactory.class);
                            connectionFactory.getHttpConfiguration()
                                    .setResponseHeaderSize(16 * 1024);
                        }
                    }
                }
            });
        }
    };
}

}

Jetty在任何版本的Jetty中都不支持Socket.setSendBufferSize()

但是,您可以提供您自己的连接器实现来完成此操作。

从扩展SocketConnector开始,在其中提供您自己的.configure(Socket)实现,该实现执行Socket. setsendbuffersize (int)。

最新更新