1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| package main
import ( "github.com/gorilla/websocket" "log" "net/http" )
var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, CheckOrigin: func(r *http.Request) bool { return true }, }
func main() { http.HandleFunc("/ws", echoHandler) log.Fatal(http.ListenAndServe(":10088", nil)) }
func echoHandler(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println(err) return }
defer conn.Close() conn.SetCloseHandler(func(code int, text string) error { log.Printf("Connection closed [%s]\n", conn.RemoteAddr().String()) return nil }) log.Printf("Connection open [%s]:\n", conn.RemoteAddr().String()) for { messageType, message, err := conn.ReadMessage() if err != nil { if strings.Contains(err.Error(), "websocket: close") { log.Printf("Connection closed [%s]\n", conn.RemoteAddr().String()) }else{ log.Println(err) } break } if messageType == websocket.TextMessage { log.Printf("Received [%s]:\nmessage:%s", conn.RemoteAddr().String(), message) sendMsg := "服务器返回:" + string(message) err = conn.WriteMessage(messageType, []byte(sendMsg)) log.Printf("Send [%s]:\nmessage:%s", conn.RemoteAddr().String(), sendMsg) if err != nil { log.Println(err) break } } } }
|