老实说,我会从经典的 LAMP 开始。拿一个库存的 Apache 服务器和一个 mysql 数据库,并将您的 Python 脚本放在 cgi-bin 目录中。他们发送和接收 JSON 而不是 HTTP 的事实并没有太大区别。
当然,这显然不会是最灵活或可扩展的解决方案,但它会迫使您尽早面对实际问题。
您将遇到的第一个问题是游戏状态。你声称没有共享状态,但这是不对的——牌组中的牌,桌上的赌注,轮到谁了——这都是状态,在多个玩家之间共享,在服务器上管理。这些命令中的任何一个还能如何工作?因此,您需要某种方式在 CGI 脚本的不同实例之间共享状态。经典的解决方案是将状态存储在数据库中。
当然,您还需要首先处理用户会话。细节取决于您选择的会话管理方案,但最大的问题是如何将断开/超时从较低级别传播到应用程序级别。如果有人把 20 美元放在桌子上然后断开连接会发生什么?您必须考虑所有可能的用例。
接下来,您需要考虑可伸缩性。你想要数以百万计的游戏?好吧,如果有一个包含所有游戏状态的数据库,那么您可以在它前面拥有任意数量的 Web 服务器——John Doe 可能在 server1 上,而 Joe Schmoe 在 server2 上,但它们可以在同一个游戏中。另一方面,你可以为每个服务器建立一个单独的数据库,只要你有办法强制同一游戏中的人们在同一服务器上见面。哪一个更有意义?无论哪种方式,您如何在服务器之间进行负载平衡。(你不仅要让他们都忙,还要避免4个玩家都准备好了,但是他们在3个不同的服务器上,所以他们不能互相玩……)。
这个过程的最终结果将是一个以你希望的 1% 的容量运行的服务器的巨大混乱,你不知道如何维护。但是您会更详细地考虑您的问题空间,并且您还将学习服务器开发的基础知识,从长远来看,这两者可能更重要。
如果你有时间,我接下来会把整个事情扔掉,通过设计一个自定义 TCP 协议从头开始重写所有内容,用 Twisted 之类的方式为它实现一个服务器,将游戏状态保存在内存中,并编写一个简单的自定义代理而不是标准负载均衡器。