Hi! Thanks for a library.
I have faced a strange problem using it and cannot fix it by myself
Here is a simple reproduce case:
package main
import (
"log"
"net/http"
"github.com/googollee/go-socket.io"
)
func main() {
server, err := socketio.NewServer(nil)
if err != nil {
log.Fatal(err)
}
server.On("connection", func(so socketio.Socket) {
log.Println("on connection")
so.Join("chat")
so.On("chat message", func(msg string) {
log.Println("emit:", so.Emit("chat message", msg))
so.BroadcastTo("chat", "chat message", msg)
})
so.On("disconnection", func() {
log.Println("on disconnect")
})
})
server.On("error", func(so socketio.Socket, err error) {
log.Println("error:", err)
})
http.Handle("/socket.io/", server)
http.Handle("/", http.FileServer(http.Dir("./asset")))
log.Println("Serving at localhost:5000...")
log.Fatal(http.ListenAndServe(":5000", nil))
}
and in the browser I use something like
<!doctype html>
<html>
<head>
<title>Socket.IO chat</title>
</head>
<body>
<script src="socket.io.js"></script>
<script>
var socket = io('localhost:5000', {transports: ["websocket"]})
console.log(socket)
</script>
</body>
</html>
Then I see strange warnings in my applications's log:
2015/11/21 20:43:30 Serving at localhost:5000...
2015/11/21 20:43:35 http: response.WriteHeader on hijacked connection
2015/11/21 20:43:35 on connection
Using gdb I have found that the problem is that we are still serving http on hijacked connection.
2015/11/21 20:46:17 Serving at localhost:5000...
Breakpoint 1, net/http.(*response).WriteHeader (w=0xc8200b3810, code=400) at /usr/lib/go/src/net/http/server.go:683
683 w.conn.server.logf("http: response.WriteHeader on hijacked connection")
(gdb) bt
#0 net/http.(*response).WriteHeader (w=0xc8200b3810, code=400) at /usr/lib/go/src/net/http/server.go:683
#1 0x000000000065db00 in github.com/googollee/go-engine.io/websocket.(*Server).ServeHTTP (s=0xc82000e960, w=...,
r=0xc8200d2000) at /root/gopath/src/github.com/googollee/go-engine.io/websocket/server.go:35
#2 0x00000000005d8cb9 in github.com/googollee/go-engine%2eio.(*serverConn).ServeHTTP (c=0xc820057d40, w=..., r=0xc8200d2000)
at /root/gopath/src/github.com/googollee/go-engine.io/server_conn.go:197
#3 0x00000000005d717d in github.com/googollee/go-engine%2eio.(*Server).ServeHTTP (s=0xc8200160e0, w=..., r=0xc8200d2000)
at /root/gopath/src/github.com/googollee/go-engine.io/server.go:159
#4 0x00000000004a5783 in github.com/googollee/go-socket%2eio.(*Server).ServeHTTP (s=0xc82000e660, w=..., r=0xc8200d2000)
at /root/gopath/src/github.com/googollee/go-socket.io/server.go:87
#5 0x000000000047d16d in net/http.(*ServeMux).ServeHTTP (mux=0xc820010960, w=..., r=0xc8200d2000)
at /usr/lib/go/src/net/http/server.go:1699
#6 0x000000000047dbde in net/http.serverHandler.ServeHTTP (sh=..., rw=..., req=0xc8200d2000)
at /usr/lib/go/src/net/http/server.go:1862
#7 0x000000000047b3ce in net/http.(*conn).serve (c=0xc8200b3550) at /usr/lib/go/src/net/http/server.go:1361
#8 0x000000000045bd01 in runtime.goexit () at /usr/lib/go/src/runtime/asm_amd64.s:1696
#9 0x000000c8200b3550 in ?? ()
#10 0x0000000000000000 in ?? ()
But I am not familiar with websockets and your implementation to go further.
Is it my mistake somewhere or bug in library?
Thank you