django通道的websocket握手失败
编辑:下面@Ken4scholars评论后更正 我有一个在连接后立即出现故障的耗电元件 consumers.pydjango通道的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
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会与code1006
断开连接。对于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/”