РЕДАКТИРОВАТЬ : исправление после комментария @ Ken4scholars ниже
У меня есть следующий потребитель, который выходит из строя сразу после подключения
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):
the_token_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)
Всегда выдает ошибку: ERR_CONNECTION:RESEST
и веб-розетка отключается с кодом 1006
.Это может показаться знакомым недавним изменениям в django-каналах, но так как я отправляю текст, как только веб-розетка открывается, и отправляю сообщение обратно потребителю, это должно сработать.Или что-то не так?
РЕДАКТИРОВАТЬ Текущее исправление заключается в удалении конечного знака $
в конце URL-адреса маршрутизации и, похоже, связано с недавними изменениями в Chrome, но нене похоже на правильное решение.
#ie.
url(r'^myapp/sub_path/(?P<pk>\d+)/sub_path/',ListGeneratedTokensByFileConsumer)
#instead of
url(r'^myapp/sub_path/(?P<pk>\d+)/sub_path/$',ListGeneratedTokensByFileConsumer)
и конечная точка websocket в js:
var loc = window.location;
var wsStart = "ws://";
if (loc.protocol == "https:") {
wsStart = "wss://";
}
var endpoint = wsStart + loc.host + loc.pathname + "sub_path/";
для информации, с channel-redis == 2.0.3, channel ==2.1.6, asgiref == 2.3.3, дафна == 2.2.4, django == 2.0.8