Я пытаюсь использовать каналы (v2.1.7) в django для отправки сообщений с сервера на клиент. Когда я выполняю приведенную ниже задачу с сельдереем, мое сообщение не извлекается в Consumer.py (поэтому не отправляется клиенту), и, как ни странно, ошибок не возникает.
Я могу напрямую отправлять сообщения от потребителей клиенту. Но мне не удалось отправить из-за пределов потребителей, используя async_to_sync().
(Я пытался использовать метод async_to_sync в стандартном django views.py, и у меня была такая же проблема)
вололо/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
вололо/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']))
результат, который у меня есть в терминале сельдереянажмите, чтобы увидеть терминал сельдерея
заранее спасибо
Привет, как сказал Аарон ниже, я использовал метод «group_send» вместо «отправить». async_to_sync (channel_layer. group_send) («chat», { «type»: «hello.message», «message»: «мое пользовательское сообщение» })






Похоже, вы используете метод channel_layer.send, но я думаю, что вместо этого вы хотите использовать channel_layer.group_send.
Привет, я тоже столкнулся с той же ошибкой. Как избавился от ошибки??