django - websocket因“无效的帧头”而失败
问题描述
我创建了一个简单的聊天应用程序并将其部署到 AWS EC2。
我用 Vue.js 构建了前端并使用了 javascript 的 WebSocket。
在后端,我使用了 Django、channels 和 Postgres。
它在本地工作正常,但 WebSocket 在服务器上一段时间后断开连接。
我使用 Nginx 进行部署。
我还将 Nginx WebSocket 配置的 proxy_read_timeout 设置为 600s。
this.chatSocket = new WebSocket(GlobalConstants.WEBSOCKET_URL + '/ws/chat/' + id + '/')
this.chatSocket.onmessage = (m) => {
let data = JSON.parse(m.data)
let messageData = {}
messageData[data.type] = data.message
let message = {
author: data.sender == this.currentUser ? 'me' : data.sender,
type: data.type,
data: messageData
}
this.receiveMessage(message)
if (data.sender != this.currentUser) {
this.addParticipant(data.sender)
}
}
这是 nginx 配置。
server {
listen 80;
server_name x.x.x.x;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "http://127.0.0.1:8000";
}
location /ws/ {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_read_timeout 600s;
}
}
建立连接后,它会工作 10 或 20 秒。
然后发生此错误。
请帮我。
解决方案
这是一个nginx配置问题。我使用了 nginx 1.18.0 并且 proxy_read_timeout 没有工作。
推荐阅读
- typescript - 为什么 Typescript 在通用索引签名中给我一个错误
- javascript - Cron - 时间表
- python - websocket:连接到ubuntu上的服务器的问题
- wordpress - wp all import 变量订阅解决方法?
- java - leetcode中java保存链表加两个数
- java - 我无法理解 lambda 表达式在 Java 中的工作原理
- c - “良性”数据竞赛真的是良性的吗?
- javascript - 将函数结果分配给变量
- python - pandas:如何查看(参数)字符串是否在 pandas 元素中的字符串列表中(类似于反向 isin)
- php - 已弃用:strpos():将来非字符串指针将被解释为字符串。使用显式 chr() 调用来保留当前行为