当我尝试使用sslserver
运行Django应用程序时,
python manage.py runsslserver
错误:
- 追溯:*
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
- 浏览器控制台:*
(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
代码:
- 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);
它与python manage.py runserver
命令一起工作正常,这意味着对于http
,它工作正常,但与https
不工作。
如何解决这个问题?(如何调试来解决这个问题?)
是否有其他方法可以在https
门户上部署WebSockets?
仍然面临这个问题。有人能帮忙吗?
无论如何,这是为了测试的目的,最后,我需要部署在Apache2.4的windows服务器机器。在那里我已经设置为https
,但没有为web套接字。
1条答案
按热度按时间roqulrg31#
我找到了答案,
runserver
命令正确地检测到asgi.py
文件,并使用daphne在WebSockets上运行Django通道应用程序。不知何故,runsslserver
没有做同样的工作,它运行的是wsgi.py
文件,而不是asgi.py
文件。在阅读了不同的方法之后,我了解到我们可以使用我们的普通开发服务器(即使用
wsgi.py
文件)处理HTTPS
请求,使用Daphne
(即使用asgi.py
文件)处理wss
请求。Daphne是一个官方设计的服务器来处理django频道(构建在扭曲模块的顶部)。
最后,我们需要运行两台服务器来分别处理
https
和wss
。我们应该使用与
runsslserver
相同的SSL证书进行测试。最后,在JavaScript中:
我希望,这能保存一些人的时间。