大猩猩WebSocket在一分钟后断开连接 [英] Gorilla WebSocket disconnects after a minute

查看:588
本文介绍了大猩猩WebSocket在一分钟后断开连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Go(Golang)1.4.2和Gorilla WebSockets作为nginx 1.4.6反向代理。打开页面大约一分钟后,我的WebSockets断开连接。在Chrome和Firefox上发生同样的行为。



起初,我在使用WebSockets连接服务器和客户端时遇到问题。然后,我读到我需要调整我的nginx配置。这是我的。

 服务器{
听80;
server_name example.com;

proxy_pass_header服务器;

位置/ {
proxy_set_header主机$主机;
proxy_set_header X-Real-IP $ remote_addr;
proxy_set_header X-Forward-Proto $ scheme;

proxy_http_version 1.1;
proxy_set_header升级$ http_upgrade;
proxy_set_header连接升级;

proxy_pass http://127.0.0.1:1234;
}
}

My Go代码基本上是回显客户端的消息。 (为简洁起见省略了错误)。这是我的 HandleFunc

  var up = websocket.Upgrader {
ReadBufferSize:1024,
WriteBufferSize:1024,
}

ws,_:= up.Upgrade(resp,req,nil)
推迟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:关闭1006意外的EOF 。我知道当我离开或刷新页面 ReadJSON 返回 EOF 时,但这看起来是一个不同的错误。



我有一个 onerror 这个意外的EOF在页面打开约一分钟后自动发生。在JavaScript中的功能。该事件不会触发,但是 onclose 会被触发。

解决方案

我有同样的问题,问题是nginx配置。它默认为1分钟的读取超时 proxy_pass
$ b


语法:proxy_read_timeout time ;

默认值:proxy_read_timeout 60s;

上下文:http,server,location

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



在我的情况中,我将超时时间增加到了10个小时:



proxy_read_timeout 36000s;


I'm using Go (Golang) 1.4.2 with Gorilla WebSockets behind an nginx 1.4.6 reverse proxy. My WebSockets are disconnecting after about a minute of having the page open. Same behavior occurs on Chrome and Firefox.

At first, I had problems connecting the server and client with WebSockets. Then, I read that I needed to tweak my nginx configuration. This is what I have.

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

My Go code is basically echoing back the client's message. (Errors omitted for brevity). This is my 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)
}

The JavaScript is pretty simple as well.

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 is reporting websocket: close 1006 unexpected EOF. I know that when I leave or refresh the page ReadJSON returns EOF, but this appears to be a different error. Also, the unexpected EOF happens by itself after about a minute of having the page open.

I have an onerror function in JavaScript. That event doesn't fire, but onclose fires instead.

解决方案

I had the same issue, the problem is the nginx configuration. It defaults to a 1 minute read timeout for proxy_pass:

Syntax: proxy_read_timeout time;

Default: proxy_read_timeout 60s;

Context: http, server, location

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

In my case I've increased the timeout to 10 hours:

proxy_read_timeout 36000s;

这篇关于大猩猩WebSocket在一分钟后断开连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆