2017-01-22 5 views
1

채널 1.0.2가 포함 된 Django 1.10.5와 함께 websocket을 사용합니다. 사용자 토큰을 사용하여 연결을 열었습니다. 사용자 ID를 사용하는 모든 사용자의 연결을 끊기를 원합니다. 그러나 명령은 심지어 연결을 수락하기 전에 실행되어 결국 사용자 자신을 닫습니다.사용자 당 활성 연결을 하나만 둡니다.

def get_group(user): 
    if isinstance(user, User): 
     uuid = str(user.uuid) 
     return Group('user-%s' % uuid) 

@channel_session 
def websocket_connect(message): 
    user = CachedOAuth2Authentication().authenticate(socket_messeger=message) 
    if user: 
     # Do not use more than one device. 
     get_group(user).send({"close": True}) 

     message.channel_session['user'] = user 

     get_group(user).add(message.reply_channel) 
     message.reply_channel.send({"accept": True}) 
    else: 
     message.reply_channel.send({"close": True}) 

답변

1

나는 해결책을 발견 그래서 새로운 연결을 끊지 않습니다.

def send(self, content, immediately=False): 
     """ 
     Send a message to all channels in the group. 

     Sends are delayed until consumer completion. To override this, you 
     may pass immediately=True. 
     """ 
0

가 연결을 허용에 대한이를 참조하십시오 : 여기

내가 그것을 어떻게했는지의 사용자 당 전용 연결을 가진 약 Websocket using Django Channels

을, 당신은 할 것 중 하나 로직 또는 기반으로 새로운 연결을 거부 관련 reply_channel (또는 채널)에 대한 websocket.connect에 가까운 메시지를 보내십시오. 여기서는 사용자가 시도하려는 것으로 보입니다. ,

그룹의 경우

에서, "보내기"방법에 그냥 참으로두고 다음 함수가 새로운 사용자를 추가하기 전에 실행됩니다, 매개 변수 "즉시 거짓을 ="이 :