我正在研究一个django项目,该项目允许两个用户一起聊天。收到新消息后,您会收到通知。为了完成这两个任务,我正在使用Django通道并打开一个websocket。在我的聊天应用程序按预期工作的同时,我继续进行通知部分的工作。但是,那是我面临的一些问题。
我有一个signal.py,无论何时创建通知,我都会将其发送给用户房间。
signals.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}
)
consumers.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)
当我打开网页时,websocket正常连接。问题是当我发送消息并创建新通知时,出现以下错误
"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.
该错误之后,我将signal.py中的newNotification更改为async。但是然后,它永远不会被调用。