繁体   English   中英

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

[英]Word game server in Python, design pros and cons?

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

从Python 3开始值得吗?还是以前版本的模块端口仍然对它的支持太差?

在我的特定项目中使用Python 3有什么好处? 我会选择使用其他语言(例如Erlang)更好吗?

在游戏服务器中使用关系数据库有什么很大的优势?

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

我会选择Python + Django 它使Web应用程序开发非常容易。

从Python 3开始值得吗?还是以前版本的模块端口仍然对它的支持太差?

取决于您要使用的模块。 Twisted是网络编程的“利刃”,可能是您的项目的选择,但不幸的是,它尚不支持python3。

在我的特定项目中使用Python 3有什么好处? 我会选择使用其他语言(例如Erlang)更好吗?

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

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

python和erlang都是满足您需求的候选人,请使用您最了解和最喜欢的知识。

在游戏服务器中使用关系数据库有什么很大的优势?

您拥有使用ACID存储系统的所有优点和缺点。

与您的数据库选择有关,我将认真考虑使用Postgres而不是MySQL。 以我对这两个Postgres的经验,在大多数写操作中已显示出更快的速度,而MySQL在读操作中则稍快。

但是,MySQL还存在许多问题,其中包括:

  • 实时备份充其量是困难的,而最坏的情况是不可能的,大多数情况下,您必须使数据库脱机或在备份过程中将其锁定。
  • 如果必须通过kill -9或由于断电而强行杀死服务器,则postgres通常具有更好的抵御表损坏的能力。
  • 对ACID合规性的完全支持以及其他支持imho和experience的关系数据库功能在MySQL中很弱或缺乏。

您可以使用SQLAlchemy之类的库来抽象化数据库访问。 这样一来,您就可以对两者进行测试,以查看您希望与之打交道。

就语言选择而言。

如果您使用Python:

  • 目前,更多的库支持Python 2.x,而不是Python 3.x,因此我可能会坚持使用2.x。
  • 当心使用Python的GIL的多线程陷阱。 利用Twisted可以解决这个问题。

如果您使用Erlang:

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

因此,我想您的选择可能会归结为您愿意学习多少钱来做这个项目。

此类项目可能是研究新语言的好方法。 我想说的是,Erlang是目前最有趣的语言之一,(1)具有功能性,(2)提供了出色的并发性/(分布式)并行性范例,(2)在业界得到了广泛使用(最著名的是传统电信) ),(3)实际进入桌面空间(CouchDB)。 如果您还不知道,那就去吧! :-)

至于开源游戏服务器...好,有很多。 到处都是Google的MUD引擎等。对于初学者,请查看MOO上的Wikipedia条目,并查看LambdaMOO。

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

常用库对Python 3的当前支持水平不高-因此您可能需要在此时使用Python 2.6之类的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM