【发布时间】:2017-09-22 20:12:24
【问题描述】:
我正在使用 Python 开发一个小型编程游戏/环境,以帮助我的弟弟学习编码。它需要在网络上运行,我是网络编程的新手。我将解释游戏的概念,以便有人可以为我指明最佳方向。
这个想法是一个简单的 25x25“二极管”网格,具有固定位置和可编辑颜色值的正方形,基本上模拟了一个非常小的屏幕。除了网格显示之外,还有一个命令窗口,可以在其中输入 Python 代码并将其发送到InteractiveConsole 的实例,以及一个聊天窗口。客户端需要能够向主机发送 Python 命令,主机将运行代码,然后以字符串形式接收表示网格更改的输出。我这样做的概念包括在主机端维护传入和传出事件的队列,以处理各个线程上的客户端并将其中继到客户端。任何给定的命令/聊天事件都将发送到主机并转发给所有客户端,包括创建事件的客户端,以便所有客户端在其命令/聊天窗口中都可以看到这些事件。由于处理源自客户端的命令,对网格的所有更改都将源自主机,并且还将发送给所有客户端。
我主要不明白的是如何在所有客户端之间进行同步,即如何知道队列中的给定项目何时已成功发送给所有客户端,然后再将其从队列中清除,因为任何单独的线程都会这样做过早地会阻止该项目被发送给其他客户。这是一个非常开放的问题,因为我知道在准备实施之前我肯定需要使用一些学习材料。我不是要一个具体的解决方案,而是要一些关于在我的情况下可以使用什么通用类型的解决方案的指导。我是在业余时间做这件事的,所以我不想花一个月的时间阅读那些没有为我指明适用于这个项目的方向的网络教程。
【问题讨论】:
-
我会研究
zeromq,他们拥有的 pubsub 模型似乎很适合这个。 -
但总的来说,这是一个非常难以回答的问题,可以采用多种方法。
标签: python multithreading networking server multicast