Canales de Django: el ejemplo de eco no funciona
Estoy siguiendo las instrucciones en elsitio de documentación, pero me quedé atascado en el ejemplo de eco, el websocket se creó correctamente y está conectado al servidor, pero cuando envío algo al servidor no obtengo ninguna respuesta (en el ejemplo dice que debería ver una ventana de alerta con el mismo mensaje que envío al socket pero no lo hago, aunque he cambiado la alerta para un console.log pero aún así), ¿qué estoy haciendo mal?
Ensettings.py:
INSTALLED_APPS = {
...
'channels',
'myapp',
...
}
...
# Channels settings
CHANNEL_LAYERS = {
"default": {
"BACKEND": "asgiref.inmemory.ChannelLayer",
"ROUTING": "myapp.routing.channel_routing",
},
}
Enrouting.py:
from channels.routing import route
from myapp.consumers import *
channel_routing = [
route("websocket.receive", ws_receive),
]
Enlos consumidores.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'],
})
En asgi.py
import os
from channels.asgi import get_channel_layer
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
channel_layer = get_channel_layer()
Luego ejecuto: python manage.py runserver, y en mi navegador voy a la url del servidor y en la consola pongo lo siguiente:
socket = new WebSocket("ws://" + window.location.host + "/chat/");
socket.onmessage = function(e) {
alert(e.data);
}
socket.onopen = function() {
socket.send("hello world");
}
Nuevamente, en este punto debería ver una ventana de alerta (o el mensaje console.log) pero no obtengo nada.
Las solicitudes que hice tienen un estado de pendiente (aunque leíaquí y el primer comentario dice que es normal)
Y la salida del servidor se ve así:
Cada vez que he intentado enviar algo a través del websocket en el navegador, el servidor simplemente imprime CONNECT pero no se muestra ningún registro desde la consola js.
Editar: he probado websockets en mi navegador contra echo.websocket.org y obtuve la respuesta como esperaba: