61 lines
1.1 KiB
Go
61 lines
1.1 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"encoding/hex"
|
||
|
"io/ioutil"
|
||
|
"log"
|
||
|
"net/http"
|
||
|
"time"
|
||
|
|
||
|
"github.com/googollee/go-engine.io"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
server, err := engineio.NewServer(nil)
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
server.SetPingInterval(time.Second * 2)
|
||
|
server.SetPingTimeout(time.Second * 3)
|
||
|
|
||
|
go func() {
|
||
|
for {
|
||
|
conn, _ := server.Accept()
|
||
|
go func() {
|
||
|
log.Println("connected:", conn.Id())
|
||
|
defer func() {
|
||
|
conn.Close()
|
||
|
log.Println("disconnected:", conn.Id())
|
||
|
}()
|
||
|
for {
|
||
|
t, r, err := conn.NextReader()
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
b, err := ioutil.ReadAll(r)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
r.Close()
|
||
|
if t == engineio.MessageText {
|
||
|
log.Println(t, string(b))
|
||
|
} else {
|
||
|
log.Println(t, hex.EncodeToString(b))
|
||
|
}
|
||
|
w, err := conn.NextWriter(t)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
w.Write([]byte("pong"))
|
||
|
w.Close()
|
||
|
}
|
||
|
}()
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
http.Handle("/engine.io/", server)
|
||
|
http.Handle("/", http.FileServer(http.Dir("./asset")))
|
||
|
log.Println("Serving at localhost:4000...")
|
||
|
log.Fatal(http.ListenAndServe(":4000", nil))
|
||
|
}
|