Разница в методах получения и отправки в веб-сокете
Я просматриваю следующий код, который делает "групповой чат" с разными участниками:
# Receive message from WebSocket
def receive(self, text_data):
text_data_json = json.loads(text_data)
message = text_data_json['message']
# Send message to room group
async_to_sync(self.channel_layer.group_send)(
self.room_group_name,
{
'type': 'chat_message',
'message': 'OK'
}
)
# Receive message from room group
def chat_message(self, event):
message = event['message']
# Send message to WebSocket
self.send(text_data=json.dumps({
'message': message
}))
Мои вопросы: что делают эти две вещи? я вижу это receive()
также делает group_send
Так, с какой целью chat_message
есть, если получатель отправляет его при получении?
1 ответ
Решение
Этот код сервера чата является простым примером того, как отправлять групповые сообщения.
В коде:
async_to_sync(self.channel_layer.group_send)(
self.room_group_name,
{
'type': 'chat_message',
'message': 'OK'
}
)
эта линия
'type': 'chat_message',
отвечает за вызов метода chat_message()
с { 'message': 'OK'}
Перед отправкой этого сообщения членам группы вы можете захотеть изменить или проверить данные или сделать что-то другое. Вот почему self.channel_layer.group_send
не отправляет сообщение группе напрямую, а вызывает другой метод (в данном случае chat_message
) обрабатывать отправку сообщения и сохранять receive()
код метода чистый.