栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将消息发送到Django Channels 2中的组

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将消息发送到Django Channels 2中的组

我在写此问题时找到了解决方案,并认为其他人也可以使用它!由于这里的大多数问题都与2.0或更高版本之前的频道版本有关,因此这就是您应该如何处理使用者中的group_send事件。

问题不仅在于我如何使用该

group_send
函数,还错误地认为将groups类变量添加到EventConsumer应该自动将其添加到该/那些组中,而事实并非如此!您必须在
connect
类函数中手动添加组,并在函数中删除组
disconnect

然后,问题还在于我的使用者没有指定适当的事件处理程序。在接收警报请求的视图文件中,我已将“类型”设置为“测试”。测试未反映在我的EventConsumer类中,因此无法处理该事件。正如multichat例子说明这里的行号146,辅助函数得到取决于事件,将会发出的类型调用。因此,事件类型“
event.alarm”

event_alarm
在您的使用者中应该具有相应的功能!很简单,但是记录的不是很好:)。最终的解决方案如下所示:

在中

consumers.py
,请注意
group_add
in连接和
group_discard
in断开!

class EventConsumer(JsonWebsocketConsumer):    def connect(self):        async_to_sync(self.channel_layer.group_add)( 'events', self.channel_name        )        self.accept()    def disconnect(self, close_pre):        print("Closed websocket with pre: ", close_pre)        async_to_sync(self.channel_layer.group_discard)( 'events', self.channel_name        )        self.close()    def receive_json(self, content, **kwargs):        print("Received event: {}".format(content))        self.send_json(content)    # ------------------------------------------------------------------------------------------------------------------    # Handler definitions! handlers will accept their corresponding message types. A message with type event.alarm    # has to have a function event_alarm    # ------------------------------------------------------------------------------------------------------------------    def events_alarm(self, event):        self.send_json( {     'type': 'events.alarm',     'content': event['content'] }        )

因此,

events_alarm
从以下函数调用上述函数
group_send

from django.shortcuts import HttpResponsefrom channels.layers import get_channel_layerfrom asgiref.sync import async_to_syncdef alarm(req):    layer = get_channel_layer()    async_to_sync(layer.group_send)('events', {        'type': 'events.alarm',        'content': 'triggered'    })    return HttpResponse('<p>Done</p>')

如果您需要进一步澄清问题/答案,请告诉我!干杯!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/397762.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号