Python中词语游戏服务器的设计优缺点?

2 投票
5 回答
1462 浏览
提问于 2025-04-15 17:13

我想在冬天做一个编程项目,打算写一个在线文字游戏(可以同时支持大约500个用户)。我希望这个游戏能在不同的平台上都能运行。我打算用Python来写,因为我对这个语言有一些了解。关于用户数据存储,之前用过MySQL,所以我觉得用简单的数据库设计会更好,但这不是必须的。好吧,现在我有几个问题:

我应该从Python 3开始吗?还是说它对以前版本的模块支持还不够好?

使用Python 3对我的项目有什么特别的好处吗?我是不是应该考虑用其他语言,比如Erlang?

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

有没有什么开源的游戏服务器代码值得在开始之前学习一下?

5 个回答

1

关于你选择的数据库,我建议你认真考虑使用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(注意它不是关系型的)。

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

2

我推荐使用Python加上Django。这样做可以让开发网页应用变得非常简单。

2

开始学习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存储系统的所有优点和缺点。

撰写回答