非阻塞“数据库”的好选择是什么?(使用TCP套接字服务器)

4 投票
2 回答
1821 浏览
提问于 2025-04-15 16:02

简单来说,我正在创建一个套接字服务器,这样我就可以为我的Flash游戏添加多人游戏的支持(客户端使用的是Actionscript 3.0的二进制套接字)。

我选择使用Python,因为我是这个游戏和服务器的唯一开发者,而且这是我第一次做非阻塞的套接字服务器。我原本打算用Twisted,但最后决定使用Python的asyncore(异步套接字处理器)。

如果我没记错的话,连接到传统数据库是一个阻塞的过程。由于我想让这个服务器是非阻塞的,我想知道有什么解决方案可以用来保存永久的游戏相关数据?

2 个回答

1

在传统数据库的说法中,"阻塞"其实就是"锁定",如果你想让数据保持一致性,这种情况是不可避免的。

这里的一致性是指“两个分数不同的玩家不可能同时被宣布为赢家”。

把锁定的情况减少到最少,正是数据库设计中的一门艺术,可能你只有在经历了很多次失败之后才能掌握这门技巧。

6

我建议你使用任何你喜欢的数据库(sqlite 是Python自带的,应该能很好地满足你的需求!)。你只需要开一个专门的线程来访问这个数据库,从一个队列中获取请求(如果需要返回结果,可以使用另一个作为请求一部分传入的队列)。如果线程数量不多,其实使用线程并没有那么复杂,它们之间不会共享任何不是只读的结构或系统,只通过队列进行通信(而队列本身是线程安全的)。

撰写回答