Как установить порт в вебсокетах каналов Django
Я работаю над проектом Django и создал приложение Chat, теперь проблемы с портом websocket, когда я начинаю общаться с одним человеком, порт по умолчанию генерируется, и я оставляю этого пользователя и общаюсь с другим пользователем, порт меняется, поэтому я не могу получить уведомление о сообщении другого человека из-за того, что порт меняется каждый раз, так что, пожалуйста, помогите мне с этим
consumers.py
class PersonalChatConsumer(WebsocketConsumer):
def connect(self):
my_id = self.scope['user'].id
other_user_id = self.scope['url_route']['kwargs']['id']
if int(my_id) > int(other_user_id):
self.room_name = f'{my_id}-{other_user_id}'
else:
self.room_name = f'{other_user_id}-{my_id}'
self.room_group_name = 'chat_%s' % self.room_name
async_to_sync(self.channel_layer.group_add)(
self.room_group_name,
self.channel_name
)
self.accept()
def receive(self, text_data=None, bytes_data=None):
data = json.loads(text_data)
message = data['message']
email = data['email']
data_base = self.save_message(email, self.room_group_name, message)
print("This is a database output", data_base)
print(text_data)
async_to_sync(self.channel_layer.group_send)(
self.room_group_name,
{
'type': 'chat_message',
'message': message,
'email': email,
}
)
def chat_message(self, event):
message = event['message']
user_id = event['email']
user_obj = User.objects.get(id=user_id)
self.send(text_data=json.dumps({
'message': message,
'email': user_obj.email,
'user_id': user_id
}))
print(f"{user_obj.email} : Messaage sent")
def disconnect(self, code):
async_to_sync(self.channel_layer.group_discard)(
self.room_group_name,
self.channel_name
)
# @database_sync_to_async is used with asynchronous code
def save_message(self, email, thread_name, message):
sendername = User.objects.get(id=email)
sender_name = str(sendername)
my_id = self.scope['user'].email
new_message = ChatModel.objects.create(sender=email, sender_name=sender_name,
receiver_name=my_id,
message=message, thread_name=thread_name)
new_message.save()
return "Succes"
setting.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'Crackit.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'Crackit.wsgi.application'
ASGI_APPLICATION = 'Crackit.asgi.application'
CHANNEL_LAYERS = {
"default": {
"BACKEND": "channels.layers.InMemoryChannelLayer",
}
}
# CHANNEL_LAYERS = {
# "default": {
# "BACKEND": "channels_redis.core.RedisChannelLayer",
# "CONFIG": {
# "hosts": [("127.0.0.1", 6379)],
# },
# },
# }
DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'crackitdatabase',
}
}
выход терминала
WebSocket HANDSHAKING /ws/2/ [127.0.0.1:8244]
WebSocket CONNECT /ws/2/ [127.0.0.1:8244]
HTTP GET /privatechat/admin@gmail.com/ 200 [0.17, 127.0.0.1:8204]
WebSocket DISCONNECT /ws/3/ [127.0.0.1:8211]
WebSocket HANDSHAKING /ws/3/ [127.0.0.1:8255]
WebSocket CONNECT /ws/3/ [127.0.0.1:8255]
HTTP GET /privatechat/chat_page/raj@gmail.com/ 200 [0.20, 127.0.0.1:8221]
WebSocket DISCONNECT /ws/2/ [127.0.0.1:8244]
WebSocket HANDSHAKING /ws/2/ [127.0.0.1:8262]
WebSocket CONNECT /ws/2/ [127.0.0.1:8262]
порт меняется каждый раз, так в чем проблема, пожалуйста, помогите, спасибо.