转发:http://blog.csdn.net/mayao11/article/details/7552384python
需求是:一种移动或web游戏的服务器,要求是尽可能保证维护简单,框架尽量简洁,代码量不宜过多;考虑1人非全职进行服务器维护,不该对运维形成太大难度。web
首先,必须使用RakNet,可用的游戏服务器框架很稀有,这是其中一个开源框架,底层提供完整的可靠UDP协议,上层有完整的封装,不得不用。数据库
其次,客户端采用C++、Lua编写,其中逻辑部分彻底使用Lua编写。服务器须要作一部分验证工做,因此应当部分复用相关逻辑。编程
技术试验结论以下:服务器
一、利用HTTP服务器创建游戏服务器。很是简单粗暴的思路,作起来很快,可是在HTTP服务里服务器没法主动发出请求,因此某些交互方面的需求几乎不可实现。经讨论放弃。框架
二、RakNet彻底采用C++编写,维护难度适中。RakNet的Patcher服务器官方建议采用PostgreSQL做为数据库,缘由是MySQL的部分功能支持不正常。好比截取数据库里超长字符串其中的一段会很是的慢。运维
三、DB中间件(ORM),可选择范围:C++库可选ODB,Python库可选SQLAlchemy。ide
四、接口生成器SWIG。用于将C++的库(例如RakNet)所有半自动化注册到其余语言,经试验难度适中,可行。尚存在问题:回调函数的注册,远程过程调用RPC的注册尚未调查过。函数
五、Python的使用方式有两种:一是将C++的底层库彻底注册给Python使用,另外一种是让C++调用Python模块的接口。性能
六、Lua的技术实现上预计不存在太大问题。服务器端逻辑相关代码基本肯定采用Lua编写。
七、早上的新发现:Lua与Python混合编程:Lunatic Python。 Being two-way means that it allows Lua inside Python, Python inside Lua, Lua inside Python inside Lua, Python inside Lua inside Python, and so on. 霸气侧漏。不知道你敢不敢用,我反正敢用。另外有Lunatic Python的Lua-jit优化版本:lupa。网址分别为:
http://labix.org/lunatic-python
http://pypi.python.org/pypi/lupa/0.9
八、早上的新发现:Cython。支持用一种特制的语法编写看起来是Python,实际是C的代码,以后能够将其编译为C语言级别的动态连接库。在数学运算、函数调用方面极大下降开销,加快速度。能够用在项目中后期优化的时候。特此记录。
重要优缺点介绍:
一、C++的ORM库ODB据百度说是最佳选择之一,但仔细研究了一成天帮助手册和实际试验,发现此库要求用户使用C++11的新特性,大量使用#pragma等编译器特殊语法,Table的关联是用多种不一样类型的智能指针实现的。而且此库底层提供了相似boost的改装库,提供了比boost更丰富的智能指针例如lazy_shared_ptr。这些高级功能必然会被使用到。(我很想说:这货不是C++。)
此外,因为C++须要被编译,因此ODB在使用时不是彻底自动化的,其使用分解为两大步:分析头文件生成胶水层、而后编译连接用户代码和胶水层。
二、SQLAlchemy使用上很是简单,能够经过简单设计实现数据库初始化、操做一体化。且本人对Python的了解程度远高于C++十一、boost等。其致命缺点在于一旦采用Python相关技术,势必要在C++/Python接口上下不少功夫。
三、SWIG的致命问题在于——移植库的过程是一个考验C++/其余语言语法基本功的过程,很是有挑战。实现难度:4星半,但能够一试。
计划在上述条件下设计服务器框架,目前剩余问题是C++如何用简单的方式调用Python接口。预计今日(2012-5-10)晚得出结论。
——————————————————————————————————————————————————————
结论:彻底使用 Python + Lua(Lunatic Python)编写服务器
其中,RakNet库用SWIG将重要接口所有注册给Python,直接用Python编写高性能服务器!移植时有一些高级特性须要仔细看SWIG的在线文档,已试验经过。欢迎交流。