django通道的websocket握手失败

django通道的websocket握手失败,websocket,django-channels,channels,Websocket,Django Channels,Channels,编辑:下面@Ken4scholars评论后更正 我有一个在连接后立即出现故障的耗电元件 consumers.py from channels.generic.websocket import AsyncJsonWebsocketConsumer #... class ListGeneratedTokensByFileConsumer(AsyncJsonWebsocketConsumer): stop = False async def websocket_connect(sel

编辑:下面@Ken4scholars评论后更正

我有一个在连接后立即出现故障的耗电元件

consumers.py

from channels.generic.websocket import AsyncJsonWebsocketConsumer
#...

class ListGeneratedTokensByFileConsumer(AsyncJsonWebsocketConsumer):

   stop = False

   async def websocket_connect(self,event):
      await self.accept()
      self.stop = False

   async def websocket_receive(self,event):

    await self.send_json({"text":"received","accept": True})
    await self.send_tokens_list()

  async def websocket_disconnect(self,event):

    self.stop = True

  async def send_tokens_list(self):

    some_path = "..."
    while self.stop == False:
        await asyncio.sleep(2)
        the_message = {}
        if os.path.isfile("some_file.json")):
            with open(os.path.join(some_path ,"some_file.json"),'r') as new_tok:
                        the_message = json.load(new_tok)
        if not the_message:
            print("waiting...")
        else:
            await self.send_json(the_message)

    await self.close()
url(r'^myapp/sub_path/(?P<pk>\d+)/sub_sub_path/',ListGeneratedTokensByFileConsumer)
它总是抛出错误:
ERR\u CONNECTION:RESEST
,并且websocket会与code
1006
断开连接。对于django频道最近的变化来说,这似乎很熟悉,但由于我在websocket打开后发送一条文本,并从消费者那里发送一条消息,所以应该可以做到这一点。还是有什么不对劲

routing.py

from channels.generic.websocket import AsyncJsonWebsocketConsumer
#...

class ListGeneratedTokensByFileConsumer(AsyncJsonWebsocketConsumer):

   stop = False

   async def websocket_connect(self,event):
      await self.accept()
      self.stop = False

   async def websocket_receive(self,event):

    await self.send_json({"text":"received","accept": True})
    await self.send_tokens_list()

  async def websocket_disconnect(self,event):

    self.stop = True

  async def send_tokens_list(self):

    some_path = "..."
    while self.stop == False:
        await asyncio.sleep(2)
        the_message = {}
        if os.path.isfile("some_file.json")):
            with open(os.path.join(some_path ,"some_file.json"),'r') as new_tok:
                        the_message = json.load(new_tok)
        if not the_message:
            print("waiting...")
        else:
            await self.send_json(the_message)

    await self.close()
url(r'^myapp/sub_path/(?P<pk>\d+)/sub_sub_path/',ListGeneratedTokensByFileConsumer)

对于信息,在通道redis==2.3.2、通道==2.3.0、asgiref==3.2.2、daphne==2.3.0、django==2.0.8的情况下,在这一行中使用
send_json
等待self.send({“text”:“received”,“accept”:True})谢谢@Ken4scholars。我试着编辑了这个问题。它仍然返回相同的问题,并且只适用于到目前为止更改路由结尾的修复。显示从问题中连接到的url,以解释用于websocket的url的构造。结果是“ws://127.0.0.1:8000/myapp/sub_path/pk/sub_sub_path/”