我希望将一个房间的用户数量限制在2,因为我正在制作一个套接字游戏,两个球员可以玩一个tic-tack-toe或connect-4游戏,所以我试图找到一些方法来限制一个房间只有2个玩家。
下面是我的comsumers.py
from channels.generic.websocket import WebsocketConsumer
from asgiref.sync import async_to_sync
import json
class GameRoom(WebsocketConsumer):
def connect(self):
self.room_name = self.scope['url_route']['kwargs']['room_code']
self.room_group_name = 'room_%s' % self.room_name
print(self.room_group_name)
async_to_sync(self.channel_layer.group_add)(
self.room_group_name,
self.channel_name
)
self.accept()我从这个问题中去掉了一些不太必要的方法。
发布于 2021-09-05 20:15:12
您必须在项目中创建一个room模型,并将连接的用户保存到该模型中,然后您可以在connect方法中添加一个validation,如下所示:
def connect(self):
self.room_name = self.scope['url_route']['kwargs']['room_code']
self.room = Room.objects.get(code=self.room_name)
if self.room.connected_user >= 2:
return self.close()
else:
self.room.connected_user = self.room.connected_user + 1
self.room.save(update_fields=['connected_user'])
self.room_group_name = 'room_%s' % self.room_name
print(self.room_group_name)
async_to_sync(self.channel_layer.group_add)(
self.room_group_name,
self.channel_name
)
self.accept()
def disconnect(self):
...
self.room.connected_user = self.room.connected_user - 1
self.room.save(update_fields=['connected_user'])当然,您还可以使用F()函数,使您在connect和disconnect中的性能更好(当多个用户同时尝试连接时非常有用)
https://stackoverflow.com/questions/69041756
复制相似问题