首页 > 解决方案 > 托管在 Heroku 上时出现“WebSocket 握手期间出错”

问题描述

我正在 Django 和 atm 上创建一个聊天服务器,试图实现 websockets。它在本地运行良好,但每当我在 Heroku 上启动它时,websocket 就无法访问。这是我的客户端脚本:

var loc = window.location
var ws_start = 'ws://'
if (loc.protocol == 'https:'){
    ws_start = 'wss://'
}
var endpoint = ws_start + loc.host + loc.pathname
var socket = new WebSocket(endpoint)

完整的错误代码:

WebSocket connection to 'wss://my-app.herokuapp.com/chat' failed: Error during WebSocket handshake: Unexpected response code: 500

我已经看到了许多类似的问题,它们要么没有答案,要么正在研究处理 SSL 证书。如果有人要确认这是真的,那么有一个答案可能会为我(和其他人)节省很多挫败感。它已经很老了,发布后没有任何反馈:https ://stackoverflow.com/a/45173822/7446564 。

标签: pythondjangoherokuwebsocket

解决方案


感谢 Heroku 日志,我能够得到实际的错误消息:

Django daphne asgi: Django can only handle ASGI/HTTP connections, not websocket

这个答案帮助我解决了这个问题:https ://stackoverflow.com/a/59909118/7446564

总而言之:如果您在 Django 上启动 websockets 时出错,请确保您的.asgi文件设置正确。我还将在下面附上我的 Procfile,因为第一次设置它也是一个小过程,我希望它也可能有所帮助:

web: daphne my-app.asgi:application --port $PORT --bind 0.0.0.0 -v2


推荐阅读