HomeServer/test/testtimeout.lua
2024-11-20 15:41:37 +08:00

53 lines
1014 B
Lua

local skynet = require "skynet"
local service = require "skynet.service"
local function test_service()
local skynet = require "skynet"
skynet.start(function()
skynet.dispatch("lua", function()
skynet.error("Wait for 1s")
skynet.sleep(100) -- response after 1s for any request
skynet.ret()
end)
end)
end
local function timeout_call(ti, ...)
local token = {}
local ret
skynet.fork(function(...)
ret = table.pack(pcall(skynet.call, ...))
skynet.wakeup(token)
end, ...)
skynet.sleep(ti, token)
if ret then
if ret[1] then
return table.unpack(ret, 1, ret.n)
else
error(ret[2])
end
else
-- timeout
return false
end
end
skynet.start(function()
local test = service.new("testtimeout", test_service)
skynet.error("1", skynet.now())
skynet.call(test, "lua")
skynet.error("2", skynet.now())
skynet.error(timeout_call(50, test, "lua"))
skynet.error("3", skynet.now())
skynet.error(timeout_call(150, test, "lua"))
skynet.error("4", skynet.now())
skynet.exit()
end)