Python中的文字游戏服务器,设计优缺点?

时间:2009-12-20 22:18:29

标签: python

我想忙于一个冬季编程项目,并正在考虑编写一个在线文字游戏(服务器负载最多,比如500个用户同时)。我希望它与平台无关。我打算使用Python,我有一些经验。对于用户数据存储,在之前的MySQL经验之后,平板数据库设计将是优选的,但不是必需的。好的,现在问题是:

是否值得从Python 3开始,或者它仍然支持以前版本的模块端口?

在我的特定项目中使用Python 3有什么好处吗?我会更好地使用其他语言,比如Erlang?

在游戏服务器中使用关系数据库有什么好处吗?

是否有任何开源游戏服务器的源代码在开始之前值得研究?

5 个答案:

答案 0 :(得分:2)

我会选择Python + Django。它使Web应用程序的开发变得非常简单。

答案 1 :(得分:2)

  

是否值得从Python 3开始,或者它仍然支持以前版本的模块端口?

取决于您要使用的模块。 twisted是网络编程的“瑞士刀”,可能是您项目的选择,但不幸的是它还不支持python3。

  

在我的特定项目中使用Python 3有什么好处吗?我会更好地使用其他语言,比如Erlang?

只有你能回答你的问题,因为只有你了解自己的知识。使用python3而不是python2,你可以获得python3带来的新功能的所有优点,以及目前非所有库都支持python3的缺点。

请注意python2.6应该实现python3的大多数(如果不是全部)功能,而它应该与python2.5兼容,但我没有以这种方式调查过很多。

python和erlang都可以满足您的需求,使用您最了解的内容和最喜欢的内容。

  

在游戏服务器中使用关系数据库有什么好处吗?

您将获得拥有ACID存储系统的所有优点和缺点。

答案 2 :(得分:1)

与您的数据库选择相关,我认真考虑使用Postgres而不是MySQL。在我对两个Postgres的实验中,大多数写操作都表现得更快,而MySQL的读取速度稍快。

然而,MySQL也有许多问题,其中一些是:

  • 实时备份充其量是困难的,而且更糟糕的是,大多数情况下,您必须使数据库脱机或在备份期间将其锁定。
  • 如果必须通过kill -9强制终止服务器,或者由于断电,postgres通常会更好地恢复表损坏。
  • 完全支持ACID合规性,以及其他支持imho和体验的关系数据库功能在MySQL中很弱或缺乏。

您可以使用SQLAlchemy等库来抽象出数据库访问。这可以让你测试两者,看看你喜欢哪个。

就语言选择而言。

如果你选择Python:

  • 此时更多的图书馆支持Python 2.x而不是Python 3.x,所以我可能会坚持使用2.x.
  • 注意使用Python的GIL进行多线程攻击。利用Twisted可以解决这个问题。

如果你选择Erlang:

  • Erlang的语法和习语对于从未使用它的人来说非常陌生。
  • 如果写得好,它不仅可以扩展,还可以扩展。
  • Erlang拥有自己的高度并发的Web服务器,名为Yaws。
  • Erlang还拥有自己的高度可扩展的DBMS,名为Mnesia(注意它不是关系型的)。

所以我猜你的选择可以归结为你愿意学习多少这个项目。

答案 3 :(得分:0)

这种项目可能是调查新语言的好方法。我会说Erlang是其中一种比较有趣的语言,(1)具有功能性,(2)提供卓越的并发/(分布式)并行性范例,(2)在行业中使用(最值得注意的是传统的)电信),(3)实际进入桌面空间(CouchDB)。如果你还不知道,那就去吧! : - )

至于开源游戏服务器......嗯,有很多。谷歌周围的MUD引擎等。对于初学者,请查看MOO上的维基百科条目并查看LambdaMOO。

答案 4 :(得分:0)

如果您已经非常熟悉Python,那么如果我是你,我会调查Twisted库。 Twisted是一个异步通信库,最初是为支持大型基于文本的游戏而开发的。

目前常用库对Python 3的支持程度不高 - 所以你可能希望在这个时候坚持使用像Python 2.6这样的东西。