cloudwu / skynet

A lightweight online game framework

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

多agent,服务之间发送消息延迟过高

yfengworld opened this issue · comments

function CMD.request(id, addr)
socket.start(id)

local code, url, method, header, body = httpd.read_request(sockethelper.readfunc(id), 8192)
--syslog.trace("---------------------code:%s %s, %d, %d",code, method, id, skynet.self())
if code then
local origin = header['origin']
if 'OPTIONS' == method then
response(id, 200, '', origin)
socket.close(id)
return
end

if code ~= 200 then
  response(id, code, '', origin)
  socket.close(id)
else
  local usrname = header["username"]
  -- trace("----- usrname:[%s]", usrname)
  local session_id = header["sessionid"]
  if not usrname then
    response(id, 400, "header username no set", origin)
    socket.close(id)
  else
    usrname = tostring(usrname)
    local ret = skynet.call(database, "lua", "allow_login", usrname, addr)
    if not ret then
      response(id, 503, "server maintain", origin)
      socket.close(id)
      return 
    end 

    local agent = skynet.call(agentmgr, "lua", "query", usrname)
    if not agent then --极端情况
      response(id, 503, "server busy", origin) 
      socket.close(id)
      return 
    end

    --转到agent去处理
    socket.abandon(id)
    skynet.send(agent, "lua", "request", id, body, session_id, usrname, origin)
  end
end

else
if url == sockethelper.socket_error then
skynet.error("socket closed")
else
skynet.error(url)
end
socket.close(id)
end
end

这是webagent里的代码,send数据到agent服务,随着消息变多,agent那边收到消息的延迟很大