mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-22 02:53:09 +00:00
bugfix:cluster初始化节点的时候有可能导致消息乱序
This commit is contained in:
@@ -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 } )
|
||||
|
||||
Reference in New Issue
Block a user