Gorilla WebSocket disconnects after a minute
我将Go(Golang)1.4.2和Gorilla WebSockets一起使用在nginx 1.4.6反向代理后面。 打开页面大约一分钟后,我的WebSocket断开连接。 在Chrome和Firefox上也会发生相同的行为。
最初,我在使用WebSockets连接服务器和客户端时遇到问题。 然后,我读到我需要调整我的nginx配置。 这就是我所拥有的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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; } } |
我的Go代码基本上是在回显客户的消息。 (为简洁起见,省略了错误)。 这是我的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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) } |
JavaScript也非常简单。
1 2 3 4 5 6 7 8 9 10 | 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)); |
Go正在报告
我在JavaScript中有一个
我有同样的问题,问题是nginx配置。 默认情况下,
Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location
参见http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_read_timeout
就我而言,我已将超时时间增加到10小时: