David542
David542

Reputation: 110462

Difference in the receive and send method in a websocket

I am looking over the following code which does a 'group chat' with different members:

# 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
    }))

My questions is what do the two items do? I see that receive(), also does the group_send, so what purpose does the chat_message have if the receive sends it upon receiving it?

Upvotes: 2

Views: 174

Answers (1)

Ajit
Ajit

Reputation: 905

That chat server code is a simple example on how to send group messages.

In the code:

async_to_sync(self.channel_layer.group_send)(
        self.room_group_name,
        {
            'type': 'chat_message',
            'message': 'OK'
        }
    )

this line

'type': 'chat_message',

is responsible for calling method chat_message() with { 'message': 'OK'}

Before sending this message to the group members you may want to modify or check the data, or need to do other stuff. That's why self.channel_layer.group_send doesn't directly sends message to the group but calls another method (in this case chat_message) to handle sending of message and to keep receive() method's code clean.

Upvotes: 2

Related Questions