golang websocket

server

go
package main

import (
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

func main() {
    upgrader := &websocket.Upgrader{
        //如果有 cross domain 的需求,可加入這個,不檢查 cross domain
        CheckOrigin: func(r *http.Request) bool { return true },
    }
    http.HandleFunc("/echo", func(w http.ResponseWriter, r *http.Request) {
        c, err := upgrader.Upgrade(w, r, nil)
        if err != nil {
            log.Println("upgrade:", err)
            return
        }
        defer func() {
            log.Println("disconnect !!")
            c.Close()
        }()
        for {
            mtype, msg, err := c.ReadMessage()
            if err != nil {
                log.Println("read:", err)
                break
            }
            log.Printf("receive: %s\n", msg)
            err = c.WriteMessage(mtype, msg)
            if err != nil {
                log.Println("write:", err)
                break
            }
        }
    })
    log.Println("server start at :8899")
    log.Fatal(http.ListenAndServe(":8899", nil))
}

client

go
package main

import (
    "log"

    "github.com/gorilla/websocket"
)

func main() {

    c, _, err := websocket.DefaultDialer.Dial("ws://127.0.0.1:8899/echo", nil)
    if err != nil {
        log.Fatal("dial:", err)
    }
    defer c.Close()
    for {
        err = c.WriteMessage(websocket.TextMessage, []byte("hello x213212y"))
        if err != nil {
            log.Println(err)
            return
        }
        _, msg, err := c.ReadMessage()
        if err != nil {
            log.Println("read:", err)
            return
        }
        log.Printf("receive: %s\n", msg)
    }

}