рукопожатие websocket терпит неудачу с каналами django - PullRequest
0 голосов
/ 24 сентября 2019

РЕДАКТИРОВАТЬ : исправление после комментария @ 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...