GO语言实现websocket服务器

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
      }

   }
}


最后编辑于:2022/01/06作者: 牛逼PHP

发表评论