loop in codes

Kevin Lynx BLOG

tolua的tolua_toxxx系列API设计

我们使用tolua++手工绑定c/c++接口到lua中,在绑定的接口实现里,就需要取出传入的参数。tolua++中提供了一系列tolua_toxxx函数,例如:

lua_Number tolua_tonumber(lua_State *L, int narg, lua_Number def)
const char *tolua_tostring(lua_State *L, int narg, const char *def)

这些函数都有一个def参数。乍一看,这些函数使用起来很简单。传入lua_State,传入参数在栈中的位置,然后再传一个失败后返回的默认值。

我重点要说的是这里这个失败,按正常程序员的理解,针对lua而言,什么情况下算失败呢?lua语言里函数参数支持不传,此时实参为nil,将nil转换为一个c类型必然失败;参数类型不正确算不算失败?你传一个user data,c里按数字来取,这也算失败。

谈谈我们的游戏逻辑服务器实现(二)

上一篇谈了一些关键技术的实现方案。本篇描述一些遇到的问题。

在策划制作完了几个职业后(主要是技能制作),大概去年年底公司内部进行了一次混战测试。30个角色在一个场景进行混战,测试结果从技术上来说非常不理想。首先是客户端和服务器都巨卡无比。服务器CPU一直是满负载状态。而客户端又频繁宕机。

我们关注的主要问题,是服务器CPU满负载问题。最开始,我通过日志初步定位为网络模块问题,因为逻辑线程表现不是那么差。然后考虑到技能过程中的特效、动作都是通过服务器消息驱动,并且本身特效和动作就比一般网游复杂,通过逐一屏蔽这一部分功能,最终确认确为网络模块导致。然后团队决定从两方面努力:重写网络模块,改善性能;改善技能实现机制,将表现类逻辑移到客户端。

谈谈我们的游戏逻辑服务器实现(一)

我们的逻辑服务器(Game Server,以下简称GS)主要逻辑大概是从去年夏天开始写的。因为很多基础模块,包括整体结构沿用了上个项目的代码,所以算不上从头开始做。转眼又快一年,我觉得回头总结下对于经验的积累太有必要。

整体架构

GS的架构很大程度取决于游戏的功能需求,当然更受限于上个项目的基础架构。基础架构包括场景、对象的关系管理,消息广播等。

使用Github Page来写博客

最开始知道Github Page,是通过codertrace上的某些注册用户,他们的BLOG就建立在Github Page上,并且清一色的干净整洁(简陋),这看起来很酷。

Github提供了很多很合coder口味的东西,例如Gist,也包括这里提到的Page。Page并不是特用于建立博客的产品,它仅提供静态页面的显示。它最酷的地方,是通过Git的方式来让你管理这些静态页面。通过建立一个repository,并使用markdown语法来编写文章,然后通过Git来管理这些文章,你就可以自动将其发布出去。