Я работаю над проектом django, который позволяет двум пользователям общаться в чате.Как только вы получите новое сообщение, вы получите уведомление.Для выполнения обеих задач я использую каналы django и открываю веб-сокет.С моим приложением чата, работающим как положено, я перешел к работе над частью уведомлений.Однако здесь я сталкиваюсь с некоторыми проблемами.
У меня есть signal.py, где всякий раз, когда создается уведомление, я отправляю его в комнату для пользователя.
сигналов.py
@receiver(post_save, sender=Notification)
def newNotification(sender, instance, created, **kwargs):
if created:
channel_layer = get_channel_layer()
room_name = "notif_room_for_user_"+str(instance.targetUser.id)
async_to_sync( channel_layer.group_send)(
room_name, {"type": "user.gossip",
"event": instance.objectName,
"targetUser": instance.targetUser}
)
consumer.py
class NoseyConsumer(AsyncJsonWebsocketConsumer):
async def connect(self):
self.user = self.scope["user"]
self.user_room_name = "notif_room_for_user_"+str(self.user.id)
await self.channel_layer.group_add(
self.user_room_name,
self.channel_name
)
await self.accept()
async def disconnect(self, close_code):
await self.channel_layer.group_discard(
self.user_room_name,
self.channel_name
)
async def user_gossip(self, event):
await self.send_json(event)
Когда я открываю веб-страницу, веб-розетка подключается нормально.Проблема в том, что когда я отправляю сообщение и создается новое уведомление, я получаю следующую ошибку
"You cannot use AsyncToSync in the same thread as an async event loop - "
You cannot use AsyncToSync in the same thread as an async event loop - just await the async function directly.
После этой ошибки я изменил newNotification в signal.py на async.Но тогда это никогда не вызывается.