Published on

skynet的服务共享内存

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