skynet的cluster.send, 首次连接节点的时候,消息并不会马上发出, 而是会放到task_queue里面,等到这次任务做完之后执行.
这样就会导致一个问题, 如果希望在服务退出前发送一条消息出去, 也就是在skynet.exit前调用cluster.send, 如果是第一次连接这个集群节点, 那么消息就会丢失
解决办法是, 在skynet.exit之前, 等待所有task_queue执行完
function cluster.wait_task_queue()
local now = skynet.time()
while #task_queue > 0 do
if skynet.time() - now >= MAX_WAIT_TIME then
---- do something
end
skynet.sleep(1)
end
end