oldbee0925 2023-03-30 21:34 采纳率: 91.4%
浏览 24
已结题

django channels发送信息给特定用户的问题。

太相信chatGPT了,忽悠了我1周,请教!
我用AsyncWebsocketConsumer的channel_layer 来发送信息给特定用户,前端已经认证的用户发送简单的文本:

socket.send('ready');

后端判断用户,利用channel

class landgod_match_Consumer(AsyncWebsocketConsumer):
        async def receive(self, text_data=None, bytes_data=None):
          if text_data == 'ready':#收到前端的ready信息
              channel_layer = get_channel_layer()#实例化channel_layer 
              if len(ready_users) == 2:#2个用户都发送了ready,开始循环发送不同的消息(ready_users已经定义过)
                 i =0
                 for user in ready_users.keys():
                    channel_name = ready_users[user]
                    init_card = json.dumps({'A':poker_list[17*i : 17*i + 17]})#init_card 调用函数,运行调试没问题
                    #下面是重点了:      
                    await channel_layer.send(channel_name, {
                            "type":  "palycard", # 关联palycard处理函数
                            "message": palycard() # 由palycard函数retrun回来并发送给客户端的信息
                             })
                    i = i + 1
     async def palycard():
                #......do something
               rerurn c   


                await channel_layer.send(channel_name, {
                        "type":  "palycard", # type字段必须提供
                        "message": palycard() # 自定义消息内容
                         })

?"message": playcard() 的palycard直接报错没有定义。
请教:
1)type和message是必填字段吗?tpye的内容是什么?如何关联?与前端有什么关系?
2)非得定义一个函数来处理并关联type吗?
3)message代表什么意思?自己取得名还是固定的?
好复杂的逻辑啊!

  • 写回答

2条回答 默认 最新

  • supernoodle88 2024-01-05 00:47
    关注

    首先,type和message是两个固定的参数标签,不能改变。
    其次,type:playcard,这里的playcard指的是你用哪个方法来发送消息,指向async def playcard;
    message:xxxx,这里xxx是你要发送的消息。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月25日
  • 已采纳回答 1月17日
  • 创建了问题 3月30日