10 votes

Django channels - L'exemple Echo ne fonctionne pas

Je suis les instructions du site de documentation Mais je suis bloqué dans l'exemple de l'écho, le websocket est créé correctement et il est connecté au serveur mais quand j'envoie quelque chose au serveur je n'obtiens aucune réponse (dans l'exemple il est dit que je devrais voir une fenêtre d'alerte avec le même message que j'envoie dans le socket mais je ne le vois pas, bien que j'ai changé l'alerte pour un console.log mais quand même), qu'est-ce que je fais de travers ?

En settings.py :

INSTALLED_APPS = {
    ...
    'channels',
    'myapp',
    ...
} 

...
# Channels settings
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "asgiref.inmemory.ChannelLayer",
        "ROUTING": "myapp.routing.channel_routing",
    },
}

En routing.py :

from channels.routing import route
from myapp.consumers import *

channel_routing = [
    route("websocket.receive", ws_receive),
]

En consumers.py :

def ws_receive(message):
    # ASGI WebSocket packet-received and send-packet message types
    # both have a "text" key for their textual data.
    message.reply_channel.send({
        "text": message.content['text'],
    })

Dans asgi.py

import os
from channels.asgi import get_channel_layer

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")

channel_layer = get_channel_layer()

Ensuite, je lance : python manage.py runserver, et dans mon navigateur je vais à l'url du serveur et dans la console je mets ce qui suit :

socket = new WebSocket("ws://" + window.location.host + "/chat/");
socket.onmessage = function(e) {
    alert(e.data);
}
socket.onopen = function() {
    socket.send("hello world");
}

Là encore, je devrais voir apparaître une fenêtre d'alerte (ou le message console.log), mais je n'obtiens rien.

response

Les demandes que j'ai faites ont un statut d'attente (Bien que j'aie lu aquí et le premier commentaire dit que c'est normal)

requests

La sortie du serveur ressemble à ceci :

server-output

A chaque fois que j'ai essayé d'envoyer quelque chose via le websocket dans le navigateur, le serveur se contente d'imprimer CONNECT mais aucun log de la console js ne s'affiche.

Edit : J'ai testé les websockets dans mon navigateur contre echo.websocket.org et j'ai obtenu la réponse attendue :

test-websocket

7voto

Nickyt Points 86

Je suis passé à une version plus ancienne de twisted et le problème a été résolu. Hth

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X