HTTP接口和UDP接口流量差异比较

手机应用流量与性能评估:HTTP vs UDP接口对比
本文详细介绍了如何通过抓包工具(如Wireshark、Tcpdump等)评估手机应用中HTTP与UDP接口在流量消耗上的差异,并提供理论推导与实际测试结果,帮助开发者在流量效率与稳定性间做出选择。


 

 

有个手机软件需要很频繁的调用服务器端接口,你知道的,每个字节都是钱呀,钱呀钱,命相连呀。本来已经有个现成的tomcat的http(get/post)的接口,但是担心流量消耗太大,需要做个评估,看是采用http接口,还是使用多线程的socket udp接口,于是就有了下面这一出。

 


相关工具:

序号

工具

描述

1.          

Nc

Linux下的著名socket调试瑞士军刀,系统自带

2.          

Tcpdump

Linux下抓包工具,系统自带,不过需要root权限

3.          

Wget

Linux下http的调用工具,系统自带

4.          

Sockettools

Wins绿色版本的socket调试工具,这个在上次讲loadrunner的socket脚本录制里面提到过使用方法

5.          

WiresharkPortable.exe

Wins下的抓包及分析工具,我只下载了一个绿色版本的分析工具,不能抓包

6.          

WinSCP.exe

Ssh连接linux,使用sftp协议传回抓包文件

 

 

第一部分:

SOCKET(UDP)通讯过程消耗字节数测试方案:

1.        Linux上开启抓包:sudotcpdump -i eth0 -n -vv -v -s 0 -w xxxx.cap

2.        Linux(nc)启动udp服务器端:nc -4 -u-l 2389

3.        Window7家庭版32bit启动sockettools.exe启动udp客户端建立连接;

4.        客户端发送24个字节;例如:[ 0319B38ED7, 056243F315, 1A56AEF715]

5.        客户端中断连接;

6.        停止抓包

7.        使用winscp传回数据包进行分析。

 

来,看看结果吧:

用WiresharkPortable.exe打开数据包,先得过滤一下:

过滤条件表达式:ip.src == xxx and ip.dst == yyy and ip.proto == 17

ip.proto == 17 这个就是udp协议,将xxx和yyy替换成你的源和目标地址

 

结果:

就一个udp数据包:52+24=76个字节,也就是说如果你发送24个字节,附带上包头什么的一共76个字节,没数据就52个字节。

 

 

第二部分:

HTTP通讯过程消耗字节数测试方案:

1.        Linux上进行抓包:sudotcpdump -i eth0 -n -vv -v -s 0 -w xxxx.cap

2.        Linux上wget调用url:wget url

3.        停止抓包;

4.        使用winscp传回数据包进行分析

 

结果:

过滤条件表达式1:ip.src == xxx and ip.dst == yyy

TCP发出7个包,有1个数据包(因为是附带的HTTP包头,所以不能省略):

SYN:74

ACK:66

PSH,ACK:241

ACK:66

ACK:66

FIN,ACK:66

ACK:66

合计:

74+66+241+66+66+66+66=645

 

过滤条件表达式2:ip.src == yyy and ip.dst == xxx

TCP 收到5个包,有两个数据包:

SYN,ACK:74

ACK:66

PSH,ACK:1090:数据包:假定只带和上次一样的http包头,计为241个字节

PSH,ACK:785:数据包

FIN,ACK:66

合计(如果不包含数据):

74+66+241+66=447

 

如果不包含数据总共:645+447=1092

 

 

最后结论:

http接口底层是tcp协议的,设计就是稳定可靠的传输,加上包上了http一层,每次调用的流量比简单的udp调用要大很多,简单的说就是:1092/52=21,刚好21倍。调用1次http接口相当于调用21次udp接口。

 

假定手机每5秒调用一次接口,一分钟12次,每天调用2个小时,那么每个月消耗:

UDP: 52*12*60*2*30=2246400=2.246m

HTTP: 2246400*21=47174400=47.174m

 

如果你的手机软件打算节约流量,就用多线程的udp做后台服务吧;

如果你的手机软件打算尽可能多的消耗流量,就别用udp了。

 

这个是纯理论推导的,可能真到用的时候,电量消耗比流量消耗还要命。





HTTP接口API接口在性能方面的差异受多种因素影响,以下从不同角度进行分析: ### 传输协议层面 HTTP接口基于HTTP协议,而HTTP协议基于TCP/IP协议栈,通过TCP连接进行数据传输,具有良好的可靠性稳定性,但建立TCP连接需要经过三次握手,断开时需要四次挥手,这会带来一定的开销。在一些对实时性要求极高、数据准确性要求稍低的场景下,这种开销可能会影响性能。例如,在高并发的游戏场景中,频繁的HTTP请求可能会导致响应延迟。而API接口并不局限于HTTP协议,若采用UDP协议,UDP是无连接的,不需要建立断开连接的过程,传输速度更快,但不保证数据的可靠传输,适合对实时性要求高、对数据准确性要求相对较低的场景,如视频流传输。HTTP接口底层是TCP协议,每次调用的流量比简单的UDP调用要大很多,调用1HTTP接口相当于调用21UDP接口[^2][^3]。 ### 数据处理复杂度层面 API接口可能涉及更复杂的业务逻辑数据处理,这会导致处理时间增加,影响性能。例如,一个API接口需要对大量数据进行复杂的算法计算、数据库查询等操作,处理时间会明显变长。而HTTP接口如果只是简单的数据传输,不涉及复杂的业务逻辑,其处理速度会相对较快。例如,一个简单的HTTP接口用于获取静态页面内容,处理速度通常会比涉及复杂业务逻辑的API接口快[^1]。 ### 并发处理能力层面 在高并发场景下,HTTP接口API接口的性能表现也有所不同。对于HTTP接口,服务器需要为每个请求分配资源进行处理,当并发请求数量过多时,服务器的资源可能会成为瓶颈,导致响应时间变长。而一些API接口在设计时会考虑并发处理能力,采用异步处理、缓存等技术来提高并发处理能力。例如,一些基于异步I/O的API接口可以在处理请求时不阻塞线程,提高并发处理效率。不过,如果API接口的实现不合理,在高并发场景下也可能出现性能问题,如连接池数量限制会影响API接口的QPS性能,因为连接数用光之后,剩下的请求只能等待,而HTTP请求在并发时会有多个协程交替并发执行[^5]。 以下是一个简单的Python示例,使用`requests`库发送HTTP请求: ```python import requests response = requests.get('https://example.com') print(response.text) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Testingba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值