python - 托管在 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 。
解决方案
感谢 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
推荐阅读
- java - 将用户日期数据输入格式化为大端、小端、中端等格式
- c# - 如何通过将源绑定到 XPath 在 WPF 中使用 MediaElement?
- python - 如何使用 Apache 处理 Python 文件
- android - recyclerview 只更改 1 个图标(收藏图标),而数据超过 1 个
- javascript - 如何通过输入字段的查询异步获取 api 数据?
- microsoft-teams - 输入值替换不适用于 MS Teams 中的消息卡
- python - 键不在字典中产生 KeyError 1
- python - 如何将第一种方法的结果传递给第二种方法?
- c# - 多个 LUIS 对话框及其实体存在问题
- c# - 确定大型整数列表中常见元素计数的最有效方法