Giter Club home page Giter Club logo

Comments (4)

exapsy avatar exapsy commented on September 28, 2024 2

Edited out previous response as it was completely unhelpful even as an archive.

It turns out that the reason I had a closed channel, was because of this code

func SocketIO(...) {
    ...
    go server.Serve()
    defer server.Close()
    return server
}

What this code does? It creates a server, calls server.Serve() in a go routine, and then calls defer server.Close() as soon as nothing else has to run in the function, and then it returns the server which is hosted on my respectful http handler.

socketio := SocketIO(...)
http.ServeAndListen(..., socketio)

Which means, that defer will run as soon as the rest of the functions are done running in func SocketIO(). Which means the channel will close. Which means that as soon as the server runs, or sends a message, the channel will be closed because defer server.Close() is called.

Solution?

Dont call defer server.Close() in a function that doesn't loop/runs a server. Because that will close SocketIO server, as its supposed to happen anyway.

from go-engine.io.

ruandao avatar ruandao commented on September 28, 2024
panic: close of closed channel

goroutine 500621 [running]:
panic(0x83ad60, 0xc82b1472f0)
        /usr/local/go/src/runtime/panic.go:464 +0x3e6
github.com/googollee/go-engine%2eio.(*serverConn).OnClose(0xc82bd09790, 0x7f211aa30ee0, 0xc826105840)
        /data/html/live_im_system/src/github.com/googollee/go-engine.io/server_conn.go:257 +0x1a2
github.com/googollee/go-engine.io/polling.(*Polling).Close(0xc826105840, 0x0, 0x0)
        /data/html/live_im_system/src/github.com/googollee/go-engine.io/polling/server.go:67 +0x115
github.com/googollee/go-engine%2eio.(*serverConn).Close(0xc82bd09790, 0x0, 0x0)
        /data/html/live_im_system/src/github.com/googollee/go-engine.io/server_conn.go:176 +0x217
github.com/googollee/go-engine%2eio.(*serverConn).pingLoop(0xc82bd09790)
        /data/html/live_im_system/src/github.com/googollee/go-engine.io/server_conn.go:384 +0x416
created by github.com/googollee/go-engine%2eio.newServerConn
        /data/html/live_im_system/src/github.com/googollee/go-engine.io/server_conn.go:112 +0x58e

from go-engine.io.

erkie avatar erkie commented on September 28, 2024

We're seeing the same thing right now.

github.com/feederco/spider/vendor/github.com/googollee/go-engine%2eio.(*serverConn).OnClose(0xc0f06acb60, 0xf95780, 0xc04268d640)
#011/Users/erik/golang/src/github.com/feederco/spider/vendor/github.com/googollee/go-engine.io/server_conn.go:261 +0xfb
github.com/feederco/spider/vendor/github.com/googollee/go-engine.io/polling.(*Polling).Close(0xc04268d640, 0xf95780, 0xc04268d640)
#011/Users/erik/golang/src/github.com/feederco/spider/vendor/github.com/googollee/go-engine.io/polling/server.go:67 +0xf5
github.com/feederco/spider/vendor/github.com/googollee/go-engine%2eio.(*serverConn).Close(0xc0f06acb60, 0xe23cbd, 0xa)
#011/Users/erik/golang/src/github.com/feederco/spider/vendor/github.com/googollee/go-engine.io/server_conn.go:175 +0xf5
github.com/feederco/spider/vendor/github.com/googollee/go-socket%2eio.(*socket).Emit(0xc037a03500, 0xe23cbd, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
#011/Users/erik/golang/src/github.com/feederco/spider/vendor/github.com/googollee/go-socket.io/socket.go:70 +0xc6
github.com/feederco/spider/cmd.startWebsockets.func1(0xf9a9e0, 0xc037a03500)
#011/Users/erik/golang/src/github.com/feederco/spider/cmd/pusher.go:332 +0x6fd
reflect.Value.call(0xc90a00, 0xeb2be8, 0x13, 0xe1cb20, 0x4, 0xc053cfa940, 0x1, 0x1, 0xe15ea0, 0x1, ...)
#011/usr/local/Cellar/go/1.11/libexec/src/reflect/value.go:447 +0x449
reflect.Value.Call(0xc90a00, 0xeb2be8, 0x13, 0xc053cfa940, 0x1, 0x1, 0xc06382bc50, 0xbd580e, 0xc0f06acb88)
#011/usr/local/Cellar/go/1.11/libexec/src/reflect/value.go:308 +0xa4
github.com/feederco/spider/vendor/github.com/googollee/go-socket%2eio.(*caller).Call(0xc028e5c000, 0xf9a9e0, 0xc037a03500, 0x1852528, 0x0, 0x0, 0x0, 0x0, 0x0)
#011/Users/erik/golang/src/github.com/feederco/spider/vendor/github.com/googollee/go-socket.io/caller.go:81 +0x355
github.com/feederco/spider/vendor/github.com/googollee/go-socket%2eio.(*socketHandler).onPacket(0xc072073da0, 0x0, 0xc06382bf28, 0x0, 0x0, 0x0, 0x0, 0x0)
#011/Users/erik/golang/src/github.com/feederco/spider/vendor/github.com/googollee/go-socket.io/handler.go:185 +0x2e8
github.com/feederco/spider/vendor/github.com/googollee/go-socket%2eio.(*socket).loop(0xc037a03500, 0x0, 0x0)
#011/Users/erik/golang/src/github.com/feederco/spider/vendor/github.com/googollee/go-socket.io/socket.go:140 +0x1e7
github.com/feederco/spider/vendor/github.com/googollee/go-socket%2eio.(*Server).loop.func1(0xc037a03500)
#011/Users/erik/golang/src/github.com/feederco/spider/vendor/github.com/googollee/go-socket.io/server.go:108 +0x2b
created by github.com/feederco/spider/vendor/github.com/googollee/go-socket%2eio.(*Server).loop
#011/Users/erik/golang/src/github.com/feederco/spider/vendor/github.com/googollee/go-socket.io/server.go:107 +0x93
systemd[1]: feeder.service: Main process exited, code=exited, status=2/INVALIDARGUMENT

Seems like the polling transport has some issues. I have not been able to reproduce this locally, it happens about once/twice per day on a server with 10k concurrent connections.

from go-engine.io.

erkie avatar erkie commented on September 28, 2024

Found a possible culprit in this discussion:
#63

from go-engine.io.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.