热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringRestTemplate发送HTTP请求的性能测试

文章目录1、测试2、wireshark数据流1、测试测试环境:win7个人电脑;Server是SpringBootwebserver;

文章目录

  • 1、测试
  • 2、wireshark 数据流


1、测试

测试环境:

  • win7 个人电脑;
  • Server 是 SpringBoot web server;

client 端代码(默认为长连接):

RestTemplate rest = new RestTemplate();
for (int i &#61; 0; i < 1000;i&#43;&#43;){rest.postForObject("http://localhost:8080/ailysis/scenario/test", Strings.repeat("a", 1000), Object.class);
}

client 端代码&#xff08;短连接&#xff09;&#xff1a;

for (int i &#61; 0; i < 1000;i&#43;&#43;){try {HttpURLConnection connection &#61; (HttpURLConnection)new URL("http://localhost:8080/ailysis/scenario/test").openConnection();connection.setRequestMethod("POST");connection.setDoOutput(true);connection.setDoInput(true);connection.setUseCaches(false);connection.setConnectTimeout(30000);connection.setReadTimeout(30000);connection.setRequestProperty("Connection-type", "application/json");connection.setRequestProperty("Connection", "Close");OutputStream outputStream&#61;connection.getOutputStream();outputStream.write(JSONBuilder.object("content", Strings.repeat("a", 1000).toJSONString().getBytes()));outputStream.flush();outputStream.close();System.out.println(connection.getResponseCode());} catch (IOException e) {...}
}

server 端代码&#xff1a;

&#64;RequestMapping("/test")
public ResponseEntity<Integer> test(HTTPServletRequest request){return new ResponseEntity<>(request.getContengLength(), HttpStatus.OK)
}

请求内容长度发送次数局域网 (ms)本地访问 (ms长连接
10001271219True
1000100047543297True
10000100053453080True
1000100003593921930True
10000100003237722430True

几点说明&#xff1a;

  • 以上情况&#xff0c;RestTemplate 会在相同的连接上发送 HTTP 数据包&#xff0c;也就是所谓的长连接&#xff1b;
  • 时间消耗基本上跟 HTTP 请求次数相关&#xff1b;HTTP 协议是个很重的协议&#xff0c;比如&#xff0c;TCP 空报文的总大小为 54 字节&#xff08;54 &#61; 14&#43;20&#43;20&#xff09;&#xff0c;分别为链路层报文头 14 &#61; 6 &#43; 6 &#43; 2&#xff0c;ip 报文头 20 字节&#xff0c;tcp 报文头 20&#xff0c;有时候 tcp 会带一些选项参数&#xff0c;一般十几个字节。但是一个空 HTTP 报文&#xff0c;基本都大于 300 字节。所以说&#xff0c;HTTP 是个很重的传输协议&#xff0c;只不过现在网速越来越快了&#xff0c;传输效率不再是制约系统的瓶颈了&#xff0c;HTTP 才得以大行其道&#xff1b;
  • 最后发现&#xff0c;长短连接对该场景&#xff0c;影响不是很大&#xff1b;因为是本地或局域网&#xff0c;tcp 三次握手所消耗的时间很少&#xff0c;如果在互联网上&#xff0c;另当别论。
  • 测试中不涉及服务器的并发处理&#xff0c;仅测试单连接的处理情况&#xff1b;

2、wireshark 数据流

1、单个 HTTP 连接建立到关闭的 wireshark 抓包视图&#xff1a;
在这里插入图片描述
2、长连接上发送两个 HTTP 数据包的视图&#xff1a;

在长连接模式&#xff0c;尽管发送了两个 HTTP&#xff0c;但是只建立了一个 TCP 连接&#xff1a;

  • 21.0.0.43:20082 <&#61; > 30.0.24.111:8080

在这里插入图片描述
3、使用短连接发送两个 HTTP 包的视图&#xff1a;

可以清楚的看到&#xff0c;有两次建立连接和释放连接的过程&#xff0c;建立了两条 TCP 连接&#xff1a;

  • 21.0.0.43:27575 <&#61; > 30.0.24.111:8080
  • 21.0.0.43:27578 <&#61; > 30.0.24.111:8080
    在这里插入图片描述

4、长连接上发送多个 HTTP 包的视图&#xff1a;
在这里插入图片描述


推荐阅读
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 本文讨论了在使用PHP cURL发送POST请求时,请求体在node.js中没有定义的问题。作者尝试了多种解决方案,但仍然无法解决该问题。同时提供了当前PHP代码示例。 ... [详细]
  • springboot启动不了_Spring Boot + MyBatis 多模块搭建教程
    作者:枫本非凡来源:www.cnblogs.comorzlinp9717399.html一、前言1、创建父工程最近公司项目准备开始重构,框 ... [详细]
author-avatar
刘诗宪668964
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有