一分钟后,Gorilla WebSocket断开连接

我将Go(Golang)1.4.2和Gorilla WebSockets一起使用在nginx

1.4.6反向代理后面。打开页面大约一分钟后,我的WebSocket断开连接。在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;

}

}

我的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)

}

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));

Go正在报告websocket: close 1006 unexpected

EOF。我知道当我离开或刷新页面时会ReadJSON返回EOF,但这似乎是一个不同的错误。同样,打开页面大约一分钟后,意外的EOF也会自行发生。

我有一个onerrorJavaScript函数。该事件不会触发,而是onclose触发。

回答:

我有同样的问题,问题是nginx配置。默认情况下,其读取超时为1分钟proxy_pass

语法:proxy_read_timeout时间;

默认值:proxy_read_timeout 60s;

上下文:http,服务器,位置

参见http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_read_timeout

就我而言,我已将超时时间增加到10小时:

proxy_read_timeout 36000s;

以上是 一分钟后,Gorilla WebSocket断开连接 的全部内容, 来源链接: utcz.com/qa/426304.html

回到顶部