diff --git a/src/agent.lua b/src/agent.lua index cf6e8ac..b7b5fd7 100644 --- a/src/agent.lua +++ b/src/agent.lua @@ -356,11 +356,6 @@ skynet.start(function() return info end) - redisd = skynet.localname(".redis") - if tonumber(skynet.getenv "logd") == 1 then - logd = skynet.localname(".log") - end - cs = queue() pvpd = skynet.localname(".pvpcross") diff --git a/src/main.lua b/src/main.lua index d967df0..9d6edc5 100644 --- a/src/main.lua +++ b/src/main.lua @@ -2,23 +2,41 @@ local skynet = require "skynet" local max_client = tonumber(skynet.getenv("max_client")) local max_queue = tonumber(skynet.getenv("max_queue")) +local work_count = tonumber(skynet.getenv("thread")) +local use_logd = tonumber(skynet.getenv("logd")) skynet.start(function() print("Server start") skynet.newservice("debug_console", tonumber(skynet.getenv("debug_port"))) + + -- 启动redis + for i = 1, work_count do + local redisd = skynet.newservice("services/redisd", i) + skynet.call(redisd, "lua", "open", { + redishost = skynet.getenv("redis_host"), + redisport = tonumber(skynet.getenv("redis_port")), + redisdb = tonumber(skynet.getenv("redis_db")), + auth = skynet.getenv("redis_auth") + }) + end + + --启动log + if use_logd == 1 then + for i = 1, work_count do + local logd = skynet.newservice("services/logd", i) + skynet.call(logd, "lua", "open") + end + end + local httpd = skynet.newservice("services/httpweb", tonumber(skynet.getenv("httpweb_port"))) local watchdog = skynet.newservice("services/watchdog", max_client) + skynet.call(watchdog, "lua", "start", { port = tonumber(skynet.getenv("server_port")), maxclient = max_client + max_queue + 10, httpd = httpd, - - redishost = skynet.getenv("redis_host"), - redisport = tonumber(skynet.getenv("redis_port")), - redisdb = tonumber(skynet.getenv("redis_db")), - auth = skynet.getenv("redis_auth"), }) skynet.exit() diff --git a/src/models/RoleLog.lua b/src/models/RoleLog.lua index e70e730..218b534 100644 --- a/src/models/RoleLog.lua +++ b/src/models/RoleLog.lua @@ -1,5 +1,6 @@ local serverId = skynet.getenv("servId") local server_id = (skynet.getenv("serverType") or "localtest") .. "_" .. serverId +local logproxy = require "shared.logproxy" --[[ 100 购买/兑换行为 @@ -765,8 +766,7 @@ function RoleLog.bind(Role) end end end - if not logd then return end - pcall(skynet.send, logd, "lua", "log", doc, "bi") + logproxy:log(doc, "bi") end function Role:logItems(itemId, before, after, log) @@ -825,8 +825,7 @@ function RoleLog.bind(Role) end end doc["@type"] = logType - if not logd then return end - pcall(skynet.send, logd, "lua", "log", doc, "log") + logproxy:log(doc, "log") end diff --git a/src/services/agent_ctrl.lua b/src/services/agent_ctrl.lua index d41abd0..ebfaf05 100644 --- a/src/services/agent_ctrl.lua +++ b/src/services/agent_ctrl.lua @@ -6,6 +6,7 @@ local xxtea = require "xxtea" local deque = require "deque" local datacenter = require "skynet.datacenter" local agent_queued = require "services.agent_queued" +local logproxy = require "shared.logproxy" local pcall = pcall local string_format = string.format @@ -139,11 +140,11 @@ function _M:check_agent_status() end end - if now >= next_log_time and now % 60 == 0 and logd then + if now >= next_log_time and now % 60 == 0 then next_log_time = now + 60 local count = table_nums(self.u2f) datacenter.set("onlineCount", count) - pcall(skynet.send, logd, "lua", "log", {["@type"] = "online", count = count}, "log") + logproxy:log({["@type"] = "online", count = count}, "log") end end diff --git a/src/services/dbseed.lua b/src/services/dbseed.lua index a0ab92d..62d7052 100644 --- a/src/services/dbseed.lua +++ b/src/services/dbseed.lua @@ -34,8 +34,6 @@ local steps = { } skynet.start(function () - redisd = skynet.localname(".redis") - redisproxy = require("shared.redisproxy") local new = redisproxy:hsetnx("autoincrement_set", "server_start", os.date("%Y%m%d", skynet.timex())) == 1 diff --git a/src/services/globald.lua b/src/services/globald.lua index b841007..48e4fa4 100644 --- a/src/services/globald.lua +++ b/src/services/globald.lua @@ -190,7 +190,6 @@ local function __init__() end end end) - redisd = skynet.localname(".redis") skynet.register(".globald") end diff --git a/src/services/httpweb.lua b/src/services/httpweb.lua index 11c5cb5..536ad59 100644 --- a/src/services/httpweb.lua +++ b/src/services/httpweb.lua @@ -53,12 +53,8 @@ end local CMD = require "actions.HttpAction" local function start() - redisd = skynet.localname(".redis") globalCsv = csvdb["GlobalDefineCsv"] - if tonumber(skynet.getenv "logd") == 1 then - logd = skynet.localname(".log") - end local listen_socket = socket.listen("0.0.0.0", port) print("Listen web port " .. port) diff --git a/src/services/logd.lua b/src/services/logd.lua index be95bbd..2436a06 100644 --- a/src/services/logd.lua +++ b/src/services/logd.lua @@ -2,12 +2,12 @@ local skynet = require "skynet" local queue = require "skynet.queue" local bson = require "bson" local socketdriver = require "skynet.socketdriver" - local serverId = tonumber(skynet.getenv("servId")) require "shared.init" require "skynet.manager" +local logdIdx = ... local table_insert = table.insert local pairs = pairs local ipairs = ipairs @@ -15,6 +15,7 @@ local string_format = string.format local logId = 0 local CMD, cs = {} +local prefix = "wasteland" .. logdIdx .. "S" .. serverId .. "C" local logHandle = { bi = { @@ -33,7 +34,7 @@ local logHandle = { doc["game_name"] = "wasteland" doc["env"] = "cb" doc["game_name_type"] = "guaji" - doc["log_id"] = "wastelandC" .. logId .. "S" .. serverId .. "T" .. now + doc["log_id"] = prefix .. logId .. "T" .. now logId = (logId + 1) % 10000000 end }, @@ -135,7 +136,7 @@ local function __init__() end) cs = queue() - skynet.register(".log") + skynet.register(".logd" .. logdIdx) end skynet.start(__init__) diff --git a/src/services/pvpd.lua b/src/services/pvpd.lua index 2642b11..9861631 100644 --- a/src/services/pvpd.lua +++ b/src/services/pvpd.lua @@ -289,7 +289,6 @@ end ------------------------------------------------------ function CMD.start() - redisd = skynet.localname(".redis") globalCsv = csvdb["GlobalDefineCsv"] pvpInfo = require("models.Pvpd").new({key = "cross:pvpInfo"}) diff --git a/src/services/redisd.lua b/src/services/redisd.lua index e960a07..873f56b 100644 --- a/src/services/redisd.lua +++ b/src/services/redisd.lua @@ -3,7 +3,7 @@ require "skynet.manager" local redis = require "skynet.db.redis" local db - +local idx = ... local command = {} function command.open(conf) @@ -27,5 +27,5 @@ skynet.start(function() skynet.info_func(function() return skynet.stat("mqlen") end) - skynet.register ".redis" + skynet.register(".redis" .. idx) end) \ No newline at end of file diff --git a/src/services/watchdog.lua b/src/services/watchdog.lua index 2f7a8c7..d9cd59a 100644 --- a/src/services/watchdog.lua +++ b/src/services/watchdog.lua @@ -1,6 +1,5 @@ local skynet = require "skynet" require "skynet.manager" -local redisproxy = require "shared.redisproxy" local socket = require "skynet.socket" local netpack = require "skynet.netpack" local datacenter = require "skynet.datacenter" @@ -47,7 +46,7 @@ function SOCKET.data(fd, msg) end end -local use_logd = tonumber(skynet.getenv "logd") + -- @desc: agent状态定时检测 function check_agent_status() @@ -65,11 +64,7 @@ end function CMD.start(conf) skynet.call(gate_serv, "lua", "open" , conf) - skynet.call(redisd, "lua", "open", conf) - - if use_logd == 1 then - skynet.call(logd, "lua", "open") - end + skynet.call(pvpd, "lua", "start") -- 开启agent状态检测定时器 check_agent_status() @@ -110,17 +105,11 @@ skynet.start(function() end end) skynet.register ".watchdog" - -- 数据库服务 - redisd = skynet.newservice("services/redisd") -- 提前加载好 csvdata.init() print("launch csvdatad ...") - -- 日志服务 - if use_logd == 1 then - logd = skynet.newservice("services/logd") - end -- pvp 服务 pvpd = skynet.newservice("services/pvpd") cluster.register("pvpd", pvpd) diff --git a/src/shared/logproxy.lua b/src/shared/logproxy.lua new file mode 100644 index 0000000..9c84b9a --- /dev/null +++ b/src/shared/logproxy.lua @@ -0,0 +1,23 @@ + +local skynet = require "skynet" +local logd_count = tonumber(skynet.getenv("thread")) +local use_logd = tonumber(skynet.getenv("logd")) + + +local logd +skynet.init(function() + if use_logd then + local idx = math.randomInt(1, logd_count) + logd = skynet.localname(".logd" .. idx) + end +end) + +local logproxy = {} + +function logproxy:log(doc, logTo) + if use_logd and logd then + pcall(skynet.send, logd, "lua", "log", doc, logTo) + end +end + +return logproxy \ No newline at end of file diff --git a/src/shared/redisproxy.lua b/src/shared/redisproxy.lua index 7c60913..bff1761 100644 --- a/src/shared/redisproxy.lua +++ b/src/shared/redisproxy.lua @@ -1,11 +1,17 @@ local skynet = require "skynet" -local harbor = require "skynet.harbor" +require "utils.init" + +local redisd_count = tonumber(skynet.getenv("thread")) +local redisd +skynet.init(function() + local idx = math.randomInt(1, redisd_count) + redisd = skynet.localname(".redis" .. idx) +end) local table_insert = table.insert local redisproxy = {} - local isUsePika = false -- libgit2 0.21.2