我有一个WebSocket,应该每x秒发送一次消息。我从两个客户端连接到这个套接字。当其中一个客户端发送一个启动消息时,这个套接字应该向两个客户端都发送消息,但是只有没有启动的那个客户端每x秒收到一次消息。发送消息的那个客户端在所有时间过去后收到所有消息
这是一个循环。正常的发送是获取发送瞬间到一个初始化发送的人(我现在使用这个作为一个半修复)。我的问题是,发送到组不是每x秒发送一次,因为它应该。只有其他连接的客户端是每秒钟获得它。开始的人是在时间过去后一次获得所有
async def init_starting(self):
if not self.lobby.status == "waiting":
print("Already Started")
return False
else:
print("Starting Countdown")
#self.lobby.status = 'starting'
#await self.save_lobby()
await self.send_status_message_with_status(status='starting', data={'has_started': self.lobby.has_started,
'host': self.host.username,
'players': self.players,
'lobby_code': self.lobby_code,
'countdown': 3})
countdown = 3
while countdown >= 0:
countdown_data = {
'countdown': countdown
}
await self.send(json.dumps({"type": "msg", "message": countdown}))
await self.send_status_message_with_status(status='starting', data=countdown_data)
print(countdown)
countdown -= 1
await asyncio.sleep(1)
await self.send_status_message_with_status(status='started', data={
'message': "Test"
})
return True
async def send_status_message_with_status(self, status, data):
send_data = {
'type': 'status',
'status': str(status),
}
send_data = send_data | data
await self.channel_layer.group_send(
self.lobby_group_code,
send_data
)
上面的发送正在工作,下面的一次全部进来了。(在启动客户端)
这是另一个没有启动的客户端。这里是每秒钟后进来的所有消息,所以它应该正常工作。
我怎样才能让双方的群发都是即时的,或者有其他方法可以解决这个问题?
1条答案
按热度按时间zbdgwd5y1#
目前尚不完全清楚是什么原因导致启动客户端一次接收所有消息。但是,您可以尝试将
await self.channel_layer.await self.channel_layer.group_send
调用 Package 在1asyncio.ensure_future1任务中。这将在单独的任务中异步运行组发送,因此不会阻塞当前任务,并且消息应立即发送到两个客户端。下面是一个例子: