工作内容
入职将近一年,最近半年工作内容繁琐但不复杂,游戏里的脚本逻辑都有接触,例如跨服玩法、新卡开发等;期间也接触了一些
web服务器架构例如nginx+redis,nginx+uwsgi+redis;同时也入门了客户端,用编辑器做了些UI,做了两个活动的客户端部分。
下面是2015年1月-2015年7月的主要工作内容:
- 结缘、同修、缘替换
- 新卡白晶晶
- 情人节活动
- GM元宝冻结与解冻
- 植树节活动
- 基于web的GM聊天
- xx暖心周活动
- xx周年庆
- 天匠回购
- 好友十连搓
- 五一劳动节活动
- 基于web的领取序列号礼包功能
- 5.20游戏热爱者活动
- 父亲节、端午节活动
- 12图
- 仙灵店铺热点变更
- 幻境重置单个格子
- 奥林匹克日活动
- 暑假活动
- 打击代充功能
- 满月15活动(服务器和客户端)
- 立秋活动(服务器和客户端)
工作体会
工作环境
工作环境相比上家公司好了很多,不管是人文环境还是办公环境。
- 在这里工作感觉比较轻松、自由,同事之间处理问题时也没有严格的上下级关系。不像在上家公司中午不能午休,晚上必须多少点之后才能走,
各种绿卡、蓝卡分的清清楚楚 - 在这里可以参加各种技术培训、讲座,提升自己的技能。
- 在这里可以得到公司的充分信任,必要时也会开通引擎权限,没有上家公司的内网机、外网机这种奇葩的管理制度。
- 在这里合理的需求都可以得到解决,例如申请机器,申请内存。
然而也有一些问题需要解决:
- 办公的椅子什么时候可以换点好的?
- 空调可不可以不要经常坏。
- 开发机什么时候不再那么卡
- 客户端开发什么时候不要再频繁切windows和mac?ui编辑器必须得在windows使用,而客户端的编译却必须在mac下。。
工作内容
关于LPC
我觉得,LPC这门语言从使用角度来说或许并没有那么糟糕,既有动态脚本的优点能够热更新,又能够做足够的语法检查例如函数参数类型匹配等。mixed类型的支持又使它能够较大的提高工作开发的效率。
但是从语言设计的角度来说,略显奇怪,很难理解它的定位。
另外这门语言基本没有参考文档,很容易踩坑。如果说是因为简洁而没有文档,这实在说不过去,它远没有lua简洁。。可lua文档可是很丰富的文档。工作中也踩过一些坑:
- 记录排行榜的数据踩坑:
sprintf(gRank)
由于排行榜数据太多导致报错而影响后续逻辑执行 - key最大才65000,所以做玩法,设计数据结构的时候必须要考虑这个潜规则。。
关于跨服
跨服架构一般都是采用星座拓扑这种结构,相对于网状拓扑,它的特点是简单、简单还是简单。
当有些常规玩法经常用到中心服的时候,可以考虑单独增加这台玩法的中心服,这样原有的中心服的负载可以降低很多,同时也不会出现因为有某个跨服玩法问题而导致所有跨服玩法不可用的情况。
xx西游只有一个中心服,某次维护时也确实出现过上面的问题:游戏服向中心服传了很大的数据,而这些数据在中心服
都是需要存盘的,结果存盘时中心服的IO卡了半天,导致天梯一些跨服玩法都不可用。
xx西游的跨服数据的传送似乎是通过传送文件来实现的,这和我以前接触到的跨服实现有很大不同。以前公司采用的方案是:各种端点的通信都是采用定制好的协议,包括游戏服到数据库,游戏服到中心服等。两种各有优缺点:
- 通过文件传送,使我们不用事先写好协议格式,更注重游戏逻辑
- 通过定制好的协议传送,传送的数据肯定比文件传送的数据要小。
- 通过文件传送数据,按照G2的实现貌似还是会踩到LPC的65000这个坑
- 通过文件传送,只能在传送完一个文件之后才能传送第二个文件,这又有坑了。。
个人觉得跨服最难解决的就是数据同步问题,例如某个操作所产生的结果需要同时在多个服务器存盘,如果这条结果在某个服务器存下来了,但是其他服务器却在存盘前宕机了,就会造成数据不同步的问题。
我想并不是所有问题都可以通过定时更新cache来解决,何况设计一套更新cache的方案又增加了复杂度。不过说实话,也没有那么多宕机的情况出现。
关于数据库
我们现在用的服务器引擎Mudos貌似没有传统意义上的数据库的。这一点也和我以前接触的不一样。不过对比起来,没有数据库也没有想象中的可怕,至少在脚本层写起存盘数据相当简单。
现在基本上用SafeSet和DECLARE_PERM_VAL就可以解决,现在设置数据有点类似NoSQL的味道。而用MySQL有时候必须得考虑事先建表或者更改表,更改表是一件麻烦事,特别是操作外服的数据更是提心吊胆。
至于取数据不管是既有的方式还是MySQL都得采用异步、回调这种框架。
当然用数据库是一种更好的选择,现在外面基本所有的引擎都是用的数据库。数据库本身就已经做好相关数据存取管理了,还有各种丰富的功能例如索引、外键等。
关于引擎
对于引擎,现在了解还不多。不赘述,以后再写吧。
关于客户端
客户端引擎是cocos2dx 2.x版本,而UI的制作则依靠yy的UI编辑器
UI编辑器使用起来有点不习惯,每次调整数值后还得额外按下回车键才能看见效果。
现在还只是入门,了解了客户端大致架构,需要熟悉的则是用这款UI编辑器编写自定义控件了,自定义类了。
展望
一直这样认为,仅仅会写游戏脚本是没有啥出路的。
接下来学习下怎么使用mos,学习cocos2dx,不求能写出个引擎,至少会灵活使用。