昨天发布完《远古大陆》(以下简称“远古”)的Google Play版本,然后也将黑莓还有AppStore的版本提交之后,轻松了不少,看到玩家进来游戏,刹那间感觉有很多话想说。
但当我打开博客,新建文字的时候,却什么也想不起来了。最近正在开一本叫《黑天鹅》的书,是关于对于未来不确定性如何看待并且处理的书,其中有关预测的叙述谬误中谈到人们只对成功的结论感兴趣,只会听取成功人士对于成功的技术、性格、市场的描述,而不会听取一个失败者关于这些事情的描述,即便在两者描述相当情况下。
我现在恐怕离现实意义上的“成功”还很远,那么写下这些结论又有多少人能够看到,多少人能够赞同呢?这边是我满腹的理论——技术的、市场推广的,人际关系的,那边是现实中的不顺利,哎,致使我现在却也什么都想不起来了。
带团队、做项目,甚至开公司,最后成功则到处说教,最后失败则到处吐苦水,要么变成教主,要么变成怨妇,很显然,两者我都很鄙视。那我应该说什么呢?我是技术人员,还是说一下技术吧,毕竟我是技术人员,技术出身,而且只有技术是中性,行就行,不行就不行,没有感情色彩。
—–现在脱离大众,只谈技术相关,不感兴趣者自觉右上角或者Alt+F4—–
一、关于游戏用什么方式建立服务器并存储数据?
之前4年跟一个老大创业,做PC客户端网游,4个人发展到40多个人,从最简单的一个场景,做到最后非常庞大的经济、交友系统,大家信心满满,最后上线的时候,服务器每次到几千人同时在线的时候,一顿挂,各种回档,玩家就跑了,合作老板也跑了,员工也跑了,为啥呢?还是那句话,技术瓶颈。
当时是用C++和MySQL数据库,而且为了所谓的效率问题,使用了一个中转服务器作为数据跳板,就像前台开房的服务员把门卡交个一个服务生,然后有那位服务生带你去房间,而不是前台服务员亲自带你去,然后再回来处理下一个客户。虽然这有些好处,但是作为中转数据的跳板,或者服务器本身出现问题,就会导致一个最严重的问题:回档,就是你玩的进度没了,丢失了。因为当时做PC客户端网游的时候,大多数厂商的游戏产品都会面临这个问题,所以我们也没有去深究他,只要把导致服务器挂掉的bug处理掉,就可以了,虽然不可能完全解决掉。
然后我到了另外一个公司,做手游的,跟着其他人学做手机游戏,也有服务器,服务器的主程序以前是做银行系统的,为了一睹服务器的风采,人手不够的时候,我自暴还算会点java(语盒服务器就是java写的),被项目经理抓去写了一个关于服务器模块,下载到了服务器所有的代码。
原来,服务器还可以这么写:将数据库直接当内存操作。用户协议来了,不管3721,直接判断写库再说,这种类似HTTP方式的无状态处理,确实非常安全,如果服务器挂掉了,那么顶多损失上一次协议包的信息,而且客户端也会知道(HTTP的response)没有操作成功从而提示用户。同时还使用了一个叫redis的NoSql数据库做缓冲(在少数特殊的模块上使用),在排名系统上面几乎是实时的,而之前做端游的时候,只能每天一刷新。
在这种新方式的影响下,之前端游服务器架构完全丧失了优势。事实也证明,用Java+Netty+MySql+Redis的方式,跑在linux机器上,可以放在那里不用管一直运行,而之前的C+MySql+Windows Server的方式,每周不得不维护一次,虽然我们一直没有做到过那个用户规模。
至于远古用的什么方式,这里还是不说了,我肯定改进过上述两种方式。因为,目前未来一团迷雾,我不想变成教主或者怨妇。
二、关于Unity和黑莓的技术。
其实我开始做这个远古项目,有很大的冲动,原因是Unity出了黑莓Player。在语盒的时候,我自认为在黑莓上有些资源,能够将我新开发的BB10的游戏发布出来,让很多的黑莓用户用到,想法很简单。但现在看来还是有很多坑的,先摒弃推广的坑不说,说说Unity打包黑莓的事情。
1、首先Unity黑莓Player不支持C#的Socket模块。
也就是说无法使用socket网络,对于大型多人在线的游戏来说,这个简直是噩梦。我一共花了2个24小时解决这个问题,还好,我学过C/C++语言,而且Unity提供黑莓的内建插件,C#不提供,我自己写Native的C模块嘛。
2、其次黑莓的账号登陆问题。
目前手游环境比之前的端游环境好了一些(对中小开发商来说),其中最大的一个体现就是不需要自己完成账号数据库的开发了,我们只需要接入一个账号系统,比如谷歌账号,AppStore 的GameCenter账号,就能得到用户的账户信息,然后使用这个唯一的固定的UID码可以登录直接玩游戏了,账号的管理,验证等等都不需要做了。
黑莓事实上也提供非常方便的游戏帐号方式,Scoreloop,而且做了很多工作,比如专门为其写了一个插件,方便使用,可惜哇,网络问题成为最大的问题,Scoreloop 目前在大陆访问简直是噩梦,同样在手机上也是。很多用户下载之后,直接评论,wifi环境下无法登陆游戏。好吧,还是直接用手机UID登陆吧~
3、Flurry的使用。
关于手机应用时代的一个好处,自己也不需要做用户行为分析了,不用写数据库脚本分析用户今天登陆了多少,昨天流失了多少,很多第三方的软件就帮你做了,flurry就是其中的佼佼者,好吧,Flurry确实提供BB10的版本,但是他没有提供Unity的版本,更没有提供Untiy BB10 Player的版本,需要自己制作。
总共花了1个24小时完成了这个工作,从将a文件拆开,然后找到依赖库,最后写成so文件,就像把linux命令复习了一边,又一个噩梦。
在黑莓Beta版本上线的前几天,我一天只睡几个小时,不过好在后来解决了,都解决了,这是对一个技术人员最好的安慰——而不是奋战几十个小时,最后还是不行要强很多。
4、关于发布到Windows Phone。
不知道Unity for WindowsPhone 的小组为何会使用手机自带的C#运行环境,而不是还是用Mono虚拟机,这样导致很多苦用不了,比如Socket库等等,折腾了一两天,因为WindowsPhone不是黑莓,我在上面并没有什么资源,所以放弃了。
游戏已經被玩家林民民破解
淡定,只是一个服务器广播小bug,没有攻破滴说,已经更新好了。