425*_*esp 11 nginx go websocket gorilla
我正在使用Go(Golang)1.4.2和一个nginx 1.4.6反向代理后面的Gorilla WebSockets.大约一分钟打开页面后,我的WebSockets正在断开连接.Chrome和Firefox上也出现相同的行为.
起初,我在使用WebSockets连接服务器和客户端时遇到了问题.然后,我读到我需要调整我的nginx配置.这就是我所拥有的.
server {
listen 80;
server_name example.com;
proxy_pass_header Server;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://127.0.0.1:1234;
}
}
Run Code Online (Sandbox Code Playgroud)
我的Go代码基本上回应了客户端的消息.(为简洁起见省略了错误).这是我的HandleFunc.
var up = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}
ws, _ := up.Upgrade(resp, req, nil)
defer ws.Close()
var s struct {
Foo string
Bar string
}
for {
ws.ReadJSON(&s)
ws.WriteJSON(s)
}
Run Code Online (Sandbox Code Playgroud)
JavaScript也非常简单.
var ws = new WebSocket("ws://example.com/ws/");
ws.addEventListener("message", function(evnt) {
console.log(JSON.parse(evnt.data));
});
var s = {
Foo: "hello",
Bar: "world"
};
ws.send(JSON.stringify(s));
Run Code Online (Sandbox Code Playgroud)
Go正在报道websocket: close 1006 unexpected EOF.我知道当我离开或刷新页面ReadJSON返回时EOF,但这似乎是一个不同的错误.此外,在打开页面大约一分钟后,意外的EOF会自行发生.
我有一个onerrorJavaScript函数.那个事件不会发生,而是onclose发生火灾.
Not*_*fer 34
我有同样的问题,问题是nginx配置.默认为1分钟读取超时proxy_pass:
语法:proxy_read_timeout time;
默认值:proxy_read_timeout 60s;
上下文:http,服务器,位置
见http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_read_timeout
在我的情况下,我已将超时时间增加到10小时:
proxy_read_timeout 36000s;