2

我试图弄清楚如何设置 Django Channels,以便它通过 wss:// 方案接受我的 websocket 连接。

对于 ws:// 一切正常。我在客户端使用 websockets 包来建立与服务器的连接(将 Channels 作为 ASGI 服务器运行)。但是当我切换到 wss:// 并开始运行客户端时,然后...... 60 秒内没有任何反应,之后我收到一条错误消息,指出:“SSL 握手时间超过 60.0 秒:中止连接”

我的 Daphne 服务器在标准端口 8000 的 localhost 上运行。

Starting ASGI/Channels version 2.2.0 development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
INFO - 2019-11-15 14:12:14,094 - django-main-thread - daphne.server[110] - HTTP/2 support not enabled (install the http2 and tls Twisted extras)
INFO - 2019-11-15 14:12:14,094 - django-main-thread - daphne.server[119] - Configuring endpoint tcp:port=8000:interface=127.0.0.1
INFO - 2019-11-15 14:12:14,095 - django-main-thread - daphne.server[150] - Listening on TCP address 127.0.0.1:8000

我知道 HTTP 和 HTTPS 以及 TCP 和 TLS 应该在不同的端口上运行,但由于我没有在 Django Channels readthedocs 网站上找到任何提示,我认为它可能只是奇迹般地处理这两者而无需任何配置。我想我错了?

客户端连接是这样建立的:

ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
    ssl_context.set_ciphers(get_allowed_ciphers())
    ssl_context.verify_mode = ssl.CERT_REQUIRED
    ssl_context.check_hostname = False

async with websockets.client.connect(
            uri=url,
            extra_headers=header,
            ssl=ssl_context) as websocket:
      await asyncio.gather(on_open(websocket), on_message(websocket))

on_open() 和 on_message() 方法分别处理套接字的打开和解析传入的消息。

现在,我实际上也希望能够在服务器端(使用 Channels)设置 SSL 上下文,但是经过数小时的在线研究后,我还没有找到一个示例。我宁愿只看到将 nginx 配置为侦听端口 443 并指向必要证书的示例。

我认为 Daphne 是一个生产就绪的服务器,可以同时处理 HTTP(s) 和 WebSocket(ws 和 wss)请求。我需要 Nginx 做什么?

这似乎是一个愚蠢的问题,但我很高兴在这里得到任何帮助。

4

0 回答 0