Django channels, wysłanie wiadomości do grupy

Django channels, wysłanie wiadomości do grupy
PR
  • Rejestracja:ponad 9 lat
  • Ostatnio:3 miesiące
  • Postów:316
0

Cześć,
w swojej aplikacji zdecydowałem się na skorzystanie z djnago channels. Wykorzystuję tę bibliotkę do obsługi web socketów. Jednak mam problem, nie mogę wysłać wiadomości go utworzonej grupy jednocześnie mogę wysłać wiadomość do łączącego się użytkownika. Kod mniej więcej wygląda tak:

Kopiuj
class waiting(WebsocketConsumer):
    def connect(self):
        self.channel_layer.group_add(
            'my_group_name',
            self.channel_name
        )

        if <condition>:
            self.channel_layer.group_send( # To nie daje żadnego efektu, jestem penwny że warunek jest spełniany
                'my_group_name',
                {
                    'message' : 'succes'
                }
            )

        self.accept()
        self.send(json.dumps({'message' : 'message'})) # Ta widomość dochodzi

    def disconnect(self, close_code):
        self.channel_layer.group_discard(
            'my_group_name',
            self.channel_name
        )

Widać w tym jakiś błąd? Przekopałem już kilka tutoriali, sprawdziłem w dokumentacji i nie wiedzę żadnego błędu.

edytowany 1x, ostatnio: przemyslowiec
Tomasz Kozłowski
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:6
0

Hej,

Jaka wersja django_channels?

PR
  • Rejestracja:ponad 9 lat
  • Ostatnio:3 miesiące
  • Postów:316
0
Tomasz Kozłowski napisał(a):

Hej,

Jaka wersja django_channels?

channels == 2.3.1 i Django 2.2.6.

Tomasz Kozłowski
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:6
0

Niestety nie mam doświadczenia z wersją 2.x ponieważ wciąż używam wersji 1.x

Próbowałeś przenieść wywołanie metody self.accept() nad kodem do wysłania wiadomości? Poza tym ta metoda nie powinna być wykonana jako pierwsza?

PR
  • Rejestracja:ponad 9 lat
  • Ostatnio:3 miesiące
  • Postów:316
0

Tak próbowałem, spróbowałem chyba każdej kombinacji z tym związanej.

PR
  • Rejestracja:ponad 9 lat
  • Ostatnio:3 miesiące
  • Postów:316
0

Dobra, udało mi się to rozwiązać, jako że sam nie lubię trafiać na pytania bez odpowiedzi to proszę:

Kopiuj
class waiting(WebsocketConsumer):
    def connect(self):
        self.channel_layer.group_add(
            'my_group_name',
            self.channel_name
        )

        if <condition>:
            await self.channel_layer.group_send(
                self.room_group_name,
                {
                    'type': 'message',
                    'message': 'message'
                }
            )

        self.accept()

    def disconnect(self, close_code):
        self.channel_layer.group_discard(
            'my_group_name',
            self.channel_name
        )

    def message(self, event):
        message = event['message']

        await self.send(text_data=json.dumps({
            'message': message
        }))

Akurat to rozwiązanie udało mi się znaleźć trochę przez przypadek - dostałem zupełnie inny błąd który naprowadził mnie na poprawne rozwiązanie.

edytowany 1x, ostatnio: przemyslowiec

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.