diff --git a/lualib/skynet/cluster.lua b/lualib/skynet/cluster.lua index c1633d3e..926d387f 100644 --- a/lualib/skynet/cluster.lua +++ b/lualib/skynet/cluster.lua @@ -3,11 +3,26 @@ local skynet = require "skynet" local clusterd local cluster = {} local sender = {} +local inquery_name = {} local function get_sender(t, node) - local c = skynet.call(clusterd, "lua", "sender", node) - t[node] = c - return c + local waitco = inquery_name[node] + if waitco then + local co=coroutine.running() + table.insert(waitco, co) + skynet.wait(co) + return rawget(t, node) + else + waitco = {} + inquery_name[node] = waitco + local c = skynet.call(clusterd, "lua", "sender", node) + inquery_name[node] = nil + t[node] = c + for _, co in ipairs(waitco) do + skynet.wakeup(co) + end + return c + end end setmetatable(sender, { __index = get_sender } )