首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何限制django频道房间的客户数量

如何限制django频道房间的客户数量
EN

Stack Overflow用户
提问于 2021-09-03 08:25:44
回答 1查看 154关注 0票数 1

我希望将一个房间的用户数量限制在2,因为我正在制作一个套接字游戏,两个球员可以玩一个tic-tack-toe或connect-4游戏,所以我试图找到一些方法来限制一个房间只有2个玩家。

下面是我的comsumers.py

代码语言:javascript
复制
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()

我从这个问题中去掉了一些不太必要的方法。

EN

回答 1

Stack Overflow用户

发布于 2021-09-05 20:15:12

您必须在项目中创建一个room模型,并将连接的用户保存到该模型中,然后您可以在connect方法中添加一个validation,如下所示:

代码语言:javascript
复制
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'])

  • Extra:

当然,您还可以使用F()函数,使您在connectdisconnect中的性能更好(当多个用户同时尝试连接时非常有用)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69041756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档