cluster 集群组网
Author: fanyhCreated Jan 14, 2022Updated May 15, 2025
云大侠,我在某业务场景中需要实现 cluster 组网 skynet 进程都是等价的slave(不是使用master-slave模式) 目前cluser的配置只能声明
nodename = "nodeaddress"我期望的输入方式
slave = {
"address",
"address"
}loadconfig中config已经规定了cluser的配置格式
for name,address in pairs(tmp) do
if name:sub(1,2) == "__" then
name = name:sub(3)
config[name] = address
skynet.error(string.format("Config %s = %s", name, address))
else
assert(address == false or type(address) == "string")
if node_address[name] ~= address then
-- address changed
if node_sender[name] then
-- reset connection if node_sender[name] exist
node_channel[name] = nil
table.insert(reload, name)
end
node_address[name] = address
end
local ct = connecting[name]
if ct and ct.namequery and not config.nowaiting then
skynet.error(string.format("Cluster node [%s] resloved : %s", name, address))
skynet.wakeup(ct.namequery)
end
end
end #Question: 我想问的是: 业务层不关心目标node在哪的情况下
可以对cluster进行扩展 支持 array吗?
还是自行将cluster包装一次 在wrapper中调度cluster (wrapper 中可以实现load level) ,例如: wrapper.lua:
local config = {
slave = {
"slave1", --cluster config key
"slave2"
}
}
local wrapper = {}
function wrapper.call(name, ...)
local slave = assert(config[name], name)
local name = slave[math.random(1, #slave)] --load level
cluserd.call(name, ...)
end
wrapper.call( slave, ...)这样就存在一个问题 cluster配置会变得臃肿 name将变成一个无意义的key cluser
slave1 = "address"
slave2 = "address"Source: cloudwu/skynet