辉煌仪奇 2022-03-18 11:50 采纳率: 46.6%
浏览 330
已结题

django 如何使用websocket 做到连续发送消息给客户端

下面是部分代码,已做到客户端域服务器的收发,但是目前为止未找到服务器向客户端发送一条或者多条消息的实现方法,
需要实现的内容有,接受到一条消息后,可以实现向客户端发送一条或多条消息,或者只要客户端与服务器保持链接,就可以无限发送消息
想要实现上诉方式,该如何修改代码,或者需要什么模块
目前实现django websocket的方式是
channels ==3.0.4

from channels.generic.websocket import AsyncWebsocketConsumer
class MessagesConsumer(AsyncWebsocketConsumer):
    
    async def connect(self):
        #acceptlist.append(self)
        #await self.accept()
        await self.accept()
    
    async def receive(self,text_data = None,bytes_data = None):
        '''接收到后端发来的私信'''
        import json
        jsonobj = json.loads(text_data)
        # for i in acceptlist:
        #     if i == self:
        #         if not acceptdict.get(jsonobj['id']):
        #             acceptdict[jsonobj['id']] = i
        #             await self.channel_layer.group_add(
        #                 jsonobj['id'],
        #                 self.channel_name
        #                 )
        
        
        if jsonobj['title'] == "port":
            if jsonobj['option'] == "get":
                jsonstr = getportname(jsonobj)
                await self.send(text_data = jsonstr)
            if jsonobj['option'] == "read":
                jsonobj['data'] = "打开操作成功"
                jsonstr = json.dumps(jsonobj)
                await self.send(text_data = jsonstr)

    async def disconnect(self,code):
        '''离开聊天组'''
        # await self.channel_layer.group_discard(self.scope['user'].username,self.channel_name)
        # 关闭
        await self.channel_layer.group_discard(self.scope,self.channel_name)
        # await  self.close()
  • 写回答

6条回答 默认 最新

  • Haven55555 2022-03-18 12:26
    关注

    你要做的就是:当客户端和服务器端连上时会有个session, 服务器上做一个链接池将客户端session缓存下来,然后要给哪个客户端发信息就调取哪个来发送就可以了

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月21日
  • 创建了问题 3月18日