Python中词语游戏服务器的设计优缺点?
我想在冬天做一个编程项目,打算写一个在线文字游戏(可以同时支持大约500个用户)。我希望这个游戏能在不同的平台上都能运行。我打算用Python来写,因为我对这个语言有一些了解。关于用户数据存储,之前用过MySQL,所以我觉得用简单的数据库设计会更好,但这不是必须的。好吧,现在我有几个问题:
我应该从Python 3开始吗?还是说它对以前版本的模块支持还不够好?
使用Python 3对我的项目有什么特别的好处吗?我是不是应该考虑用其他语言,比如Erlang?
在游戏服务器中使用关系型数据库有什么明显的好处吗?
有没有什么开源的游戏服务器代码值得在开始之前学习一下?
5 个回答
关于你选择的数据库,我建议你认真考虑使用Postgres,而不是MySQL。在我使用这两者的经验中,Postgres在大多数写入操作上表现得更快,而MySQL在读取方面稍微快一些。
不过,MySQL也有很多问题,其中一些包括:
- 实时备份非常困难,最糟糕的情况下几乎是不可能的,通常你需要让数据库离线,或者在备份时让它锁定。
- 如果需要强制关闭服务器,比如使用kill -9命令,或者因为停电,Postgres通常对表损坏的恢复能力更强。
- 对ACID合规性和其他关系型数据库特性的全面支持,而在我看来,MySQL在这些方面的支持较弱或缺失。
不过,你可以使用像SQLAlchemy这样的库来简化数据库访问。这样你可以同时测试这两种数据库,看看你更喜欢哪个。
至于编程语言的选择:
如果你选择Python:
- 目前更多的库支持Python 2.x,而不是Python 3.x,所以我建议你还是用2.x。
- 要注意Python的全局解释器锁(GIL)带来的多线程问题。使用Twisted可以绕过这个问题。
如果你选择Erlang:
- Erlang的语法和用法对从未使用过的人来说可能会很陌生。
- 如果写得好,它不仅能扩展,而且能大规模扩展。
- Erlang有自己的高并发Web服务器,叫做Yaws。
- Erlang还有一个高度可扩展的数据库管理系统,叫做Mnesia(注意它不是关系型的)。
所以,我想你的选择可以归结为你愿意为这个项目学习多少东西。
我推荐使用Python加上Django。这样做可以让开发网页应用变得非常简单。
开始学习Python 3值得吗?还是说它对以前版本的模块支持还不够好?
这要看你想用哪些模块。比如,twisted是一个非常强大的网络编程工具,可能适合你的项目,但不幸的是,它目前还不支持Python 3。
使用Python 3对我的项目有什么特别的好处吗?我是不是应该考虑用其他语言,比如Erlang?
这个问题只有你自己能回答,因为只有你知道自己的知识水平。用Python 3代替Python 2,你可以享受到Python 3带来的新特性,但目前并不是所有的库都支持Python 3。
需要注意的是,Python 2.6应该实现了大部分(如果不是全部的话)Python 3的特性,同时它也应该和Python 2.5兼容,不过我对此没有深入研究。
Python和Erlang都可以满足你的需求,选择你最熟悉和最喜欢的那种语言。
在游戏服务器中使用关系数据库有什么好处吗?
你会得到一个ACID存储系统的所有优点和缺点。