当前位置: 首页 > news >正文

springboot 长连接 keepalive 记录

maven引入依赖

<dependency>
 <groupId>org.jodd</groupId>
 <artifactId>jodd-http</artifactId>
 <version>5.1.4</version>
</dependency>

设置keepalive java配置:

@Configuration
public class WebServerConfiguration implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> {
    @Override
    public void customize(ConfigurableWebServerFactory factory) {
        //使用对应工厂类提供给我们的接口定制化我们的tomcat connector
        ((TomcatServletWebServerFactory) factory).addConnectorCustomizers(new TomcatConnectorCustomizer() {
            @Override
            public void customize(Connector connector) {
                Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
                //定制KeepAliveTimeout,设置10秒内没有请求则服务器自动断开keepalive连接
                protocol.setKeepAliveTimeout(10000);
                //当客户端发送超过5个请求则自动断开keepalive连接
                protocol.setMaxKeepAliveRequests(5);
            }
        });
    }
}

测试代码:
 

@Slf4j
public class TestHttp11 {

    public static void main(String[] args) throws Exception {
        HttpResponse response = null;
        for (int i = 0; i < 12; i++) {

            response = http11(i, response, i == (10 - 1));
            Thread.sleep(9000);
            if (i > 1) {
                Thread.sleep(3000);
            }
        }
    }

    /*
    服务端设置最大请求次数(MaxKeepAliveRequests)为5,超时时间(KeepAliveTimeout)为10秒
    1、请求10次,每次间隔1秒
        抓包发现5次后服务端返回  Connection: close
        第6次请求无异常 创建新的连接
    2、请求3次,每次间隔12秒
        第二次请求后异常报错
    3、请求3次,每次间隔9秒
        无异常
    4、请求6次,1-2次间隔9秒,2次以后间隔12秒
        第四次后异常

    <dependency>
            <groupId>org.jodd</groupId>
            <artifactId>jodd-http</artifactId>
            <version>5.1.4</version>
        </dependency>
     */
    public static HttpResponse http11(int num, HttpResponse response, boolean last) throws UnsupportedEncodingException {
        HttpRequest request = HttpRequest.get("http://127.0.0.1:8080/test/http11?num=" + num);
        if (response == null) {
            response = request.connectionKeepAlive(true).send();
        } else {
            if (!last) {
                response = request.keepAlive(response, true).send();
            } else {
                response = request.keepAlive(response, false).send();
            }
        }
        String info = new String(response.body().getBytes("iso8859-1"), "utf-8");
        System.out.println(info);
        return response;
    }

}

源码下载:
https://download.csdn.net/download/zjh1n795/16135081

 

参考:
https://blog.csdn.net/weixin_41657493/article/details/90819987
https://blog.51cto.com/15015181/2556402?source=drt

相关文章:

  • ping 命令打印日志
  • .bat批处理出现中文乱码的情况
  • dos命令把ping内容保存在文本中
  • 解决git:'instaweb' 不是一个 git 命令。参见 'git --help'。问题
  • yii gridview 根据字段值不同 显示不同样式及文字
  • python is 和 “==”的区别
  • mysql无符号和有符号的区别
  • mysql 偏移量 OFFSET和 limit的区分
  • mysql ERROR 1222 (21000): The used SELECT statements have a different number of columns
  • mysql order by 排序语法
  • mysql GROUP BY
  • Chrome安装程序遇到错误 0xe0000008解决办法
  • python3 thinter tkinter.ttk — Tk主题样式设置
  • tkinter ttk.Combobox Combobox 下拉框设置背景颜色
  • mysql 复制表,表结构和数据的方法
  • 【EOS】Cleos基础
  • ➹使用webpack配置多页面应用(MPA)
  • Angular 2 DI - IoC DI - 1
  • docker-consul
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Golang-长连接-状态推送
  • java第三方包学习之lombok
  • mysql_config not found
  • nginx 配置多 域名 + 多 https
  • Unix命令
  • zookeeper系列(七)实战分布式命名服务
  • 京东美团研发面经
  • 前端面试总结(at, md)
  • 温故知新之javascript面向对象
  • 最简单的无缝轮播
  • 2017年360最后一道编程题
  • elasticsearch-head插件安装
  • # centos7下FFmpeg环境部署记录
  • #includecmath
  • (备忘)Java Map 遍历
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (力扣题库)跳跃游戏II(c++)
  • (四)库存超卖案例实战——优化redis分布式锁
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)树状数组
  • (转载)Linux网络编程入门
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .NET Core 中的路径问题
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .Net Memory Profiler的使用举例
  • .NET成年了,然后呢?
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [Android] Android ActivityManager
  • [AutoSar]工程中的cpuload陷阱(三)测试