有個手機軟體需要很頻繁的呼叫伺服器端介面,你知道的,每個位元組都是錢呀,錢呀錢,命相連呀。本來已經有個現成的tomcat的http(get/post)的介面,但是擔心流量消耗太大,需要做個評估,看是採用http介面,還是使用多執行緒的socket udp介面,於是就有了下面這一出。
序號工具
描述1.
nclinux下的著名socket除錯瑞士軍刀,系統自帶
2.
tcpdump
linux下抓包工具,系統自帶,不過需要root許可權
3.
wget
linux下http的呼叫工具,系統自帶
4.
sockettools
wins綠色版本的socket除錯工具,這個在上次講loadrunner的socket指令碼錄製裡面提到過使用方法
5.
wiresharkportable.exe
6.
winscp.exe
ssh連線linux,使用sftp協議傳回抓包檔案
第一部分:
socket(udp)通訊過程消耗位元組數測試方案:
1. linux上開啟抓包:sudotcpdump -i eth0 -n -vv -v -s 0 -w ***x.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 == *** and ip.dst == yyy and ip.proto == 17
ip.proto == 17 這個就是udp協議,將***和yyy替換成你的源和目標位址
結果:就乙個udp資料報:52+24=76個位元組,也就是說如果你傳送24個位元組,附帶上包頭什麼的一共76個位元組,沒資料就52個位元組。
第二部分:
http通訊過程消耗位元組數測試方案:
1. linux上進行抓包:sudotcpdump -i eth0 -n -vv -v -s 0 -w ***x.cap
2. linux上wget呼叫url:wget url
3. 停止抓包;
4. 使用winscp傳回資料報進行分析
結果:過濾條件表示式1:ip.src == *** 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 == ***
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做後台服務吧;
如果你的手機軟體打算盡可能多的消耗流量,就別用udp了。
這個是純理論推導的,可能真到用的時候,電量消耗比流量消耗還要命。
http介面和webservice介面的區別
什麼是web service?soap請求是http post的乙個專用版本,遵循一種特殊的xml訊息格式content type設定為 text xml任何資料都可以xml化。為什麼要學習web service?大多數對外介面會實現web service方法而不是http方法,如果你不會,那就沒有...
webservice介面與HTTP介面
推薦文章 真的寫的很詳細 webservice介面與http介面區別 http介面走http協議,通過路徑來區分呼叫方法,請求報文一般是key value形式的,返回報文一般是json串,常用的是get和post方法來請求。webservice介面走的soap協議,通過http傳輸,請求報文和返回報...
介面和http協議(一)
一 介面 硬體介面和軟體介面 軟體介面 前台和後台傳遞資料的通道 api web api http api 和 其他api 我們通常所說的api就是web api http api,需要聯網,需要使用web協議,而其他api不需要聯網,不需要使用web協議,比如os.path.abspath 此處就...