首先,您需要您的使用者实例来订阅组。
from asgiref.sync import async_to_syncclass GameConsumer(WebsocketConsumer): def connect(self): self.accept() self.render() async_to_sync(self.add_group)('render_updates_group') controller.startTurn()...然后,如果您不在消费者之外,则需要向该组发送一条消息,以便所有注册到该组的消费者都可以收到该消息。
from channels.layers import get_channel_layerfrom asgiref.sync import async_to_syncdef sendDeployments(owner, armies): type = "renderDeployments" message = owner + " has " + str(armies) + " to deploy" channel_layer = get_channel_layer() async_to_sync(channel_layer.group_send)( 'render_updates_group', {'type': 'render', 'message': message} )但是,您还需要记住在断开连接时将其从组中删除。
class GameConsumer(WebsocketConsumer): .... def disconnect(self, close_pre): async_to_sync(self.group_name)('render_updates_group')如果要限制哪些打开的连接会收到此渲染消息,则需要相应地建立组名。
例如,如果您正在考虑一些在线游戏,则可能
MATCH-ID在组名中包含一个由所有连接共享以进行同一比赛的组名。
通道图层文档是对此的一个很好的参考,但请记住,在生产环境中运行此文档时,您需要设置一个消息传递层(通常为Redis)。



