sending message to client using Django Channels from Celery tasks.py
我试图使用在Django通道(v2.1.7)来从服务器发送消息给客户端。当我执行下面的任务芹菜,我的信息是不是被在consumers.py(因此不被发送到客户端)取出,并令人惊奇地没有错误occures。
我能够从消费者直接发送消息给客户端。但我不能设法使用async_to_sync从消费者的外送()。
(I试图在标准的django views.py使用async_to_sync方法和我有同样的问题)
wololo / tasks.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | @app.task(name='wololo.tasks.upgrade_building') def upgrade_building(user_id): os.environ['DJANGO_SETTINGS_MODULE'] = 'DjangoFirebaseProject.settings' from channels.layers import get_channel_layer channel_layer = get_channel_layer() print(channel_layer,"wololo") async_to_sync(channel_layer.send)('chat', { 'type': 'hello.message', 'message': 'hadiInsss', }) return True |
wololo / consumers.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from channels.generic.websocket import WebsocketConsumer import json from asgiref.sync import async_to_sync class ChatConsumer(WebsocketConsumer): def connect(self): async_to_sync(self.channel_layer.group_add)("chat", self.channel_name) self.accept() def disconnect(self, close_code): async_to_sync(self.channel_layer.group_discard)("chat", self.channel_name) def hello_message(self, event): print("U MUST SEE THAT MSG") # Send a message down to the client self.send(text_data=json.dumps(event['message'])) |
的结果,我已芹菜终端
点击查看芹菜终端
预先感谢
看起来你正在使用的channel_layer.send方法,但是我觉得你真的想使用channel_layer.group_send代替。