大家好,请教一个问题:
背景:
在做一个下载速度测试的小工具,使用
ngx.say(***)
ngx.flush(true)
然后统计这个过程的时间(服务端和测试端不在一个网段)
问题:如果ngx.say的数据量相对较小(100KB),这个过程的时间是微秒级别的(几百微秒,浏览器Content Download的时间是几百毫秒),导致算出的速度非常离谱;
如果数据量较大一些(200KB),这个过程的时间是毫秒级别的(几百毫秒,浏览器Content Download的时间的几百毫秒);
是我的使用方式不对吗?为何差距如此大?
测试代码:
-- test.lua
local util = require("util")
local m_kb = 100
local function get_str()
local str = ""
for i=1, m_kb * 1024 do
str = str .. "*"
end
return str .. "\n"
end
local str = get_str()
local ust1 = util.get_usec()
local st1 = util.get_sec()
ngx.say(str)
ngx.flush(true)
local ust2 = util.get_usec() -- ngx.now()
local st2 = util.get_sec()
local t = ((st2-st1)*1000000 + (ust2 - ust1))
ngx.log(ngx.ERR, t)
-- util.lua
local _M = {}
local ffi = require("ffi")
ffi.cdef[[
typedef long time_t;
typedef struct timeval {
time_t tv_sec;
time_t tv_usec;
}timeval;
int gettimeofday(struct timeval* t, void* tzp);
]]
function _M.get_sec()
local t = ffi.new("timeval");
ffi.C.gettimeofday(t, nil);
return tonumber(t.tv_sec);
end
function _M.get_usec()
local t = ffi.new("timeval");
ffi.C.gettimeofday(t, nil);
return tonumber(t.tv_usec);
end
return _M