【Django】在view中调用channel来主动进行websocket通信

前提:consumer中已经写好了建立连接的代码,并且能够成功把连接加入到通道层的组内

可以参考我的另一个博客:

LuckySheet协同编辑后端示例(Django+Channel,Websocket通信)_lucksheet 协同编辑-优快云博客

我是懒得去折腾luckysheet的源码,所以尽量去把功能在后端实现,但是又需要一些功能来通过点击按钮实现把消息广播出去,所以就在视图函数里进行消息广播,同理在别的任意类型的函数中也可以使用。具体代码如下:
 

from channels.layers import get_channel_layer
import asyncio    



def send_message(self):
        # 获取通道层实例
        channel_layer = get_channel_layer()

        async def send_group_message():
            await channel_layer.group_send(
                "group_name",  # 替换为实际的组名,要和消费者加入的组名对应
                {
                    "type": "broadcast_message",  # 替换为消费者中处理该消息的对应方法名
                    "message": "Message from the view"
                }
            )
        # 运行异步函数来执行消息发送操作
        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)
        try:
            loop.run_until_complete(send_group_message())
        finally:
            loop.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vener__

如果解决了困扰你的难题

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值