如何从一个队列向多个客户端发送数据

How To Send Data To Multiple Clients From A Queue

我正在 Python 中编写一个小程序 game/environment 以帮助我的弟弟学习编码。它需要通过网络运行,而我是网络编程的新手。我将解释游戏的概念,以便有人可以为我指明最佳方向。

这个想法是一个简单的 25x25 'diodes,' 正方形网格,具有固定的位置和可编辑的颜色值,基本上模拟了一个非常小的屏幕。除了网格显示之外,还有一个命令 window,其中可以输入 Python 代码并将其发送到 InteractiveConsole 的实例,以及一个聊天 window。客户端需要能够向主机发送 Python 命令,主机将 运行 代码,然后接收表示网格更改的字符串形式的输出。我这样做的概念涉及在传入和传出事件的主机端维护一个队列,以在各个线程上处理和中继到客户端。任何给定的 command/chat 事件都将被发送到主机并转发给所有客户端,包括创建该事件的客户端,以便所有客户端在其 command/chat windows 中都可以看到这些事件。由于处理来自客户端的命令,网格的所有更改都将由主机发起,并且还将发送给所有客户端。

我主要不明白的是如何在所有客户端之间进行同步,即如何知道队列中的给定项目何时在从队列中清除之前已成功发送给所有客户端,因为任何单独的线程过早地这样做会阻止该项目被发送给其他客户。这是一个非常开放的问题,因为我知道在准备好实施之前我肯定需要消耗一些学习材料。我不是在寻求特定的解决方案,而是在寻求一些关于哪种一般类型的解决方案适用于我的情况的指导。我在业余时间做这件事,所以我不想花一个月的时间来学习网络教程,这些教程并没有为我指明适用于该项目的方向。

我的方法是使用可以向多个客户端广播的 udp 服务器。所以基本上,所有客户端都会在游戏会话期间连接到该服务器,并且服务器会在更新时将游戏状态广播给客户端。由于您的游戏相对简单,这种方法可以为您提供实时更新。