Canais do Django - exemplo de eco não funciona
Estou seguindo as instruções nosite de documentação, mas fiquei preso no exemplo de eco, o websocket é criado corretamente e conectado ao servidor, mas quando envio algo ao servidor, não estou obtendo resposta (no exemplo diz que eu deveria ver uma janela de alerta com a mesma mensagem que envio ao soquete, mas não o envio, embora tenha alterado o alerta para um console.log, mas ainda assim), o que estou fazendo de errado?
Nosettings.py:
INSTALLED_APPS = {
...
'channels',
'myapp',
...
}
...
# Channels settings
CHANNEL_LAYERS = {
"default": {
"BACKEND": "asgiref.inmemory.ChannelLayer",
"ROUTING": "myapp.routing.channel_routing",
},
}
Norouting.py:
from channels.routing import route
from myapp.consumers import *
channel_routing = [
route("websocket.receive", ws_receive),
]
Nocustomers.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'],
})
Em asgi.py
import os
from channels.asgi import get_channel_layer
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
channel_layer = get_channel_layer()
Então eu executo: python manage.py runserver, e no meu navegador eu vou para o URL do servidor e no console eu coloco o seguinte:
socket = new WebSocket("ws://" + window.location.host + "/chat/");
socket.onmessage = function(e) {
alert(e.data);
}
socket.onopen = function() {
socket.send("hello world");
}
Novamente, nesse ponto, eu deveria ver uma janela de alerta (ou a mensagem console.log), mas não recebo nada.
As solicitações que eu fiz têm status de pendente (embora eu tenha lidoaqui e o primeiro comentário diz que é normal)
E a saída do servidor fica assim:
Toda vez que tentei enviar algo pelo soquete da web no navegador, o servidor apenas imprimiu CONNECT, mas nenhum log do console js está sendo exibido.
Edit: Eu testei websockets no meu navegador contra echo.websocket.org e recebi a resposta conforme o esperado: