Соединение websocket в new_web.js не вызывает потребителей в django - PullRequest
0 голосов
/ 02 июля 2019

Файл new.js, который содержит соединение websocket и который фактически соединяет / активирует каналы django, не соединяется. Я не понимаю, где именно проблема.

Я попытался подключить другое сокетное соединение для другого потребителя на другой HTML-странице, которая работает отлично.

WebSocket HANDSHAKING /new/ [127.0.0.1:61934]
WebSocket CONNECT /new/ [127.0.0.1:61934]
Add specific.bYAxHTPf!sBbGasUiKdHR channel to post's group
connected

Одна веб-розетка прекрасно подключается где, когда я запускаю localhost:8000/w который должен подключаться к другому веб-сокету, он не подключается к потребителям.

HTTP GET /static/js/channels/new_web.js 304 [0.01, 127.0.0.1:62085]

Я могу получить доступ к соединению websocket внутри шаблона, но этот websocket запускает мой путь в маршрутизации, который, в свою очередь, запускает моих потребителей.

new_web.js

$(function(){
        endpoint = 'ws://127.0.0.1:8000/like/' // 1

        var socket =  new ReconnectingWebSocket(endpoint) // 2

        socket.onopen = function(e){
          console.log("open",e);
        }
        socket.onmessage = function(e){
          console.log("message",e)
          var userData = JSON.parse(e.data)
          $('#new_user').html(userData.html_users)
        }
        socket.onerror = function(e){
          console.log("error",e)
        }
        socket.onclose = function(e){
          console.log("close",e)
        }
   });

           socket.onclose = function(e){
             console.log("close",e)
           }
      });

routing.py

from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
from django.urls import path
from posts.consumers import PostConsumer,LikeConsumer

application = ProtocolTypeRouter({
    'websocket': AuthMiddlewareStack(
        URLRouter(
            [
                path("new/", PostConsumer),
                path("like/", LikeConsumer),

            ]
        )
    )
})

consumers.py

class LikeConsumer(AsyncJsonWebsocketConsumer):
    async def connect(self):
        self.user = self.scope["user"]
        if user.is_anonymous:
            await self.close()
            print("user is anonymous")
        else:
            await self.accept()
            user_group = await self._get_user_group(self.scope['user'])

            await self.channel_layer.group_add("{}".format(user.id), self.channel_name)
            print(f"Add {self.channel_name} channel to post's group")
            print('connected')
    @database_sync_to_async
    def _get_user_group(self, user):
        if not user.is_authenticated:
            raise Exception('User is not authenticated.')
        return user.groups.first().name
    async def disconnect(self,close_code):
        await self.channel_layer.group_discard("{}".format(user.id), self.channel_name)
        print(f"Remove {self.channel_name} channel from post's group")

Даже если с потребительской частью что-то не так, все равно должна быть какая-то ошибка, но я просто не могу найти ни ошибки в консоли, ни в терминале. Я просто хочу вызвать этого потребителя. В потребительской части я пытаюсь добавить конкретного пользователя к определенному каналу и группе. Я не уверен, что это правильный способ сделать это. Если я сделал что-то не так, пожалуйста, дайте мне знать.

...