I want to send a message over a channel using Django Channels. This is what I'm doing. I create a consumer first. I'm able to echo back the received messages. However, not able to send messages to a specific channel/group.
Now when I try to send a message, the connected socket does not receives the message.
What's the issue in the code?
class Consumer(AsyncJsonWebsocketConsumer):
"""Consumer."""
def _get_connection_id(self):
return ''.join(e for e in self.channel_name if e.isalnum())
async def connect(self):
scope = self.scope
user_id = str(scope['user'].user_id)
connection_id = self._get_connection_id()
# Adding connection to DB.
obj = UserConnection.add(connection_id=connection_id, user_id=user_id)
# Accept the connection
await self.accept()
# Adding current to group.
await self.channel_layer.group_add(
user_id,
connection_id,
)
async def disconnect(self, close_code):
"""Remove the connection and decrement connection_count in DB."""
connection_id = self._get_connection_id()
user_id = str(self.scope['user'].user_id)
UserConnection.drop(connection_id=connection_id)
# Dropping from group.
await self.channel_layer.group_discard(
user_id,
connection_id,
)
async def receive_json(self, data, **kwargs):
"""Receive messages over socket."""
resp = data
# I'm able to echo back the received message after some processing.
await self.send(json.dumps(resp, default=str))
# This does not works.
def send_to_connection(connection_id, data):
"""Send the data to the connected socket id."""
return get_channel_layer().group_send(connection_id, data)
Now when I try to send a message, the connected socket does not receives the message.
>>> connection_id = UserConnection.objects.get(user_id=user_id).connection_id
>>> send_to_connection(connection_id, {'a':1})
# returns <coroutine object RedisChannelLayer.group_send at 0x109576d40>
What's the issue in the code?
______________________________________________________________________
This email has been scanned by the Symantec Email Security.cloud service.
For more information please contact enterprise-security@innovaccer.com
______________________________________________________________________
--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CADxEvOHm4CE7CuchCLXCeg21vy7ifZPq4vuvWs5-uELuFjRUyw%40mail.gmail.com.
No comments:
Post a Comment