GO语言实现websocket服务器
package main import ( "fmt" "github.com/gorilla/websocket" "net/http" "time" ) func main() { http.HandleFunc("/ws", websocketHandle) err := http.ListenAndServe(":9090", nil) if err != nil { return } } func websocketHandle(w http.ResponseWriter, r *http.Request) { u := &websocket.Upgrader{ HandshakeTimeout: 0, ReadBufferSize: 0, WriteBufferSize: 0, WriteBufferPool: nil, Subprotocols: nil, Error: nil, CheckOrigin: func(r *http.Request) bool { return true }, EnableCompression: false, } c, err := u.Upgrade(w, r, nil) if err != nil { fmt.Println(err) } defer c.Close() done := make(chan int, 1) go func() { for { message, i, err := c.ReadMessage() if err != nil { fmt.Println(err) done <- 1 return } fmt.Println(message, string(i)) } }() for i := 0; ; i++ { err := c.WriteJSON(map[string]string{ "type": "say", "msg": fmt.Sprintf("hello,%d", i), }) if err != nil { fmt.Println(err) } select { case <-time.After(200 * time.Millisecond): case <-done: fmt.Println("done") return } } }
发表评论