2015-03-03 09:34
浏览 581

一分钟后,Gorilla WebSocket断开连接

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;

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


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 {

The JavaScript is pretty simple as well.

var ws = new WebSocket("ws://");
ws.addEventListener("message", function(evnt) {

var s = {
    Foo: "hello",
    Bar: "world"

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.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongxuan2577
    dongxuan2577 2015-03-03 10:51

    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


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

    proxy_read_timeout 36000s;

    点赞 评论