为了账号安全,请及时绑定邮箱和手机立即绑定

通道 - 收到信号后如何通过 websocket 发送数据?

通道 - 收到信号后如何通过 websocket 发送数据?

互换的青春 2023-01-04 16:19:22
我想通过 websocket 从数据库流式传输数据。基本上每秒钟都会有一条新记录被插入到 DataModel 中,我想在插入后立即通过 websocket 发送这条新记录。有人建议我在调用模型的 save() 方法时使用信号。所以在我的 models.py 中添加了这个:def save_post(sender, instance, **kwargs):    print('signal')post_save.connect(save_post, sender=DataModel)save_post我应该在我的 consumers.py里面和上面放什么,以便数据通过?
查看完整描述

1 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您首先必须使用以下代码连接到您的 Django 通道层:


from channels.layers import get_channel_layer

from asgiref.sync import async_to_sync

channel_layer = get_channel_layer()

data = <your-data> # data you want to send

async_to_sync(channel_layer.group_send(<group_name>, {

    "type": "notify",

    "message": data

}))

它会将您连接到您在设置文件中定义的默认后端层:


CHANNEL_LAYERS = {

    "default": {

        "BACKEND": "channels_redis.core.RedisChannelLayer",

        "CONFIG": {

            "hosts": [("localhost", 6379)],

        },

    },

}

并将在您的班级中为拥有该组的所有用户调用一个名为notify(函数名称是您的选择)的函数Consumer<group_name>


async def notify(self, event):

    data = event["message"]

    # here you can do whatever you want to do with data

有关更多信息,您可以在此处获得工作示例:https ://channels.readthedocs.io/en/latest/tutorial/part_2.html#enable-a-channel-layer


查看完整回答
反对 回复 2023-01-04
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号