Cuando intenté ejecutar la aplicación Django usando sslserver
como se muestra a continuación,
python manage.py runsslserver
Errores:
Rastrear:
Validating models...
System check identified no issues (0 silenced).
November 08, 2019 - 11:17:26
Django version 2.0.7, using settings 'dashboard_channels.settings'
Starting development server at https://127.0.0.1:8000/
Using SSL certificate: \lib\site-packages\sslserver\certs\development.crt
Using SSL key: \lib\site-packages\sslserver\certs\development.key
Quit the server with CTRL-BREAK.
[08/Nov/2019 11:18:33] "GET / HTTP/1.1" 200 1299
[08/Nov/2019 11:18:34] "GET / HTTP/1.1" 200 1299
[08/Nov/2019 11:18:35] "GET /static/js/jquery.js HTTP/1.1" 200 270575
Not Found: /ws/home
[08/Nov/2019 11:18:36] "GET /ws/home HTTP/1.1" 404 2134
Consola del navegador:
(index):31 WebSocket connection to 'wss://127.0.0.1:8000/ws/home' failed: Error during WebSocket handshake: Unexpected response code: 404
(index):41 error Event
(index):44 close CloseEvent
Código:
Javascript:
var loc = window.location;
var wsStart = 'ws://';
if (loc.protocol == 'https:') {
wsStart = 'wss://'
}
var endpoint = wsStart + loc.host + '/ws/home';
var socket = new WebSocket(endpoint);
Funciona bien con el python manage.py runserver
comando, significa http
que funciona pero no con https
.
Cómo resolver este problema? (¿Cómo depurar para solucionar este problema?)
¿Hay alguna otra forma de implementar WebSockets en el https
portal?
Todavía enfrenta este problema. Alguien puede ayudarme porfavor?
De todos modos, esto es para fines de prueba, finalmente, necesito implementarlo en Apache2.4 en la máquina del servidor de Windows. Donde ya lo configuré https
pero no para los sockets web.
http
.CHANNEL_LAYERS
se configuró y funciona totalmente bien conhttp
. ¿Cómo correrhttps
?Respuestas:
Encontré la respuesta, el
runserver
comando detecta correctamente elasgi.py
archivo y ejecuta la aplicación de canales Django en WebSockets usando daphne. De alguna manerarunsslserver
no está haciendo el mismo trabajo, está ejecutando elwsgi.py
archivo en lugar delasgi.py
archivo.Después de leer diferentes enfoques, sé que podemos manejar la
HTTPS
solicitud utilizando nuestro servidor de desarrollo normal (es decir, usando unwsgi.py
archivo) y lawss
solicitud usandoDaphne
(es decir, usando unasgi.py
archivo).Daphne era un servidor oficialmente diseñado para manejar canales django (construido en la parte superior del módulo retorcido).
Entonces, finalmente, necesitamos ejecutar dos servidores para manejar
https
y porwss
separado.Podemos usar los mismos certificados SSL utilizados
runsslserver
para las pruebas.Finalmente, en JavaScript:
Espero que esto ahorre tiempo a alguien.
fuente