基于lua服务器

来源:互联网 发布:平板电脑淘宝开店认证 编辑:程序博客网 时间:2024/06/15 15:17
http://blog.csdn.net/lalate/article/details/51498869

1> 显示运行状态;
2> 显示即时运行日志;
3> 发送公告;
4> 重启和关服;
5> lua调试功能;
6> gm验证相关;
7> 更新操作(静态表或lua);

服务器搭建:libEvent     ace   boost::asio
http://code.google.com/p/spserver/

  -           router: 数据转发,多进程按负载分担,支持点对点,广播,主从,哈希等几种常见的数据转发逻辑.

-            gamesvr: 提供客户端接入逻辑,以及常规的游戏逻辑(如道具,商城,等等...), 多实例按负载分担.

-            dbagent: 提供数据库访问服务,多进程按哈希分布.

-            matchsvr: 提供战斗匹配服务,多进程主从备份.

方便在进程间通信:
       代码自动热更新

  lua 后期  基于 序列化和反序列化  远程调用
                  数据存储
skynet  




// class 声明中需要插入一行 DECLARE_LUA_CLASS
class CPlayer
{
    char m_szName[32];
    int m_iLevel;
    int luaSay(lua_State* L);
    DECLARE_LUA_CLASS(CPlayer); // 声明导出CPlayer类
};


// 在 CPP 中增加如下的导出声明
IMPL_LUA_CLASS_BEGIN(CPlayer)
EXPORT_LUA_STRING(m_szName)
EXPORT_LUA_INT(m_iLevel)
EXPORT_LUA_FUNCTION(luaSay)
IMPL_LUA_CLASS_END()

int CPlayer::luaSay(lua_State* L)
{
    // ...
    return 0;
}
  void OnPlayerLogin(lua_State* L, int iConnIdx, CPlayer* player)
{
    CSafeStack guard(L);
    // 除了获取文件中的函数,还有其他的相关的API
    // 用来获取影子对象上的函数,以及全局 table 中的函数等等
    Lua_GetFileFunction(L, "login.lua", "OnPlayerLogin");
    lua_pushinteger(L, iConnIdx);
    Lua_PushObject(L, player);
    Lua_XCall(L, 2, 0);
}

function OnPlayerLogin(connIdx, player)
    --访问成员变量: 读
    log_debug("player login, name="..player.szName);
    --访问成员变量: 写
    player.iLevel = 1;
    --调用成员函数
    player.Say("皇上吉祥");
    --在player对象上加入新的函数/变量
    player.OnExit = function()
        -- do something !
    end
end