Kut*_*lan 5 python django websocket celery django-channels
我正在尝试使用Django中的channel(v2.1.7)将消息从服务器发送到客户端。当我执行以下celery任务时,我的消息未在consumers.py中提取(因此未发送给客户端),并且令人惊讶的是没有错误发生。
我能够将消费者的信息直接发送给客户。但是我无法使用async_to_sync()从消费者的外部进行发送。
(我试图在标准的Django views.py中使用async_to_sync方法,但我遇到了同样的问题)
wololo / tasks.py
@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
Run Code Online (Sandbox Code Playgroud)
wololo / consumers.py
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']))
Run Code Online (Sandbox Code Playgroud)
我在芹菜终端中得到的结果 单击以查看芹菜终端
提前致谢
| 归档时间: |
|
| 查看次数: |
432 次 |
| 最近记录: |